diff --git a/src/App/Document.cpp b/src/App/Document.cpp
index cba2e757b..86b9ef79c 100644
--- a/src/App/Document.cpp
+++ b/src/App/Document.cpp
@@ -1516,10 +1516,10 @@ DocumentObject* Document::_copyObject(DocumentObject* obj, std::mapgetNameInDocument();
if (!keepdigitsatend) {
- size_t lastpos = objname.length()-1;
- while (objname[lastpos] >= 48 && objname[lastpos] <= 57)
- lastpos--;
- objname = objname.substr(0, lastpos+1);
+ size_t lastpos = objname.length()-1;
+ while (objname[lastpos] >= 48 && objname[lastpos] <= 57)
+ lastpos--;
+ objname = objname.substr(0, lastpos+1);
}
DocumentObject* copy = addObject(obj->getTypeId().getName(),objname.c_str());
if (!copy) return 0;
diff --git a/src/App/PropertyFile.cpp b/src/App/PropertyFile.cpp
index 52278ea99..934023272 100644
--- a/src/App/PropertyFile.cpp
+++ b/src/App/PropertyFile.cpp
@@ -346,10 +346,10 @@ void PropertyFileIncluded::RestoreDocFile(Base::Reader &reader)
Property *PropertyFileIncluded::Copy(void) const
{
- PropertyFileIncluded *p= new PropertyFileIncluded();
+ PropertyFileIncluded *prop = new PropertyFileIncluded();
// remember the base name
- p->_BaseFileName = _BaseFileName;
+ prop->_BaseFileName = _BaseFileName;
if (!_cValue.empty()) {
Base::FileInfo file(_cValue);
@@ -361,11 +361,11 @@ Property *PropertyFileIncluded::Copy(void) const
bool done = file.renameFile(NewName.filePath().c_str());
assert(done);
// remember the new name for the Undo
- Base::Console().Log("Copy this=%p Before=%s After=%s\n",p,p->_cValue.c_str(),NewName.filePath().c_str());
- p->_cValue = NewName.filePath().c_str();
+ Base::Console().Log("Copy this=%p Before=%s After=%s\n",prop,prop->_cValue.c_str(),NewName.filePath().c_str());
+ prop->_cValue = NewName.filePath().c_str();
}
- return p;
+ return prop;
}
void PropertyFileIncluded::Paste(const Property &from)
@@ -376,6 +376,9 @@ void PropertyFileIncluded::Paste(const Property &from)
file.deleteFile();
const PropertyFileIncluded &fileInc = dynamic_cast(from);
+ // set the base name
+ _BaseFileName = fileInc._BaseFileName;
+
if (!fileInc._cValue.empty()) {
// move the saved files back in place
Base::FileInfo NewFile(fileInc._cValue);
diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp
index 6d3b01a34..5586fff6f 100644
--- a/src/Gui/CommandDoc.cpp
+++ b/src/Gui/CommandDoc.cpp
@@ -894,9 +894,9 @@ bool StdCmdPaste::isActive(void)
return getMainWindow()->canInsertFromMimeData(mime);
}
-DEF_STD_CMD_A(StdCmdDDuplicateSelection);
+DEF_STD_CMD_A(StdCmdDuplicateSelection);
-StdCmdDDuplicateSelection::StdCmdDDuplicateSelection()
+StdCmdDuplicateSelection::StdCmdDuplicateSelection()
:Command("Std_DuplicateSelection")
{
sAppModule = "Edit";
@@ -907,7 +907,7 @@ StdCmdDDuplicateSelection::StdCmdDDuplicateSelection()
sStatusTip = QT_TR_NOOP("Put duplicates of the selected objects to the active document");
}
-void StdCmdDDuplicateSelection::activated(int iMsg)
+void StdCmdDuplicateSelection::activated(int iMsg)
{
App::Document* act = App::GetApplication().getActiveDocument();
if (!act)
@@ -964,7 +964,7 @@ void StdCmdDDuplicateSelection::activated(int iMsg)
}
}
-bool StdCmdDDuplicateSelection::isActive(void)
+bool StdCmdDuplicateSelection::isActive(void)
{
return Gui::Selection().hasSelection();
}
@@ -1275,7 +1275,7 @@ void CreateDocCommands(void)
rcCmdMgr.addCommand(new StdCmdCut());
rcCmdMgr.addCommand(new StdCmdCopy());
rcCmdMgr.addCommand(new StdCmdPaste());
- rcCmdMgr.addCommand(new StdCmdDDuplicateSelection());
+ rcCmdMgr.addCommand(new StdCmdDuplicateSelection());
rcCmdMgr.addCommand(new StdCmdSelectAll());
rcCmdMgr.addCommand(new StdCmdDelete());
rcCmdMgr.addCommand(new StdCmdRefresh());
diff --git a/src/Gui/DlgPreferencesImp.cpp b/src/Gui/DlgPreferencesImp.cpp
index 1e52e00f4..e841e9b18 100644
--- a/src/Gui/DlgPreferencesImp.cpp
+++ b/src/Gui/DlgPreferencesImp.cpp
@@ -25,6 +25,7 @@
#ifndef _PreComp_
# include
# include
+# include
# include
#endif
@@ -89,6 +90,15 @@ void DlgPreferencesImp::setupPages()
}
fileName = std::string("preferences-") + fileName;
QPixmap icon = Gui::BitmapFactory().pixmapFromSvg(fileName.c_str(), QSize(96,96));
+ if (icon.isNull()) {
+ icon = Gui::BitmapFactory().pixmap(fileName.c_str());
+ if (icon.isNull()) {
+ qWarning() << "No group icon found for " << fileName.c_str();
+ }
+ else if (icon.size() != QSize(96,96)) {
+ qWarning() << "Group icon for " << fileName.c_str() << " is not of size 96x96";
+ }
+ }
item->setIcon(icon);
item->setTextAlignment(Qt::AlignHCenter);
item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
diff --git a/src/Gui/Placement.cpp b/src/Gui/Placement.cpp
index 091c10512..5697814e9 100644
--- a/src/Gui/Placement.cpp
+++ b/src/Gui/Placement.cpp
@@ -99,10 +99,15 @@ Placement::Placement(QWidget* parent, Qt::WFlags fl)
connect(signalMapper, SIGNAL(mapped(int)),
this, SLOT(onPlacementChanged(int)));
+ connectAct = Application::Instance->signalActiveDocument.connect
+ (boost::bind(&Placement::slotActiveDocument, this, _1));
+ App::Document* activeDoc = App::GetApplication().getActiveDocument();
+ if (activeDoc) documents.insert(activeDoc->getName());
}
Placement::~Placement()
{
+ connectAct.disconnect();
delete ui;
}
@@ -113,6 +118,36 @@ void Placement::showDefaultButtons(bool ok)
ui->applyButton->setVisible(ok);
}
+void Placement::slotActiveDocument(const Gui::Document& doc)
+{
+ documents.insert(doc.getDocument()->getName());
+}
+
+void Placement::revertTransformation()
+{
+ for (std::set::iterator it = documents.begin(); it != documents.end(); ++it) {
+ Gui::Document* document = Application::Instance->getDocument(it->c_str());
+ if (!document) continue;
+
+ std::vector obj = document->getDocument()->
+ getObjectsOfType(App::DocumentObject::getClassTypeId());
+ if (!obj.empty()) {
+ for (std::vector::iterator it=obj.begin();it!=obj.end();++it) {
+ std::map props;
+ (*it)->getPropertyMap(props);
+ // search for the placement property
+ std::map::iterator jt;
+ jt = std::find_if(props.begin(), props.end(), find_placement(this->propertyName));
+ if (jt != props.end()) {
+ Base::Placement cur = static_cast(jt->second)->getValue();
+ Gui::ViewProvider* vp = document->getViewProvider(*it);
+ if (vp) vp->setTransformation(cur.toMatrix());
+ }
+ }
+ }
+ }
+}
+
void Placement::applyPlacement(const Base::Placement& p, bool incremental, bool data)
{
Gui::Document* document = Application::Instance->activeDocument();
@@ -225,12 +260,15 @@ void Placement::reject()
QVariant data = QVariant::fromValue(plm);
/*emit*/ placementChanged(data, true, false);
+ revertTransformation();
QDialog::reject();
}
void Placement::accept()
{
on_applyButton_clicked();
+
+ revertTransformation();
QDialog::accept();
}
diff --git a/src/Gui/Placement.h b/src/Gui/Placement.h
index 1df314702..233284d1a 100644
--- a/src/Gui/Placement.h
+++ b/src/Gui/Placement.h
@@ -28,9 +28,14 @@
#include
#include
+#include
+#include
+
class QSignalMapper;
namespace Gui {
+class Document;
+
namespace Dialog {
class Ui_Placement;
@@ -64,6 +69,8 @@ private:
Base::Placement getPlacementData() const;
void directionActivated(int);
void applyPlacement(const Base::Placement& p, bool incremental, bool data);
+ void revertTransformation();
+ void slotActiveDocument(const Gui::Document&);
Q_SIGNALS:
void placementChanged(const QVariant &, bool, bool);
@@ -71,10 +78,13 @@ Q_SIGNALS:
private:
typedef Gui::LocationInterfaceComp Ui_PlacementComp;
+ typedef boost::BOOST_SIGNALS_NAMESPACE::connection Connection;
Ui_PlacementComp* ui;
QSignalMapper* signalMapper;
+ Connection connectAct;
Base::Placement ref;
std::string propertyName; // the name of the placement property
+ std::set documents;
friend class TaskPlacement;
};
diff --git a/src/Gui/PythonConsole.cpp b/src/Gui/PythonConsole.cpp
index 8364ae4e9..780789b71 100644
--- a/src/Gui/PythonConsole.cpp
+++ b/src/Gui/PythonConsole.cpp
@@ -701,10 +701,14 @@ void PythonConsole::runSource(const QString& line)
catch (const Base::SystemExitException&) {
ParameterGrp::handle hPrefGrp = getWindowParameter();
bool check = hPrefGrp->GetBool("CheckSystemExit",true);
- if (!check) qApp->quit();
- int ret = QMessageBox::question(this, tr("System exit"), tr("The application is still running.\nDo you want to exit without saving your data?"),
- QMessageBox::Yes, QMessageBox::No|QMessageBox::Escape|QMessageBox::Default);
+ int ret = QMessageBox::Yes;
+ if (check) {
+ ret = QMessageBox::question(this, tr("System exit"),
+ tr("The application is still running.\nDo you want to exit without saving your data?"),
+ QMessageBox::Yes, QMessageBox::No|QMessageBox::Escape|QMessageBox::Default);
+ }
if (ret == QMessageBox::Yes) {
+ PyErr_Clear();
qApp->quit();
}
else {
diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py
index f98c61c88..8ee62c546 100644
--- a/src/Mod/Arch/ArchCommands.py
+++ b/src/Mod/Arch/ArchCommands.py
@@ -235,6 +235,79 @@ def makeFace(wires,method=2,cleanup=False):
#print "makeFace: final face:",mf.Faces
return mf.Faces[0]
+def closeHole(shape):
+ '''closeHole(shape): closes a hole in an open shape'''
+ import DraftGeomUtils, Part
+ # creating an edges lookup table
+ lut = {}
+ for face in shape.Faces:
+ for edge in face.Edges:
+ hc = edge.hashCode()
+ if lut.has_key(hc):
+ lut[hc] = lut[hc] + 1
+ else:
+ lut[hc] = 1
+ # filter out the edges shared by more than one face
+ bound = []
+ for e in shape.Edges:
+ if lut[e.hashCode()] == 1:
+ bound.append(e)
+ bound = DraftGeomUtils.sortEdges(bound)
+ try:
+ nface = Part.Face(Part.Wire(bound))
+ shell = Part.makeShell(shape.Faces+[nface])
+ solid = Part.Solid(shell)
+ except:
+ raise
+ else:
+ return solid
+
+def getCutVolume(cutplane,shapes):
+ """getCutVolume(cutplane,shapes): returns a cut face and a cut volume
+ from the given shapes and the given cutting plane"""
+ import Part
+ placement = FreeCAD.Placement(cutplane.Placement)
+ # building boundbox
+ bb = shapes[0].BoundBox
+ for sh in shapes[1:]:
+ bb.add(sh.BoundBox)
+ bb.enlarge(1)
+ um = vm = wm = 0
+ ax = placement.Rotation.multVec(FreeCAD.Vector(0,0,1))
+ u = placement.Rotation.multVec(FreeCAD.Vector(1,0,0))
+ v = placement.Rotation.multVec(FreeCAD.Vector(0,1,0))
+ if not bb.isCutPlane(placement.Base,ax):
+ print "No objects are cut by the plane"
+ return None,None
+ else:
+ corners = [FreeCAD.Vector(bb.XMin,bb.YMin,bb.ZMin),
+ FreeCAD.Vector(bb.XMin,bb.YMax,bb.ZMin),
+ FreeCAD.Vector(bb.XMax,bb.YMin,bb.ZMin),
+ FreeCAD.Vector(bb.XMax,bb.YMax,bb.ZMin),
+ FreeCAD.Vector(bb.XMin,bb.YMin,bb.ZMax),
+ FreeCAD.Vector(bb.XMin,bb.YMax,bb.ZMax),
+ FreeCAD.Vector(bb.XMax,bb.YMin,bb.ZMax),
+ FreeCAD.Vector(bb.XMax,bb.YMax,bb.ZMax)]
+ for c in corners:
+ dv = c.sub(placement.Base)
+ um1 = DraftVecUtils.project(dv,u).Length
+ um = max(um,um1)
+ vm1 = DraftVecUtils.project(dv,v).Length
+ vm = max(vm,vm1)
+ wm1 = DraftVecUtils.project(dv,ax).Length
+ wm = max(wm,wm1)
+ p1 = FreeCAD.Vector(-um,vm,0)
+ p2 = FreeCAD.Vector(um,vm,0)
+ p3 = FreeCAD.Vector(um,-vm,0)
+ p4 = FreeCAD.Vector(-um,-vm,0)
+ cutface = Part.makePolygon([p1,p2,p3,p4,p1])
+ cutface = Part.Face(cutface)
+ cutface.Placement = placement
+ cutnormal = DraftVecUtils.scaleTo(ax,wm)
+ cutvolume = cutface.extrude(cutnormal)
+ return cutface,cutvolume
+
+
def meshToShape(obj,mark=True):
'''meshToShape(object,[mark]): turns a mesh into a shape, joining coplanar facets. If
mark is True (default), non-solid objects will be marked in red'''
@@ -242,10 +315,10 @@ def meshToShape(obj,mark=True):
name = obj.Name
import Part, MeshPart, DraftGeomUtils
if "Mesh" in obj.PropertiesList:
- faces = []
+ faces = []
mesh = obj.Mesh
plac = obj.Placement
- segments = mesh.getPlanes(0.001) # use rather strict tolerance here
+ segments = mesh.getPlanarSegments(0.001) # use rather strict tolerance here
print len(segments)," segments ",segments
for i in segments:
print "treating",segments.index(i),i
@@ -262,7 +335,7 @@ def meshToShape(obj,mark=True):
se = Part.makeShell(faces)
solid = Part.Solid(se)
except:
- pass
+ raise
else:
if solid.isClosed():
FreeCAD.ActiveDocument.removeObject(name)
@@ -354,6 +427,34 @@ def download(url):
return None
else:
return filepath
+
+def check(objectslist,includehidden=True):
+ """check(objectslist,includehidden=True): checks if the given objects contain only solids"""
+ objs = Draft.getGroupContents(objectslist)
+ if not includehidden:
+ objs = Draft.removeHidden(objs)
+ bad = []
+ for o in objs:
+ if not o.isDerivedFrom("Part::Feature"):
+ bad.append([o,"is not a Part-based object"])
+ else:
+ s = o.Shape
+ if not s.isClosed():
+ bad.append([o,"is not closed"])
+ elif not s.isValid():
+ bad.append([o,"is not valid"])
+ elif not s.Solids:
+ bad.append([o,"doesn't contain any solid"])
+ else:
+ f = 0
+ for sol in s.Solids:
+ f += len(sol.Faces)
+ if not sol.isClosed():
+ bad.append([o,"contains a non-closed solid"])
+ if len(s.Faces) != f:
+ bad.append([o,"contains faces that are not part of any solid"])
+ return bad
+
# command definitions ###############################################
@@ -484,7 +585,8 @@ class _CommandMeshToShape:
class _CommandSelectNonSolidMeshes:
"the Arch SelectNonSolidMeshes command definition"
def GetResources(self):
- return {'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_SelectNonSolidMeshes","Select non-manifold meshes"),
+ return {'Pixmap': 'Arch_SelectNonManifold.svg',
+ 'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_SelectNonSolidMeshes","Select non-manifold meshes"),
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_SelectNonSolidMeshes","Selects all non-manifold meshes from the document or from the selected groups")}
def Activated(self):
@@ -522,9 +624,54 @@ class _CommandRemoveShape:
sel = FreeCADGui.Selection.getSelection()
removeShape(sel)
+class _CommandCloseHoles:
+ "the Arch CloseHoles command definition"
+ def GetResources(self):
+ return {'Pixmap' : 'Arch_CloseHoles',
+ 'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_CloseHoles","Close holes"),
+ 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_CloseHoles","Closes holes in open shapes, turning them solids")}
+
+ def IsActive(self):
+ if FreeCADGui.Selection.getSelection():
+ return True
+ else:
+ return False
+
+ def Activated(self):
+ for o in FreeCADGui.Selection.getSelection():
+ s = closeHole(o.Shape)
+ if s:
+ o.Shape = s
+
+class _CommandCheck:
+ "the Arch Check command definition"
+ def GetResources(self):
+ return {'Pixmap' : 'Arch_Check',
+ 'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_Check","Check"),
+ 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Check","Checks the selected objects for problems")}
+
+ def IsActive(self):
+ if FreeCADGui.Selection.getSelection():
+ return True
+ else:
+ return False
+
+ def Activated(self):
+ result = check(FreeCADGui.Selection.getSelection())
+ if not result:
+ FreeCAD.Console.PrintMessage("All good! no problems found")
+ else:
+ FreeCADGui.Selection.clearSelection()
+ for i in result:
+ FreeCAD.Console.PrintWarning("Object "+i[0].Name+" ("+i[0].Label+") "+i[1])
+ FreeCADGui.Selection.addSelection(i[0])
+
+
FreeCADGui.addCommand('Arch_Add',_CommandAdd())
FreeCADGui.addCommand('Arch_Remove',_CommandRemove())
FreeCADGui.addCommand('Arch_SplitMesh',_CommandSplitMesh())
FreeCADGui.addCommand('Arch_MeshToShape',_CommandMeshToShape())
FreeCADGui.addCommand('Arch_SelectNonSolidMeshes',_CommandSelectNonSolidMeshes())
FreeCADGui.addCommand('Arch_RemoveShape',_CommandRemoveShape())
+FreeCADGui.addCommand('Arch_CloseHoles',_CommandCloseHoles())
+FreeCADGui.addCommand('Arch_Check',_CommandCheck())
diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py
index f71828a96..97fe2023d 100644
--- a/src/Mod/Arch/ArchSectionPlane.py
+++ b/src/Mod/Arch/ArchSectionPlane.py
@@ -186,7 +186,7 @@ class _ArchDrawingView:
obj.addProperty("App::PropertyEnumeration","RenderingMode","Drawing View","The rendering mode to use")
obj.addProperty("App::PropertyFloat","LineWidth","Drawing View","The line width of the rendered objects")
obj.RenderingMode = ["Solid","Wireframe"]
- obj.RenderingMode = "Solid"
+ obj.RenderingMode = "Wireframe"
obj.LineWidth = 0.35
obj.Proxy = self
self.Type = "DrawingView"
@@ -206,6 +206,7 @@ class _ArchDrawingView:
if obj.Source:
if obj.Source.Objects:
objs = Draft.getGroupContents(obj.Source.Objects)
+ objs = Draft.removeHidden(objs)
svg = ''
# generating SVG
@@ -223,18 +224,33 @@ class _ArchDrawingView:
else:
# render using the Drawing module
- import Drawing
+ import Drawing, Part
shapes = []
+ p = FreeCAD.Placement(obj.Source.Placement)
+ direction = p.Rotation.multVec(FreeCAD.Vector(0,0,1))
for o in objs:
if o.isDerivedFrom("Part::Feature"):
- shapes.append(o.Shape)
- if shapes:
- base = shape.pop()
- for sh in shapes:
- base = base.fuse(sh)
- svgf = Drawing.projectToSVG(base,DraftVecUtils.neg(direction))
+ shapes.extend(o.Shape.Solids)
+ cutface,cutvolume = ArchCommands.getCutVolume(obj.Source.Shape.copy(),shapes)
+ if cutvolume:
+ nsh = []
+ for sh in shapes:
+ for sol in sh.Solids:
+ c = sol.cut(cutvolume)
+ nsh.append(c)
+ shapes = nsh
+ base = Part.makeCompound(shapes)
+ #if shapes:
+ # base = shapes.pop().copy()
+ #for sh in shapes:
+ # try:
+ # base = base.fuse(sh)
+ # except:
+ # print "unable to fuse, passing..."
+ svgf = Drawing.projectToSVG(base,direction)
if svgf:
svgf = svgf.replace('stroke-width="0.35"','stroke-width="' + str(linewidth) + 'px"')
+ svgf = svgf.replace('stroke-width="1"','stroke-width="' + str(linewidth) + 'px"')
svgf = svgf.replace('stroke-width:0.01','stroke-width:' + str(linewidth) + 'px')
svg += svgf
diff --git a/src/Mod/Arch/ArchVRM.py b/src/Mod/Arch/ArchVRM.py
index 91edfed56..b54b0446f 100644
--- a/src/Mod/Arch/ArchVRM.py
+++ b/src/Mod/Arch/ArchVRM.py
@@ -228,42 +228,11 @@ class Renderer:
if DEBUG: print "No objects to make sections"
else:
fill = (1.0,1.0,1.0,1.0)
- placement = FreeCAD.Placement(cutplane.Placement)
-
- # building boundbox
- bb = self.shapes[0][0].BoundBox
- for sh in self.shapes[1:]:
- bb.add(sh[0].BoundBox)
- bb.enlarge(1)
- um = vm = wm = 0
- if not bb.isCutPlane(placement.Base,self.wp.axis):
- if DEBUG: print "No objects are cut by the plane"
- else:
- corners = [FreeCAD.Vector(bb.XMin,bb.YMin,bb.ZMin),
- FreeCAD.Vector(bb.XMin,bb.YMax,bb.ZMin),
- FreeCAD.Vector(bb.XMax,bb.YMin,bb.ZMin),
- FreeCAD.Vector(bb.XMax,bb.YMax,bb.ZMin),
- FreeCAD.Vector(bb.XMin,bb.YMin,bb.ZMax),
- FreeCAD.Vector(bb.XMin,bb.YMax,bb.ZMax),
- FreeCAD.Vector(bb.XMax,bb.YMin,bb.ZMax),
- FreeCAD.Vector(bb.XMax,bb.YMax,bb.ZMax)]
- for c in corners:
- dv = c.sub(placement.Base)
- um1 = DraftVecUtils.project(dv,self.wp.u).Length
- um = max(um,um1)
- vm1 = DraftVecUtils.project(dv,self.wp.v).Length
- vm = max(vm,vm1)
- wm1 = DraftVecUtils.project(dv,self.wp.axis).Length
- wm = max(wm,wm1)
- p1 = FreeCAD.Vector(-um,vm,0)
- p2 = FreeCAD.Vector(um,vm,0)
- p3 = FreeCAD.Vector(um,-vm,0)
- p4 = FreeCAD.Vector(-um,-vm,0)
- cutface = Part.makePolygon([p1,p2,p3,p4,p1])
- cutface = Part.Face(cutface)
- cutface.Placement = placement
- cutnormal = DraftVecUtils.scaleTo(self.wp.axis,wm)
- cutvolume = cutface.extrude(cutnormal)
+ shps = []
+ for sh in self.shapes:
+ shps.append(sh[0])
+ cutface,cutvolume = ArchCommands.getCutVolume(cutplane,shps)
+ if cutface and cutvolume:
shapes = []
faces = []
sections = []
diff --git a/src/Mod/Arch/Arch_rc.py b/src/Mod/Arch/Arch_rc.py
index 6e7f3870a..590681ea5 100644
--- a/src/Mod/Arch/Arch_rc.py
+++ b/src/Mod/Arch/Arch_rc.py
@@ -2,7 +2,7 @@
# Resource object code
#
-# Created: Sun May 13 20:45:11 2012
+# Created: Sun Jul 22 16:38:54 2012
# by: The Resource Compiler for PyQt (Qt v4.8.1)
#
# WARNING! All changes made in this file will be lost!
@@ -8358,6 +8358,132 @@ qt_resource_data = "\
\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\
\x65\x73\x3d\x22\x63\x63\x63\x63\x63\x22\x20\x2f\x3e\x0a\x20\x20\
\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x07\xbe\
+\x00\
+\x00\x1a\x97\x78\x9c\xed\x18\x6b\x8f\xda\xd8\xf5\xfb\xfc\x0a\x97\
+\x7c\x49\x54\xfb\x72\xdf\x0f\x06\x66\x55\x6d\xb4\xdb\x95\xb6\x5a\
+\x69\x37\x51\x3f\x46\xc6\xbe\x80\x3b\xc6\x46\xb6\x19\x60\x7e\x7d\
+\xcf\xb5\xf1\x83\xc1\x24\xb3\x89\x1a\xa9\x6a\x41\x19\xec\xf3\xbc\
+\xe7\x7d\x6e\xe6\x3f\x1c\xb7\xa9\xf7\x64\x8b\x32\xc9\xb3\xc5\x84\
+\x20\x3c\xf1\x6c\x16\xe5\x71\x92\xad\x17\x93\x8f\x1f\x7e\x0a\xf4\
+\xc4\x2b\xab\x30\x8b\xc3\x34\xcf\xec\x62\x92\xe5\x93\x1f\x1e\xee\
+\xe6\x7f\x09\x02\xef\xc7\xc2\x86\x95\x8d\xbd\x43\x52\x6d\xbc\x5f\
+\xb2\xc7\x32\x0a\x77\xd6\x7b\xbb\xa9\xaa\xdd\x6c\x3a\x3d\x1c\x0e\
+\x28\x39\x03\x51\x5e\xac\xa7\xef\xbc\x20\x78\xb8\xbb\x9b\x97\x4f\
+\xeb\x3b\xcf\xf3\x40\x6f\x56\xce\xe2\x68\x31\x39\x33\xec\xf6\x45\
+\x5a\x13\xc6\xd1\xd4\xa6\x76\x6b\xb3\xaa\x9c\x12\x44\xa6\x93\x9e\
+\x3c\xea\xc9\x23\xa7\x3d\x79\xb2\x51\xbe\xdd\xe6\x59\x59\x73\x66\
+\xe5\x9b\x01\x71\x11\xaf\x3a\x6a\x77\x9a\x03\xab\x89\x88\x31\x66\
+\x8a\xe9\x94\xd2\x00\x28\x82\xf2\x94\x55\xe1\x31\xb8\x64\x85\x33\
+\x8e\xb1\x52\x8c\xf1\x14\x70\x3d\xe5\xeb\xa8\x66\xc7\x14\x5c\x71\
+\xf3\x30\x35\x76\xa8\x1d\xdc\xbf\x83\x7f\x1d\x43\x0b\x40\x65\xbe\
+\x2f\x22\xbb\x02\x4e\x8b\x32\x5b\x4d\xdf\x7f\x78\xdf\x21\x03\x8c\
+\xe2\x2a\x1e\x88\x69\xbd\x7f\xa1\xf7\x22\x24\x59\xb8\xb5\xe5\x2e\
+\x8c\x6c\x39\x6d\xe1\x35\xff\x21\x89\xab\xcd\x62\x22\xf9\xee\x58\
+\xbf\x6f\x6c\xb2\xde\x54\x03\x40\x12\x2f\x26\x60\x21\x35\x1a\xd7\
+\xef\xed\x19\x66\x5d\x26\x61\xc4\x68\x43\x7a\x16\x3c\x44\x71\x8d\
+\x18\x22\x5e\x61\xb4\x96\x97\xfc\x71\x1e\xb9\x43\x2d\x26\x7f\x2b\
+\xa2\xcd\xa7\x1f\xd3\xbc\xb4\x7f\xcf\x53\x5b\xa2\xd6\x9f\x9d\xb8\
+\x7c\x5f\xed\xf6\xd5\x27\x7b\xac\x6c\xd6\xc8\x05\x8b\x06\xe6\xd5\
+\x68\xc7\x86\x2e\x4c\x1b\xa4\x3a\x99\x3c\x00\x64\x1e\xdb\x55\xe9\
+\x30\x8d\x55\xee\x0d\xcc\xa2\x35\x0e\xb0\x10\x1a\x1b\x16\x3f\x17\
+\x61\x9c\x40\x42\x36\x74\x0d\xe5\x25\x86\x39\x53\x1e\xce\xf8\x79\
+\x59\xe5\xbb\x96\x16\xac\xab\x4e\x29\x98\xe4\x80\x41\x94\xa7\x79\
+\x31\x7b\x83\xa5\x89\x30\xbf\xaf\x41\x39\x44\x20\xa9\x4e\x33\x72\
+\x3f\xe9\x79\xf2\xd5\xaa\xb4\xe0\x72\x3c\x80\xd5\x5e\x07\x0e\xd0\
+\x05\x55\x39\x7d\xbd\x36\x86\x57\x2b\x8c\x5f\xa1\x8d\x8c\x6a\x33\
+\xb8\xd3\x36\x9f\x5e\x9a\xfd\xa7\xbd\x24\xf9\x2d\x2f\xf5\xfa\xa4\
+\xfc\x82\x23\x46\x4c\x54\x64\x49\x57\xfa\xca\xc4\x9b\x5e\x1a\x68\
+\xd3\x5f\x70\xc4\x58\xf8\x30\x55\x46\xdc\xd4\x76\xc3\x4b\x5d\xee\
+\xee\x20\x09\x77\x36\x72\xed\xab\x55\xd3\x55\x40\x75\x72\x15\x7b\
+\x49\xca\xe2\xee\x38\x7d\x39\xed\x3e\x1d\xc1\x2b\xde\xcc\x63\x14\
+\xfe\x90\x51\x8a\x53\x43\x41\xa0\x23\xc1\x0f\x1e\xa5\x79\x76\x75\
+\xfd\x19\x31\xe7\x13\x04\x79\x91\xac\x13\x28\x9c\x9a\x8e\x12\xc4\
+\xea\xcf\x25\x0f\x38\x75\x60\x1b\xd4\x51\x9f\xa7\x73\xe7\x8b\x30\
+\xbd\xca\x91\x56\x0d\x78\x36\x05\xb6\xc5\x24\x4c\x0f\xe1\xa9\xec\
+\x64\xd6\xcd\x71\xb6\x29\x2c\x34\xf3\x37\x23\xd9\x34\xd4\x7d\xa9\
+\x82\x61\xd5\x27\xd2\xfa\x0c\xfc\x98\x25\x15\x74\xed\x7d\x69\x8b\
+\x3f\x5c\xe7\xfb\x2d\xfb\x58\xda\x2b\xaa\x0f\x45\x98\x95\xd0\x66\
+\xb7\x8b\xc9\x36\xac\x8a\xe4\xf8\x16\x23\xa1\x31\x31\x9c\x12\x1f\
+\x86\x24\x56\x9a\x28\xe2\x07\x04\x19\x2c\x30\x95\xc6\x01\x8d\x54\
+\x04\xd0\x42\x22\xa6\x94\x23\x0c\x88\xd1\x40\xa0\x99\x7e\xd7\x69\
+\x88\x20\x68\x02\x9c\x47\xb5\x36\xb4\x87\x42\xa0\x18\x88\x50\x9c\
+\xf0\xfe\xcc\xab\x51\xda\xd5\x28\x6d\x01\x39\x6b\x90\x50\x84\xd3\
+\x81\xcf\x6f\xd4\xe5\x37\xf9\x5c\xcb\xc9\xe7\x0a\x7c\x70\xd2\x23\
+\x59\x4c\x28\x47\x82\xc3\xb7\x67\x3a\x01\x94\x4b\x44\x34\xd1\x03\
+\x52\x0a\xa6\x1a\xa4\x1d\xb4\x8f\xe9\x89\x8e\x90\x7e\x3e\x92\x5f\
+\x32\x7d\xb4\x71\x07\xdf\xb5\x75\x07\xec\xfb\x36\xef\x40\x7f\x5d\
+\xfb\x1e\xf5\xfe\x8d\x40\x8d\xc6\x74\x34\xfc\xaf\x2b\xc4\x91\x38\
+\x19\x42\x5e\x9b\xa0\x81\xbc\x6e\x63\x2f\x73\xbd\x71\xc9\x7c\xea\
+\x06\x7e\xfd\xd4\x75\x60\xb7\x80\xc4\x4f\x89\x3d\xf4\x5b\xc1\x32\
+\xec\xce\xb6\x0b\xd7\xb6\x8e\x0c\x68\x5e\xd5\x9f\x33\x62\x99\x17\
+\xb1\x2d\x5a\x94\xac\x3f\x17\xa8\x73\xf0\x9a\x2d\xfb\xee\xf2\x74\
+\x4e\x6a\x87\xc7\xe3\xf8\x72\x13\xc6\xf9\x01\x7c\xfa\x12\xf9\x9c\
+\xe7\xd0\xa8\x04\x12\x2f\x11\xae\xd9\x10\x85\xb4\x62\x98\x5d\x23\
+\x41\x13\x65\x48\x61\x45\x09\xbf\x42\xee\x8b\x02\x9c\x19\xa4\xe1\
+\xc9\x82\x39\xf5\x4f\xeb\xfe\x72\x93\x1f\xd6\x85\x73\x4b\x55\xec\
+\xed\x4b\x4e\xd8\xe0\xf6\x6e\x77\x0f\xf6\x4d\x80\xcf\x1b\xe3\x80\
+\xc2\xf1\x06\xcb\x65\x7e\x1c\x17\x70\x48\x32\x30\x33\x38\xef\xa0\
+\x84\xea\x2b\x67\x9c\x29\xda\xad\x54\x29\x75\x83\xe2\xd8\x17\xe1\
+\x4b\xd4\xe9\x36\x6a\x1b\x1e\x93\x6d\xf2\x6c\x63\x57\x52\xe7\x34\
+\xd9\xda\x2a\x8c\xc3\x2a\xec\x53\xa2\x85\xc0\x90\x13\xed\xb2\x08\
+\xf7\x89\xd9\xef\xef\x7f\xea\x6a\x3b\x8a\x66\xff\xcc\x8b\xc7\xbe\
+\x2c\x1d\x41\xb8\x84\xdd\x74\x31\xe9\x3a\x8e\x5b\x41\xa3\x99\x1b\
+\x36\x61\xf5\x90\x6c\x21\xd0\xee\xf2\xf0\x57\xd8\xe1\x21\x39\x3b\
+\xc4\x05\xb1\xdb\x11\x7a\xa1\x8d\xd8\xc2\x36\x97\x83\xd1\xfb\x54\
+\x1c\x6d\x13\xc7\x34\xfd\xa3\x4a\xd2\xf4\x17\xa7\x64\xd0\x83\xce\
+\x42\x93\x2a\xb5\x0f\xb5\xce\xe6\xb1\xb5\x62\x7a\x36\xa3\x6d\x21\
+\x03\x2b\xe7\xd3\xd6\x0d\xf5\xdb\xba\x77\xcf\x45\xc6\x74\x1e\x4e\
+\xc3\xa5\x4d\x17\x93\x5f\x1d\xd2\xbb\xc2\xae\x8b\x7c\xbf\xdb\xe6\
+\xb1\x3d\xb3\xb7\x6e\xdd\x85\xd5\x66\xa4\x9e\xb3\x0c\xea\x39\x2f\
+\x02\xc8\xd5\xa7\xb0\xda\x17\x76\xd8\x72\xfb\x6a\x06\x79\xce\x74\
+\x48\xc5\xa8\xf9\x5c\xae\x2b\x20\x9b\x69\xca\x3a\x20\xc0\xfe\xe1\
+\x51\x81\x94\x91\x46\xf9\x1a\x69\x2d\x24\x16\xda\x93\x48\x51\xa8\
+\x15\xad\x7d\xe2\x90\x02\x4b\x8f\x09\x84\x85\x30\x8a\xfb\x30\x7a\
+\x25\x51\xc6\x63\x1c\x31\x61\x84\xa1\xbe\x80\x27\xad\x08\x50\x09\
+\x8c\x40\x94\xc1\xc6\xe7\x0c\x69\xc1\x39\xd3\x1e\x4c\x75\x41\x61\
+\x7e\xc3\x32\x81\x91\x92\x44\x68\x31\xa6\xf3\xb9\x37\xa7\x99\x0b\
+\x2b\x88\x9e\xdb\x3e\x19\x5f\xad\xee\xdd\xcb\x60\x22\xd4\xaf\xc5\
+\x3e\xb5\x33\xfb\x64\xc1\xea\x18\x46\x46\x91\x3f\x5a\x47\x8f\x0d\
+\x13\xe7\xd7\xa6\xb0\x66\xac\x7d\x75\xdd\x13\x1c\x3a\x5b\xee\xab\
+\x6a\x08\xfb\x57\x9e\x64\xb3\x25\x88\x4a\x5b\x28\xa4\x90\x2d\x52\
+\x28\x8d\x6a\xc6\x5b\x58\xaf\xfe\x0c\x88\x43\x68\x53\x45\x11\x9e\
+\xc0\xf1\x99\x1d\x42\x9b\x31\x35\xc3\xf7\xdb\xb0\x78\xb4\x45\x83\
+\x7f\x4a\xca\x64\x99\xa4\x4e\x44\xfd\x98\xda\xfb\x38\x29\x77\x10\
+\x7e\xb8\xbe\xba\x63\xdc\xe7\x70\x63\x5b\xa5\xf9\xa1\xc3\xdb\x2c\
+\x84\x9f\x60\x19\x46\x8f\x2e\x61\xb2\x78\x16\x46\xd0\x72\xf6\x69\
+\x58\x0d\xc6\xff\xd7\xe4\xcc\x20\x1f\xd4\x65\x3e\x40\xa4\xa9\x91\
+\x98\x52\x17\x69\x08\x2a\x53\xc4\xc5\x90\x81\x5b\x99\x4f\xa0\x9f\
+\x13\x26\xa8\x1e\x8d\x16\x54\xe1\xdb\x37\xd7\x8b\xe9\xbb\xef\x11\
+\xbe\x3a\x62\xff\x33\xe1\xbb\x59\xf2\x63\x01\x16\xc3\x00\x6f\x3d\
+\x01\x35\x2a\x89\x94\xae\xb8\xa1\x1b\xc0\x9e\xef\x51\x58\xa7\x05\
+\x37\x52\xfb\x0c\x01\x04\x6a\xd4\xc3\x3e\x24\x02\x84\x5f\x28\xe1\
+\xfd\x0a\x3c\x42\x4a\x25\x0d\xf1\xb9\x81\xf4\x10\xc4\xd0\x31\x39\
+\x57\x45\xdc\xdd\x21\xdd\xe7\xfe\xff\x25\xfd\x35\x39\xf1\xe2\xba\
+\x1c\x16\xd1\x2b\xbc\x5c\x97\xe2\xf5\x7d\xe5\xcf\x95\x22\xae\x77\
+\xf1\x81\xdb\xa1\x95\x7f\x8b\x3b\xff\x93\xae\xbb\xce\xfb\xc1\xce\
+\xde\xb9\xd0\x6d\x89\x9c\xbe\x58\xde\x7b\xec\x69\x64\xb5\xef\xb0\
+\x45\xb3\x61\x4a\x06\xdf\x11\xd1\xc5\x69\x0c\xdd\x54\x5c\x7b\x89\
+\xf0\x5b\xe9\x5e\xe8\x75\xb4\x7e\xf7\xe4\x61\x8f\xc0\x37\x70\x2d\
+\x18\x26\x30\xd5\x3e\xfe\x0c\xd9\x90\xaa\x2f\xbc\x6a\xe4\x3a\xaf\
+\xdc\x6d\x1e\x0b\xea\x07\xf0\x4c\x28\x65\x42\x28\xff\xf2\xb1\xa3\
+\xa0\x14\x69\x29\xb0\xd1\x3e\xc7\x08\x2e\xfe\x46\xc0\x8d\x7e\x3c\
+\x2f\x6f\x97\x78\x73\x59\xf8\xd6\x5c\xa3\xb0\x1a\x68\xaa\x5f\x55\
+\xea\x75\x3e\xfc\x37\x95\xfa\x45\x82\x50\x82\x88\x14\x60\xad\x0f\
+\x9d\xd8\x0d\x5a\x4d\xbc\xc8\x23\x14\x41\xeb\x53\xc2\xe7\x88\x53\
+\x2a\xa4\xf1\x88\x44\x12\x4b\x0c\x20\x2a\x91\x60\x82\x13\x31\x0a\
+\xc3\x90\x12\xb0\x80\x51\xd8\xcf\xfc\x00\xd6\x2e\x43\x41\x38\xf1\
+\x60\x9e\x1b\x2a\xb9\x02\x98\x42\x4c\x52\xa9\xdc\xae\xc7\x39\x37\
+\xda\xf8\x81\x42\x70\x77\xe2\x90\x9b\x84\xc3\x10\x60\x4a\x69\xa0\
+\x13\x30\xf8\x15\x36\x7c\x1c\xe8\xf4\x04\xb0\x13\x18\x0a\x71\xe2\
+\xee\x9c\x0c\xae\x08\x90\xc1\x6e\x24\x80\x22\x46\xdc\x86\xc7\x05\
+\x61\xc6\x0b\x40\x00\xe6\xd0\xca\x81\x4c\x81\x1e\x42\xbd\x00\x8e\
+\xae\x28\xd6\xcc\x87\xf9\x03\x63\x81\xb1\x31\x90\x53\x02\x19\xca\
+\x09\xe3\x2e\x3f\x91\xa4\xb0\x9a\x52\x27\x0f\x1a\x9a\x96\xc4\x0f\
+\x34\x14\x95\x31\x1c\xb8\x05\x94\x08\x07\x35\x7e\xe0\x26\x96\x21\
+\xd2\x9d\x05\x58\x30\x1c\x10\x5c\xc1\xc0\xb9\x84\x28\x3a\x0e\x7c\
+\x1e\x69\x22\x66\xf0\xbf\x6e\xdf\x34\x9b\xcb\xfa\xdb\x5d\xc5\xd7\
+\x0f\x77\x73\x77\xf7\x79\xb8\xfb\x37\x54\x09\xba\x52\
\x00\x00\x07\xc4\
\x00\
\x00\x37\x1e\x78\x9c\xed\x5b\x6d\x8f\x9b\x48\x12\xfe\x3e\xbf\x82\
@@ -10317,6 +10443,575 @@ qt_resource_data = "\
\xf7\x89\x07\x56\x32\x89\xfb\x7b\xed\x20\xe4\xe0\xe3\xe7\x3f\x65\
\x87\xd9\x74\x75\x77\x33\x33\x21\xe1\xee\xe6\xbf\x41\x63\xea\xe4\
\
+\x00\x00\x11\xcb\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\
+\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\
+\x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x43\x72\x65\x61\x74\
+\x65\x64\x20\x77\x69\x74\x68\x20\x49\x6e\x6b\x73\x63\x61\x70\x65\
+\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x29\x20\x2d\x2d\x3e\x0a\
+\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x64\
+\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\
+\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\
+\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\
+\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\
+\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\
+\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x0a\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\
+\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\
+\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x0a\x20\x20\x20\x78\x6d\
+\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\x68\x74\
+\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\x73\x6f\
+\x75\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\x44\x54\
+\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\x74\x64\
+\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\x73\x63\
+\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\x61\x6d\
+\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\x70\x65\
+\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x36\x34\x70\x78\
+\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x34\x70\
+\x78\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\x32\x39\x38\
+\x30\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x76\
+\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x33\x32\x22\x0a\x20\x20\
+\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x65\x72\x73\x69\x6f\
+\x6e\x3d\x22\x30\x2e\x34\x38\x2e\x33\x2e\x31\x20\x72\x39\x38\x38\
+\x36\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x64\
+\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x54\x72\x65\x65\x5f\x50\x61\x72\
+\x74\x2e\x73\x76\x67\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x3a\x6f\x75\x74\x70\x75\x74\x5f\x65\x78\x74\x65\x6e\x73\
+\x69\x6f\x6e\x3d\x22\x6f\x72\x67\x2e\x69\x6e\x6b\x73\x63\x61\x70\
+\x65\x2e\x6f\x75\x74\x70\x75\x74\x2e\x73\x76\x67\x2e\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x22\x0a\x20\x20\x20\x76\x65\x72\x73\x69\x6f\
+\x6e\x3d\x22\x31\x2e\x31\x22\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\
+\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x73\x32\x39\
+\x38\x32\x22\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\
+\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\
+\x6e\x74\x33\x38\x36\x34\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\
+\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\
+\x3d\x22\x73\x74\x6f\x70\x33\x38\x36\x36\x22\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\
+\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x37\x31\x62\x32\
+\x66\x38\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\
+\x31\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\
+\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\
+\x73\x74\x6f\x70\x33\x38\x36\x38\x22\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\
+\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x32\x37\x39\x35\
+\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\
+\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\
+\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\
+\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\
+\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\
+\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\
+\x6e\x74\x33\x38\x36\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\
+\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\
+\x74\x33\x38\x35\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\
+\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\
+\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\
+\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\
+\x36\x30\x32\x38\x34\x35\x39\x2c\x31\x2e\x30\x34\x37\x31\x36\x33\
+\x39\x2c\x2d\x31\x2e\x39\x37\x39\x34\x30\x32\x31\x2c\x31\x2e\x31\
+\x33\x39\x35\x32\x39\x35\x2c\x31\x32\x37\x2e\x39\x35\x38\x38\x2c\
+\x2d\x37\x34\x2e\x34\x35\x36\x39\x30\x37\x29\x22\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x63\x78\x3d\x22\x35\x31\x2e\x33\x32\x38\x38\x39\
+\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x33\x31\
+\x2e\x30\x37\x34\x31\x34\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x66\x78\x3d\x22\x35\x31\x2e\x33\x32\x38\x38\x39\x32\x22\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x33\x31\x2e\x30\x37\x34\
+\x31\x34\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x31\
+\x39\x2e\x35\x37\x31\x34\x32\x38\x22\x20\x2f\x3e\x0a\x20\x20\x20\
+\x20\x3c\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\
+\x65\x63\x74\x69\x76\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\
+\x64\x69\x70\x6f\x64\x69\x3a\x74\x79\x70\x65\x3d\x22\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x22\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\
+\x70\x5f\x78\x3d\x22\x30\x20\x3a\x20\x33\x32\x20\x3a\x20\x31\x22\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\
+\x3a\x76\x70\x5f\x79\x3d\x22\x30\x20\x3a\x20\x31\x30\x30\x30\x20\
+\x3a\x20\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\
+\x63\x61\x70\x65\x3a\x76\x70\x5f\x7a\x3d\x22\x36\x34\x20\x3a\x20\
+\x33\x32\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\
+\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x2d\
+\x6f\x72\x69\x67\x69\x6e\x3d\x22\x33\x32\x20\x3a\x20\x32\x31\x2e\
+\x33\x33\x33\x33\x33\x33\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x69\x64\x3d\x22\x70\x65\x72\x73\x70\x65\x63\x74\x69\
+\x76\x65\x32\x39\x38\x38\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\
+\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\
+\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\
+\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\
+\x6e\x74\x33\x38\x36\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\
+\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\
+\x74\x33\x30\x37\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\
+\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\
+\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\
+\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\
+\x35\x38\x30\x31\x39\x34\x32\x31\x2c\x31\x2e\x30\x30\x37\x38\x31\
+\x37\x31\x2c\x2d\x31\x2e\x39\x30\x35\x30\x32\x36\x39\x2c\x31\x2e\
+\x30\x39\x36\x37\x31\x32\x31\x2c\x35\x39\x2e\x32\x38\x36\x35\x31\
+\x32\x2c\x2d\x31\x39\x37\x2e\x38\x31\x37\x34\x37\x29\x22\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x35\x31\x2e\x33\x32\x38\
+\x38\x39\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\
+\x33\x31\x2e\x30\x37\x34\x31\x34\x36\x22\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x66\x78\x3d\x22\x35\x31\x2e\x33\x32\x38\x38\x39\x32\x22\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x33\x31\x2e\x30\
+\x37\x34\x31\x34\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\
+\x22\x31\x39\x2e\x35\x37\x31\x34\x32\x38\x22\x20\x2f\x3e\x0a\x20\
+\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\x20\x20\x3c\x73\x6f\x64\x69\
+\x70\x6f\x64\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x0a\x20\
+\x20\x20\x20\x20\x69\x64\x3d\x22\x62\x61\x73\x65\x22\x0a\x20\x20\
+\x20\x20\x20\x70\x61\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\
+\x66\x66\x66\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\
+\x65\x72\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x36\x36\x36\x36\x36\x36\
+\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\
+\x63\x69\x74\x79\x3d\x22\x31\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\
+\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x6f\x70\x61\
+\x63\x69\x74\x79\x3d\x22\x30\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\
+\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x73\x68\x61\
+\x64\x6f\x77\x3d\x22\x32\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x35\x2e\x35\x22\
+\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\
+\x78\x3d\x22\x31\x37\x2e\x39\x33\x33\x34\x33\x31\x22\x0a\x20\x20\
+\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\
+\x31\x39\x2e\x33\x33\x32\x32\x37\x22\x0a\x20\x20\x20\x20\x20\x69\
+\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x75\x72\x72\x65\x6e\x74\x2d\
+\x6c\x61\x79\x65\x72\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\
+\x20\x20\x20\x20\x73\x68\x6f\x77\x67\x72\x69\x64\x3d\x22\x74\x72\
+\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\
+\x65\x3a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2d\x75\x6e\x69\x74\x73\
+\x3d\x22\x70\x78\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\
+\x61\x70\x65\x3a\x67\x72\x69\x64\x2d\x62\x62\x6f\x78\x3d\x22\x74\
+\x72\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\
+\x22\x31\x32\x38\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\
+\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x68\x65\x69\x67\
+\x68\x74\x3d\x22\x37\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\
+\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x78\x3d\
+\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\
+\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x79\x3d\x22\x30\x22\x0a\x20\
+\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\
+\x64\x6f\x77\x2d\x6d\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\x22\x31\
+\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\
+\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\
+\x74\x61\x32\x39\x38\x35\x22\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\
+\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x63\
+\x3a\x57\x6f\x72\x6b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\
+\x64\x66\x3a\x61\x62\x6f\x75\x74\x3d\x22\x22\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\
+\x69\x6d\x61\x67\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\
+\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x3c\x64\x63\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\
+\x63\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\
+\x6f\x72\x67\x2f\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\
+\x53\x74\x69\x6c\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\
+\x3e\x3c\x2f\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\
+\x20\x20\x20\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\x20\
+\x20\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x3c\
+\x2f\x6d\x65\x74\x61\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x67\x0a\
+\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\
+\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6c\
+\x61\x62\x65\x6c\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x0a\x20\
+\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x6f\
+\x75\x70\x6d\x6f\x64\x65\x3d\x22\x6c\x61\x79\x65\x72\x22\x3e\x0a\
+\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\
+\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\
+\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\
+\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\x22\x63\x63\x63\
+\x63\x63\x63\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\
+\x22\x70\x61\x74\x68\x33\x38\x32\x33\x22\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x64\x3d\x22\x4d\x20\x32\x38\x2e\x37\x30\x36\x30\x36\x31\
+\x2c\x39\x2e\x39\x37\x36\x35\x31\x34\x39\x20\x39\x2e\x36\x33\x36\
+\x31\x36\x39\x37\x2c\x31\x36\x2e\x38\x38\x35\x39\x36\x39\x20\x33\
+\x37\x2e\x39\x36\x35\x30\x36\x35\x2c\x32\x30\x2e\x37\x30\x38\x38\
+\x30\x39\x20\x33\x37\x2e\x32\x36\x38\x36\x38\x33\x2c\x35\x35\x2e\
+\x34\x37\x38\x30\x31\x35\x20\x35\x33\x2e\x38\x37\x39\x2c\x34\x34\
+\x2e\x39\x34\x35\x33\x34\x37\x20\x35\x34\x2e\x34\x33\x33\x32\x33\
+\x32\x2c\x31\x31\x2e\x38\x35\x32\x34\x39\x34\x20\x32\x38\x2e\x37\
+\x30\x36\x30\x36\x31\x2c\x39\x2e\x39\x37\x36\x35\x31\x34\x39\x20\
+\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\
+\x22\x66\x69\x6c\x6c\x3a\x23\x30\x30\x33\x34\x66\x66\x3b\x66\x69\
+\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\
+\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\
+\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x39\x33\x35\x3b\x73\x74\
+\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x33\x3b\x73\x74\x72\
+\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\
+\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\
+\x3a\x62\x65\x76\x65\x6c\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\
+\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\
+\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\
+\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\
+\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\
+\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\
+\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\
+\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\
+\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\
+\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\
+\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\
+\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\
+\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\
+\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\
+\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\
+\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x32\x37\x22\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x33\x38\x2e\x32\x30\x35\x31\
+\x31\x33\x2c\x32\x30\x2e\x31\x39\x37\x32\x38\x20\x35\x34\x2e\x33\
+\x30\x32\x36\x32\x31\x2c\x31\x32\x2e\x31\x30\x34\x34\x33\x37\x22\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\
+\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\
+\x72\x61\x64\x69\x65\x6e\x74\x33\x30\x37\x36\x29\x3b\x66\x69\x6c\
+\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\
+\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\
+\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x39\x33\x35\x3b\x73\x74\x72\
+\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x33\x3b\x73\x74\x72\x6f\
+\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\
+\x6d\x69\x74\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\
+\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\
+\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\
+\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\
+\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\
+\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\
+\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\x69\
+\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\x69\
+\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\
+\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\
+\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\
+\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\
+\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\
+\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\
+\x64\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\
+\x3d\x22\x63\x63\x63\x63\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x32\x35\x22\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x38\x2e\x38\x37\x35\x32\
+\x35\x36\x39\x2c\x31\x36\x2e\x39\x31\x34\x38\x35\x31\x20\x32\x39\
+\x2e\x35\x35\x34\x39\x36\x38\x31\x2c\x33\x2e\x32\x33\x39\x31\x35\
+\x38\x20\x30\x2c\x33\x35\x2e\x31\x30\x36\x35\x37\x35\x20\x4c\x20\
+\x38\x2e\x34\x37\x35\x38\x36\x2c\x35\x30\x2e\x33\x38\x36\x31\x30\
+\x31\x20\x38\x2e\x38\x37\x35\x32\x35\x36\x39\x2c\x31\x36\x2e\x39\
+\x31\x34\x38\x35\x31\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x66\x66\x30\
+\x30\x30\x30\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\
+\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\
+\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x34\x65\x30\
+\x34\x30\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\
+\x3a\x33\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\
+\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
+\x6e\x65\x6a\x6f\x69\x6e\x3a\x62\x65\x76\x65\x6c\x3b\x73\x74\x72\
+\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\
+\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\
+\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\
+\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\
+\x61\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\
+\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\
+\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\
+\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\
+\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\
+\x75\x6d\x75\x6c\x61\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\
+\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x11\x71\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\
+\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\
+\x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x43\x72\x65\x61\x74\
+\x65\x64\x20\x77\x69\x74\x68\x20\x49\x6e\x6b\x73\x63\x61\x70\x65\
+\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x29\x20\x2d\x2d\x3e\x0a\
+\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x64\
+\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\
+\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\
+\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\
+\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\
+\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\
+\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\
+\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x0a\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\
+\x78\x6d\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\
+\x73\x6f\x75\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\
+\x44\x54\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\
+\x74\x64\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\
+\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\
+\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x36\x34\
+\x70\x78\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\
+\x34\x70\x78\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\x33\
+\x30\x35\x32\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\
+\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x33\x32\x22\x0a\
+\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x65\x72\x73\
+\x69\x6f\x6e\x3d\x22\x30\x2e\x34\x38\x2e\x33\x2e\x31\x20\x72\x39\
+\x38\x38\x36\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\
+\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x54\x72\x65\x65\x5f\x4d\
+\x65\x73\x68\x2e\x73\x76\x67\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\
+\x63\x61\x70\x65\x3a\x6f\x75\x74\x70\x75\x74\x5f\x65\x78\x74\x65\
+\x6e\x73\x69\x6f\x6e\x3d\x22\x6f\x72\x67\x2e\x69\x6e\x6b\x73\x63\
+\x61\x70\x65\x2e\x6f\x75\x74\x70\x75\x74\x2e\x73\x76\x67\x2e\x69\
+\x6e\x6b\x73\x63\x61\x70\x65\x22\x0a\x20\x20\x20\x76\x65\x72\x73\
+\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x3e\x0a\x20\x20\x3c\x64\x65\
+\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x73\
+\x33\x30\x35\x34\x22\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x6b\x73\
+\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\
+\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\
+\x3a\x74\x79\x70\x65\x3d\x22\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\
+\x70\x65\x72\x73\x70\x33\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x78\x3d\x22\x30\
+\x20\x3a\x20\x33\x32\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x79\x3d\
+\x22\x30\x20\x3a\x20\x31\x30\x30\x30\x20\x3a\x20\x30\x22\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\
+\x70\x5f\x7a\x3d\x22\x36\x34\x20\x3a\x20\x33\x32\x20\x3a\x20\x31\
+\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\
+\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x2d\x6f\x72\x69\x67\x69\x6e\
+\x3d\x22\x33\x32\x20\x3a\x20\x32\x31\x2e\x33\x33\x33\x33\x33\x33\
+\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\
+\x22\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\x33\x30\x36\x30\
+\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\x20\
+\x20\x3c\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x61\x6d\x65\x64\
+\x76\x69\x65\x77\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x62\x61\
+\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x70\x61\x67\x65\x63\x6f\x6c\
+\x6f\x72\x3d\x22\x23\x66\x66\x66\x66\x66\x66\x22\x0a\x20\x20\x20\
+\x20\x20\x62\x6f\x72\x64\x65\x72\x63\x6f\x6c\x6f\x72\x3d\x22\x23\
+\x36\x36\x36\x36\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\
+\x64\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x31\x2e\x30\x22\
+\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\
+\x61\x67\x65\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x2e\x30\x22\
+\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\
+\x61\x67\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\x32\x22\x0a\x20\x20\
+\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x7a\x6f\x6f\x6d\
+\x3d\x22\x35\x2e\x34\x30\x34\x31\x39\x39\x36\x22\x0a\x20\x20\x20\
+\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\x33\
+\x38\x2e\x31\x39\x37\x39\x32\x37\x22\x0a\x20\x20\x20\x20\x20\x69\
+\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x33\x30\x2e\x30\
+\x35\x37\x36\x32\x36\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\
+\x63\x61\x70\x65\x3a\x63\x75\x72\x72\x65\x6e\x74\x2d\x6c\x61\x79\
+\x65\x72\x3d\x22\x67\x33\x38\x38\x34\x22\x0a\x20\x20\x20\x20\x20\
+\x73\x68\x6f\x77\x67\x72\x69\x64\x3d\x22\x74\x72\x75\x65\x22\x0a\
+\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x64\x6f\
+\x63\x75\x6d\x65\x6e\x74\x2d\x75\x6e\x69\x74\x73\x3d\x22\x70\x78\
+\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\
+\x67\x72\x69\x64\x2d\x62\x62\x6f\x78\x3d\x22\x74\x72\x75\x65\x22\
+\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\
+\x69\x6e\x64\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x32\x38\
+\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\
+\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\
+\x37\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x78\x3d\x22\x30\x22\x0a\
+\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\
+\x6e\x64\x6f\x77\x2d\x79\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\
+\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\
+\x6d\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\x22\x31\x22\x20\x2f\x3e\
+\x0a\x20\x20\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\x0a\x20\x20\x20\
+\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x33\x30\
+\x35\x37\x22\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\
+\x46\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\
+\x6b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\
+\x62\x6f\x75\x74\x3d\x22\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\x67\
+\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\x6f\
+\x72\x6d\x61\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\
+\x63\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\x63\x65\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\
+\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\x53\x74\x69\x6c\
+\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\
+\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x3c\x2f\x64\
+\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\
+\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\x20\x20\x20\x3c\x2f\
+\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x3c\x2f\x6d\x65\x74\
+\x61\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\
+\x20\x69\x64\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\
+\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6c\x61\x62\x65\x6c\
+\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x0a\x20\x20\x20\x20\x20\
+\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x6f\x75\x70\x6d\x6f\
+\x64\x65\x3d\x22\x6c\x61\x79\x65\x72\x22\x3e\x0a\x20\x20\x20\x20\
+\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x33\
+\x38\x38\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x74\x72\x61\x6e\
+\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x2d\x30\
+\x2e\x32\x31\x30\x39\x35\x35\x36\x2c\x30\x2e\x39\x37\x37\x34\x39\
+\x35\x37\x2c\x30\x2e\x38\x38\x33\x38\x35\x32\x34\x2c\x30\x2e\x31\
+\x39\x30\x37\x34\x36\x32\x2c\x2d\x38\x32\x2e\x30\x32\x32\x33\x36\
+\x32\x2c\x2d\x31\x35\x38\x2e\x30\x32\x30\x35\x35\x29\x22\x3e\x0a\
+\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x6f\
+\x64\x65\x74\x79\x70\x65\x73\x3d\x22\x63\x63\x63\x63\x63\x63\x63\
+\x63\x63\x63\x63\x63\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x36\x36\x22\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x31\x38\x34\
+\x2e\x30\x36\x30\x36\x32\x2c\x31\x34\x35\x2e\x39\x37\x36\x36\x39\
+\x20\x43\x20\x31\x38\x31\x2e\x32\x32\x36\x37\x35\x2c\x31\x34\x35\
+\x2e\x34\x30\x31\x35\x37\x20\x31\x35\x36\x2e\x32\x30\x31\x31\x36\
+\x2c\x31\x34\x30\x2e\x39\x35\x30\x38\x34\x20\x31\x35\x36\x2e\x32\
+\x30\x31\x31\x36\x2c\x31\x34\x30\x2e\x39\x35\x30\x38\x34\x20\x4c\
+\x20\x31\x34\x34\x2e\x30\x31\x31\x34\x35\x2c\x31\x34\x39\x2e\x39\
+\x30\x32\x37\x39\x20\x4c\x20\x31\x34\x35\x2e\x36\x37\x38\x37\x39\
+\x2c\x31\x36\x33\x2e\x38\x30\x35\x34\x37\x20\x4c\x20\x31\x35\x39\
+\x2e\x38\x34\x36\x39\x32\x2c\x31\x37\x32\x2e\x39\x30\x37\x36\x37\
+\x20\x4c\x20\x31\x34\x38\x2e\x32\x38\x33\x30\x31\x2c\x31\x38\x34\
+\x2e\x37\x35\x39\x32\x34\x20\x4c\x20\x31\x33\x34\x2e\x36\x35\x35\
+\x32\x2c\x31\x37\x30\x2e\x36\x33\x33\x36\x34\x20\x4c\x20\x31\x36\
+\x34\x2e\x39\x39\x34\x37\x2c\x31\x38\x33\x2e\x32\x39\x38\x36\x34\
+\x20\x4c\x20\x31\x37\x34\x2e\x32\x30\x35\x31\x38\x2c\x31\x39\x34\
+\x2e\x30\x34\x38\x36\x34\x20\x4c\x20\x31\x38\x34\x2e\x36\x36\x34\
+\x36\x35\x2c\x31\x38\x30\x2e\x36\x38\x34\x34\x34\x20\x4c\x20\x31\
+\x36\x39\x2e\x34\x31\x32\x36\x34\x2c\x31\x37\x30\x2e\x32\x38\x31\
+\x34\x35\x20\x4c\x20\x31\x37\x30\x2e\x30\x33\x37\x34\x34\x2c\x31\
+\x35\x36\x2e\x33\x37\x38\x37\x36\x20\x4c\x20\x31\x38\x34\x2e\x30\
+\x36\x30\x36\x32\x2c\x31\x34\x35\x2e\x39\x37\x36\x36\x39\x20\x7a\
+\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\
+\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x30\x37\x66\x66\x30\x30\x3b\x66\
+\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\
+\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\
+\x73\x74\x72\x6f\x6b\x65\x3a\x23\x66\x66\x30\x30\x30\x30\x3b\x73\
+\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x34\x2e\x32\x30\
+\x36\x35\x36\x34\x32\x32\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
+\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\
+\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x62\x65\x76\x65\
+\x6c\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\
+\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\
+\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\
+\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x22\x20\x2f\x3e\
+\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\
+\x37\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\
+\x4d\x20\x31\x37\x30\x2e\x31\x32\x35\x2c\x31\x35\x36\x2e\x36\x32\
+\x35\x20\x4c\x20\x31\x34\x35\x2c\x31\x35\x30\x22\x0a\x20\x20\x20\
+\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x6f\x70\x61\
+\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x3a\x23\x30\x37\x66\
+\x66\x30\x30\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\
+\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\
+\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\
+\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\
+\x3a\x33\x2e\x31\x35\x34\x39\x32\x33\x31\x37\x3b\x73\x74\x72\x6f\
+\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\
+\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\
+\x3a\x62\x65\x76\x65\x6c\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\
+\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x73\x74\x61\x72\x74\x3a\
+\x6e\x6f\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x6d\x69\x64\x3a\
+\x6e\x6f\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x65\x6e\x64\x3a\
+\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\
+\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\
+\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\
+\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\
+\x3a\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\
+\x79\x3a\x31\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\
+\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\
+\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\
+\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\
+\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\
+\x61\x74\x65\x3b\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x30\x30\x30\
+\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\
+\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\
+\x61\x74\x68\x33\x38\x37\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\
+\x20\x20\x64\x3d\x22\x4d\x20\x31\x37\x30\x2e\x31\x32\x35\x2c\x31\
+\x37\x30\x2e\x37\x35\x20\x4c\x20\x31\x34\x36\x2e\x36\x32\x35\x2c\
+\x31\x36\x33\x2e\x37\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\
+\x20\x73\x74\x79\x6c\x65\x3d\x22\x6f\x70\x61\x63\x69\x74\x79\x3a\
+\x31\x3b\x66\x69\x6c\x6c\x3a\x23\x30\x37\x66\x66\x30\x30\x3b\x66\
+\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\
+\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\
+\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\
+\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x33\x2e\x31\x35\
+\x34\x39\x32\x33\x31\x37\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
+\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\
+\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\x69\x74\x65\
+\x72\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x6d\x61\
+\x72\x6b\x65\x72\x2d\x73\x74\x61\x72\x74\x3a\x6e\x6f\x6e\x65\x3b\
+\x6d\x61\x72\x6b\x65\x72\x2d\x6d\x69\x64\x3a\x6e\x6f\x6e\x65\x3b\
+\x6d\x61\x72\x6b\x65\x72\x2d\x65\x6e\x64\x3a\x6e\x6f\x6e\x65\x3b\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\
+\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\
+\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x73\x74\
+\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x76\
+\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\
+\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\
+\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\
+\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\x22\x20\
+\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\
+\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\x22\x63\x63\x63\x63\
+\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\
+\x70\x61\x74\x68\x33\x38\x38\x30\x22\x0a\x20\x20\x20\x20\x20\x20\
+\x20\x20\x20\x64\x3d\x22\x4d\x20\x31\x36\x35\x2c\x31\x38\x33\x2e\
+\x32\x35\x20\x4c\x20\x31\x33\x35\x2e\x37\x35\x2c\x31\x37\x31\x2e\
+\x33\x37\x35\x20\x4c\x20\x31\x34\x38\x2e\x37\x35\x2c\x31\x38\x36\
+\x20\x4c\x20\x31\x37\x34\x2e\x36\x32\x35\x2c\x31\x39\x36\x20\x4c\
+\x20\x31\x36\x35\x2c\x31\x38\x33\x2e\x32\x35\x20\x7a\x22\x0a\x20\
+\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x6f\
+\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x3a\x23\x30\
+\x37\x66\x66\x30\x30\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\
+\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\
+\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\
+\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\
+\x74\x68\x3a\x33\x2e\x31\x35\x34\x39\x32\x33\x31\x37\x3b\x73\x74\
+\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\
+\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\
+\x69\x6e\x3a\x62\x65\x76\x65\x6c\x3b\x6d\x61\x72\x6b\x65\x72\x3a\
+\x6e\x6f\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x73\x74\x61\x72\
+\x74\x3a\x6e\x6f\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x6d\x69\
+\x64\x3a\x6e\x6f\x6e\x65\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x65\x6e\
+\x64\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\
+\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\
+\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\
+\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\
+\x65\x74\x3a\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\
+\x69\x74\x79\x3a\x31\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\
+\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\
+\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\
+\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\
+\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\
+\x75\x6c\x61\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\
+\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\
+\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\
+\x73\x3d\x22\x63\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x38\x32\x22\x0a\x20\x20\
+\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x31\x35\x38\x2e\
+\x37\x35\x2c\x31\x37\x32\x2e\x37\x35\x20\x4c\x20\x31\x38\x34\x2e\
+\x37\x35\x2c\x31\x38\x31\x2e\x31\x32\x35\x22\x0a\x20\x20\x20\x20\
+\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\
+\x3a\x6e\x6f\x6e\x65\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\
+\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\
+\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
+\x64\x74\x68\x3a\x33\x2e\x31\x35\x34\x39\x32\x33\x31\x37\x3b\x73\
+\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\
+\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\
+\x6f\x69\x6e\x3a\x6d\x69\x74\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\
+\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\
+\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\
+\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\
+\x74\x79\x3a\x31\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x67\
+\x3e\x0a\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\
\x00\x00\x06\xdd\
\x00\
\x00\x22\x8f\x78\x9c\xed\x59\xdb\x6e\xe3\x46\x12\x7d\xf7\x57\xf4\
@@ -10577,6 +11272,10 @@ qt_resource_name = "\
\x00\x41\
\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x53\x00\x70\x00\x6c\x00\x69\x00\x74\x00\x4d\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x73\x00\x76\
\x00\x67\
+\x00\x0e\
+\x0a\xa2\x3b\x27\
+\x00\x41\
+\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x43\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x0d\
\x07\x4a\x92\xc7\
\x00\x41\
@@ -10633,6 +11332,16 @@ qt_resource_name = "\
\x00\x41\
\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x52\x00\x6f\x00\x6f\x00\x66\x00\x5f\x00\x54\x00\x72\x00\x65\x00\x65\x00\x2e\x00\x73\x00\x76\
\x00\x67\
+\x00\x13\
+\x06\x32\xe8\x47\
+\x00\x41\
+\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x43\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x48\x00\x6f\x00\x6c\x00\x65\x00\x73\x00\x2e\x00\x73\
+\x00\x76\x00\x67\
+\x00\x1a\
+\x0e\x5f\x91\x67\
+\x00\x41\
+\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x53\x00\x65\x00\x6c\x00\x65\x00\x63\x00\x74\x00\x4e\x00\x6f\x00\x6e\x00\x4d\x00\x61\x00\x6e\
+\x00\x69\x00\x66\x00\x6f\x00\x6c\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
\x00\x14\
\x02\xc8\x0e\x47\
\x00\x41\
@@ -10642,8 +11351,8 @@ qt_resource_name = "\
qt_resource_struct = "\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x01\
-\x00\x00\x00\x10\x00\x02\x00\x00\x00\x01\x00\x00\x00\x2f\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1a\x00\x00\x00\x15\
+\x00\x00\x00\x10\x00\x02\x00\x00\x00\x01\x00\x00\x00\x32\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1d\x00\x00\x00\x15\
\x00\x00\x00\x1a\x00\x02\x00\x00\x00\x11\x00\x00\x00\x04\
\x00\x00\x01\xd8\x00\x00\x00\x00\x00\x01\x00\x01\x60\x78\
\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x55\x20\
@@ -10662,29 +11371,32 @@ qt_resource_struct = "\
\x00\x00\x01\x8a\x00\x00\x00\x00\x00\x01\x00\x01\x1d\x6e\
\x00\x00\x00\xba\x00\x00\x00\x00\x00\x01\x00\x00\x6c\x7e\
\x00\x00\x00\x38\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x05\x4c\x00\x01\x00\x00\x00\x01\x00\x02\x4b\x1c\
-\x00\x00\x04\x58\x00\x00\x00\x00\x00\x01\x00\x02\x0d\x4d\
+\x00\x00\x05\x6e\x00\x01\x00\x00\x00\x01\x00\x02\x52\xde\
+\x00\x00\x04\x7a\x00\x00\x00\x00\x00\x01\x00\x02\x15\x0f\
\x00\x00\x03\x16\x00\x00\x00\x00\x00\x01\x00\x01\xb7\x13\
-\x00\x00\x06\x16\x00\x01\x00\x00\x00\x01\x00\x02\x7e\x42\
-\x00\x00\x05\x1e\x00\x01\x00\x00\x00\x01\x00\x02\x44\x4a\
+\x00\x00\x06\x9e\x00\x01\x00\x00\x00\x01\x00\x02\xa9\x48\
+\x00\x00\x05\x40\x00\x01\x00\x00\x00\x01\x00\x02\x4c\x0c\
\x00\x00\x03\x50\x00\x01\x00\x00\x00\x01\x00\x01\xc5\x82\
\x00\x00\x03\xa2\x00\x01\x00\x00\x00\x01\x00\x01\xd9\x09\
\x00\x00\x02\xba\x00\x01\x00\x00\x00\x01\x00\x01\x9c\x71\
-\x00\x00\x04\x98\x00\x00\x00\x00\x00\x01\x00\x02\x27\x27\
-\x00\x00\x04\x38\x00\x01\x00\x00\x00\x01\x00\x02\x05\x85\
+\x00\x00\x06\x38\x00\x00\x00\x00\x00\x01\x00\x02\x86\x04\
+\x00\x00\x04\xba\x00\x00\x00\x00\x00\x01\x00\x02\x2e\xe9\
+\x00\x00\x04\x5a\x00\x01\x00\x00\x00\x01\x00\x02\x0d\x47\
\x00\x00\x02\x98\x00\x01\x00\x00\x00\x01\x00\x01\x93\x78\
-\x00\x00\x05\xec\x00\x01\x00\x00\x00\x01\x00\x02\x76\xad\
+\x00\x00\x06\x0e\x00\x01\x00\x00\x00\x01\x00\x02\x7e\x6f\
\x00\x00\x03\x7e\x00\x01\x00\x00\x00\x01\x00\x01\xce\xda\
\x00\x00\x02\x4e\x00\x01\x00\x00\x00\x01\x00\x01\x82\xd0\
\x00\x00\x02\x78\x00\x01\x00\x00\x00\x01\x00\x01\x8c\x78\
-\x00\x00\x04\xc8\x00\x01\x00\x00\x00\x01\x00\x02\x36\x95\
+\x00\x00\x04\xea\x00\x01\x00\x00\x00\x01\x00\x02\x3e\x57\
\x00\x00\x04\x0e\x00\x00\x00\x00\x00\x01\x00\x01\xf5\x04\
-\x00\x00\x04\xf6\x00\x01\x00\x00\x00\x01\x00\x02\x3b\xe5\
-\x00\x00\x05\x76\x00\x00\x00\x00\x00\x01\x00\x02\x51\xf6\
+\x00\x00\x05\x18\x00\x01\x00\x00\x00\x01\x00\x02\x43\xa7\
+\x00\x00\x04\x38\x00\x01\x00\x00\x00\x01\x00\x02\x05\x85\
+\x00\x00\x05\x98\x00\x00\x00\x00\x00\x01\x00\x02\x59\xb8\
\x00\x00\x03\xc6\x00\x01\x00\x00\x00\x01\x00\x01\xde\x20\
-\x00\x00\x05\xc0\x00\x01\x00\x00\x00\x01\x00\x02\x6e\x33\
-\x00\x00\x05\xa0\x00\x01\x00\x00\x00\x01\x00\x02\x63\xf9\
-\x00\x00\x04\x78\x00\x01\x00\x00\x00\x01\x00\x02\x21\x0f\
+\x00\x00\x05\xe2\x00\x01\x00\x00\x00\x01\x00\x02\x75\xf5\
+\x00\x00\x05\xc2\x00\x01\x00\x00\x00\x01\x00\x02\x6b\xbb\
+\x00\x00\x04\x9a\x00\x01\x00\x00\x00\x01\x00\x02\x28\xd1\
+\x00\x00\x06\x64\x00\x00\x00\x00\x00\x01\x00\x02\x97\xd3\
\x00\x00\x02\xec\x00\x00\x00\x00\x00\x01\x00\x01\xa4\xb3\
\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x01\xe6\x08\
\x00\x00\x02\x1a\x00\x01\x00\x00\x00\x01\x00\x01\x7b\x80\
diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py
index 69838792c..75d3a9b49 100644
--- a/src/Mod/Arch/InitGui.py
+++ b/src/Mod/Arch/InitGui.py
@@ -65,7 +65,9 @@ class ArchWorkbench(Workbench):
"Arch_Window","Arch_Roof","Arch_Axis",
"Arch_SectionPlane","Arch_Add","Arch_Remove"]
self.meshtools = ["Arch_SplitMesh","Arch_MeshToShape",
- "Arch_SelectNonSolidMeshes","Arch_RemoveShape"]
+ "Arch_SelectNonSolidMeshes","Arch_RemoveShape",
+ "Arch_CloseHoles"]
+ self.calctools = ["Arch_Check"]
# draft tools
self.drafttools = ["Draft_Line","Draft_Wire","Draft_Circle","Draft_Arc",
@@ -85,6 +87,7 @@ class ArchWorkbench(Workbench):
self.appendToolbar(str(DraftTools.translate("arch","Draft tools")),self.drafttools)
self.appendToolbar(str(DraftTools.translate("arch","Draft mod tools")),self.draftmodtools)
self.appendMenu([str(DraftTools.translate("arch","&Architecture")),str(DraftTools.translate("arch","Conversion Tools"))],self.meshtools)
+ self.appendMenu([str(DraftTools.translate("arch","&Architecture")),str(DraftTools.translate("arch","Calculation Tools"))],self.calctools)
self.appendMenu(str(DraftTools.translate("arch","&Architecture")),self.archtools)
self.appendMenu(str(DraftTools.translate("arch","&Draft")),self.drafttools+self.draftmodtools)
self.appendMenu([str(DraftTools.translate("arch","&Draft")),str(DraftTools.translate("arch","Context Tools"))],self.draftcontexttools)
diff --git a/src/Mod/Arch/Makefile.am b/src/Mod/Arch/Makefile.am
index e30ec2a6a..89d59669f 100644
--- a/src/Mod/Arch/Makefile.am
+++ b/src/Mod/Arch/Makefile.am
@@ -62,6 +62,9 @@ EXTRA_DIST = \
Resources/icons/Arch_Axis.svg \
Resources/icons/Arch_Axis_Tree.svg \
Resources/icons/Arch_Roof.svg \
- Resources/icons/Arch_Roof_Tree.svg
+ Resources/icons/Arch_Roof_Tree.svg \
+ Resources/icons/Arch_CloseHoles.svg \
+ Resources/icons/Arch_Check.svg \
+ Resources/icons/Arch_SelectNonManifold.svg \
Resources/ui/archprefs-base.ui
diff --git a/src/Mod/Arch/Resources/Arch.qrc b/src/Mod/Arch/Resources/Arch.qrc
index b3667134c..63e079000 100644
--- a/src/Mod/Arch/Resources/Arch.qrc
+++ b/src/Mod/Arch/Resources/Arch.qrc
@@ -26,6 +26,9 @@
icons/Arch_Axis_Tree.svgicons/Arch_Roof.svgicons/Arch_Roof_Tree.svg
+ icons/Arch_CloseHoles.svg
+ icons/Arch_Check.svg
+ icons/Arch_SelectNonManifold.svgui/archprefs-base.uitranslations/Arch_af.qmtranslations/Arch_de.qm
diff --git a/src/Mod/Arch/Resources/icons/Arch_Check.svg b/src/Mod/Arch/Resources/icons/Arch_Check.svg
new file mode 100644
index 000000000..61be1a1b4
--- /dev/null
+++ b/src/Mod/Arch/Resources/icons/Arch_Check.svg
@@ -0,0 +1,162 @@
+
+
+
+
diff --git a/src/Mod/Arch/Resources/icons/Arch_CloseHoles.svg b/src/Mod/Arch/Resources/icons/Arch_CloseHoles.svg
new file mode 100644
index 000000000..c0fcbf1dd
--- /dev/null
+++ b/src/Mod/Arch/Resources/icons/Arch_CloseHoles.svg
@@ -0,0 +1,117 @@
+
+
+
+
diff --git a/src/Mod/Arch/Resources/icons/Arch_SelectNonManifold.svg b/src/Mod/Arch/Resources/icons/Arch_SelectNonManifold.svg
new file mode 100644
index 000000000..eb39166fa
--- /dev/null
+++ b/src/Mod/Arch/Resources/icons/Arch_SelectNonManifold.svg
@@ -0,0 +1,93 @@
+
+
+
+
diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py
index 200e9fbbd..d9e4d0a99 100644
--- a/src/Mod/Draft/Draft.py
+++ b/src/Mod/Draft/Draft.py
@@ -278,6 +278,15 @@ def getGroupContents(objectslist,walls=False):
newlist.append(o)
return newlist
+def removeHidden(objectslist):
+ """removeHidden(objectslist): removes hidden objects from the list"""
+ newlist = objectslist[:]
+ for o in objectslist:
+ if o.ViewObject:
+ if not o.ViewObject.isVisible():
+ newlist.remove(o)
+ return newlist
+
def printShape(shape):
"""prints detailed information of a shape"""
print "solids: ", len(shape.Solids)
@@ -347,6 +356,8 @@ def formatObject(target,origin=None):
setattr(obrep,p,val)
if matchrep.DisplayMode in obrep.listDisplayModes():
obrep.DisplayMode = matchrep.DisplayMode
+ if hasattr(matchrep,"DiffuseColor") and hasattr(obrep,"DiffuseColor"):
+ obrep.DiffuseColor = matchrep.DiffuseColor
def getSelection():
"getSelection(): returns the current FreeCAD selection"
@@ -1057,7 +1068,7 @@ def scale(objectslist,delta=Vector(1,1,1),center=Vector(0,0,0),copy=False,legacy
for o in objectslist:
o.ViewObject.hide()
if gui:
- _ViewProviderDraftPart(obj.ViewObject)
+ _ViewProviderClone(obj.ViewObject)
formatObject(obj,objectslist[-1])
select(obj)
return obj
@@ -1649,10 +1660,10 @@ def clone(obj,delta=None):
_Clone(cl)
if gui:
_ViewProviderClone(cl.ViewObject)
- formatObject(cl,obj[0])
cl.Objects = obj
if delta:
cl.Placement.move(delta)
+ formatObject(cl,obj[0])
return cl
def heal(objlist=None,delete=True,reparent=True):
diff --git a/src/Mod/Drawing/Gui/Command.cpp b/src/Mod/Drawing/Gui/Command.cpp
index 7ed5a4641..8a206d52d 100644
--- a/src/Mod/Drawing/Gui/Command.cpp
+++ b/src/Mod/Drawing/Gui/Command.cpp
@@ -11,7 +11,13 @@
#include "PreCompiled.h"
#ifndef _PreComp_
+# include
+# include
+# include
+# include
+# include
# include
+# include
#endif
#include
@@ -88,18 +94,16 @@ CmdDrawingNewPage::CmdDrawingNewPage()
void CmdDrawingNewPage::activated(int iMsg)
{
+ Gui::ActionGroup* pcAction = qobject_cast(_pcAction);
+ QAction* a = pcAction->actions()[iMsg];
+
std::string FeatName = getUniqueObjectName("Page");
- if (iMsg == 3) {
+ QFileInfo tfi(a->property("Template").toString());
+ if (tfi.isReadable()) {
openCommand("Drawing create page");
doCommand(Doc,"App.activeDocument().addObject('Drawing::FeaturePage','%s')",FeatName.c_str());
- doCommand(Doc,"App.activeDocument().%s.Template = 'A3_Landscape.svg'",FeatName.c_str());
- commitCommand();
- }
- else if (iMsg == 4) {
- openCommand("Drawing create page");
- doCommand(Doc,"App.activeDocument().addObject('Drawing::FeaturePage','%s')",FeatName.c_str());
- doCommand(Doc,"App.activeDocument().%s.Template = 'A4_Landscape.svg'",FeatName.c_str());
+ doCommand(Doc,"App.activeDocument().%s.Template = '%s'",FeatName.c_str(), (const char*)tfi.filePath().toUtf8());
commitCommand();
}
else {
@@ -115,25 +119,45 @@ Gui::Action * CmdDrawingNewPage::createAction(void)
pcAction->setDropDownMenu(true);
applyCommandData(pcAction);
- QAction* a0 = pcAction->addAction(QString());
- a0->setIcon(Gui::BitmapFactory().pixmap("actions/drawing-landscape-A0"));
+ QAction* defaultAction = 0;
+ int defaultId = 0;
- QAction* a1 = pcAction->addAction(QString());
- a1->setIcon(Gui::BitmapFactory().pixmap("actions/drawing-landscape-A1"));
+ std::string path = App::Application::getResourceDir();
+ path += "Mod/Drawing/Templates/";
+ QDir dir(QString::fromUtf8(path.c_str()), QString::fromAscii("A*_Landscape.svg"));
+ for (unsigned int i=0; i -1) {
+ int id = rx.cap(1).toInt();
+ QFile file(QString::fromAscii(":/icons/actions/drawing-landscape-A0.svg"));
+ QAction* a = pcAction->addAction(QString());
+ if (file.open(QFile::ReadOnly)) {
+ QString s = QString::fromAscii("style=\"font-size:22px\">A%1").arg(id);
+ QByteArray data = file.readAll();
+ data.replace("style=\"font-size:22px\">A0", s.toAscii());
+ a->setIcon(Gui::BitmapFactory().pixmapFromSvg(data, QSize(24,24)));
+ }
- QAction* a2 = pcAction->addAction(QString());
- a2->setIcon(Gui::BitmapFactory().pixmap("actions/drawing-landscape-A2"));
+ a->setProperty("TemplateId", id);
+ a->setProperty("Template", dir.absoluteFilePath(dir[i]));
- QAction* a3 = pcAction->addAction(QString());
- a3->setIcon(Gui::BitmapFactory().pixmap("actions/drawing-landscape-A3"));
-
- QAction* a4 = pcAction->addAction(QString());
- a4->setIcon(Gui::BitmapFactory().pixmap("actions/drawing-landscape-A4"));
+ if (id == 3) {
+ defaultAction = a;
+ defaultId = pcAction->actions().size() - 1;
+ }
+ }
+ }
_pcAction = pcAction;
languageChange();
- pcAction->setIcon(a3->icon());
- pcAction->setProperty("defaultAction", QVariant(3));
+ if (defaultAction) {
+ pcAction->setIcon(defaultAction->icon());
+ pcAction->setProperty("defaultAction", QVariant(defaultId));
+ }
+ else if (!pcAction->actions().isEmpty()) {
+ pcAction->setIcon(pcAction->actions()[0]->icon());
+ pcAction->setProperty("defaultAction", QVariant(0));
+ }
return pcAction;
}
@@ -146,41 +170,15 @@ void CmdDrawingNewPage::languageChange()
return;
Gui::ActionGroup* pcAction = qobject_cast(_pcAction);
QList a = pcAction->actions();
-
- a[0]->setText(QCoreApplication::translate(
- "Drawing_NewPage", "A0 landscape", 0,
- QCoreApplication::CodecForTr));
- a[0]->setToolTip(QCoreApplication::translate(
- "Drawing_NewPage", "Insert new A0 landscape drawing", 0,
- QCoreApplication::CodecForTr));
-
- a[1]->setText(QCoreApplication::translate(
- "Drawing_NewPage", "A1 landscape", 0,
- QCoreApplication::CodecForTr));
- a[1]->setToolTip(QCoreApplication::translate(
- "Drawing_NewPage", "Insert new A1 landscape drawing", 0,
- QCoreApplication::CodecForTr));
-
- a[2]->setText(QCoreApplication::translate(
- "Drawing_NewPage", "A2 landscape", 0,
- QCoreApplication::CodecForTr));
- a[2]->setToolTip(QCoreApplication::translate(
- "Drawing_NewPage", "Insert new A2 landscape drawing", 0,
- QCoreApplication::CodecForTr));
-
- a[3]->setText(QCoreApplication::translate(
- "Drawing_NewPage", "A3 landscape", 0,
- QCoreApplication::CodecForTr));
- a[3]->setToolTip(QCoreApplication::translate(
- "Drawing_NewPage", "Insert new A3 landscape drawing", 0,
- QCoreApplication::CodecForTr));
-
- a[4]->setText(QCoreApplication::translate(
- "Drawing_NewPage", "A4 landscape", 0,
- QCoreApplication::CodecForTr));
- a[4]->setToolTip(QCoreApplication::translate(
- "Drawing_NewPage", "Insert new A4 landscape drawing", 0,
- QCoreApplication::CodecForTr));
+ for (QList::iterator it = a.begin(); it != a.end(); ++it) {
+ int id = (*it)->property("TemplateId").toInt();
+ (*it)->setText(QCoreApplication::translate(
+ "Drawing_NewPage", "A%1 landscape", 0,
+ QCoreApplication::CodecForTr).arg(id));
+ (*it)->setToolTip(QCoreApplication::translate(
+ "Drawing_NewPage", "Insert new A%1 landscape drawing", 0,
+ QCoreApplication::CodecForTr).arg(id));
+ }
}
bool CmdDrawingNewPage::isActive(void)
diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.qm b/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.qm
index 2079b12df..1b31c06f9 100644
Binary files a/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.qm and b/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.qm differ
diff --git a/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.ts b/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.ts
index 5923883d7..3fe18daed 100644
--- a/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.ts
+++ b/src/Mod/Drawing/Gui/Resources/translations/Drawing_de.ts
@@ -251,6 +251,14 @@
Insert new A4 landscape drawingNeue A3-Zeichung einfügen (im Querformat) {4 ?}
+
+ Insert new A%1 landscape drawing
+ Neue A%1-Zeichung im Querformat einfügen
+
+
+ A%1 landscape
+ A%1 im Querformat
+ QObject
diff --git a/src/Mod/Part/Gui/TaskFaceColors.cpp b/src/Mod/Part/Gui/TaskFaceColors.cpp
index 96204f66c..61a112e90 100644
--- a/src/Mod/Part/Gui/TaskFaceColors.cpp
+++ b/src/Mod/Part/Gui/TaskFaceColors.cpp
@@ -26,6 +26,7 @@
#ifndef _PreComp_
# include
# include
+# include
# include
#endif
@@ -194,10 +195,17 @@ bool FaceColors::accept()
bool FaceColors::reject()
{
- Gui::Document* doc = Gui::Application::Instance->getDocument(d->vp->getObject()->getDocument());
- doc->resetEdit();
- d->vp->DiffuseColor.setValues(d->current);
- return true;
+ int ret = QMessageBox::question(this, tr("Face colors"), tr("Do you really want to cancel?"),
+ QMessageBox::Yes, QMessageBox::No|QMessageBox::Default|QMessageBox::Escape);
+ if (ret == QMessageBox::Yes) {
+ Gui::Document* doc = Gui::Application::Instance->getDocument(d->vp->getObject()->getDocument());
+ doc->resetEdit();
+ d->vp->DiffuseColor.setValues(d->current);
+ return true;
+ }
+ else {
+ return false;
+ }
}
void FaceColors::changeEvent(QEvent *e)
diff --git a/src/Mod/Ship/CMakeLists.txt b/src/Mod/Ship/CMakeLists.txt
index 006226966..432c91576 100644
--- a/src/Mod/Ship/CMakeLists.txt
+++ b/src/Mod/Ship/CMakeLists.txt
@@ -2,6 +2,7 @@ SET(ShipMain_SRCS
InitGui.py
ShipGui.py
Instance.py
+ SimInstance.py
TankInstance.py
)
SOURCE_GROUP("" FILES ${ShipMain_SRCS})
@@ -36,6 +37,14 @@ SET(ShipIcons_SRCS
Icons/Weight.png
Icons/Weight.xcf
Icons/Weight.xpm
+ Icons/SimIco.xcf
+ Icons/Sim.xpm
+ Icons/SimCreateIco.png
+ Icons/SimCreateIco.xpm
+ Icons/SimRunIco.png
+ Icons/SimRunIco.xpm
+ Icons/SimStopIco.png
+ Icons/SimStopIco.xpm
Icons/Tank.png
Icons/Tank.xcf
Icons/Tank.xpm
@@ -47,6 +56,7 @@ SET(ShipExamples_SRCS
Examples/s60_katamaran.fcstd
Examples/wigley.fcstd
Examples/wigley_katamaran.fcstd
+ OpenCL/simInit.cl
)
SOURCE_GROUP("shipexamples" FILES ${ShipExamples_SRCS})
@@ -121,9 +131,29 @@ SET(ShipGZ_SRCS
tankGZ/TaskPanel.py
tankGZ/TaskPanel.ui
)
-SOURCE_GROUP("shipcreatetank" FILES ${ShipCreateTank_SRCS})
+SOURCE_GROUP("shipgz" FILES ${ShipGZ_SRCS})
-SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS} ${ShipGZ_SRCS})
+SET(SimCreate_SRCS
+ simCreate/__init__.py
+ simCreate/TaskPanel.py
+ simCreate/TaskPanel.ui
+)
+SOURCE_GROUP("simcreate" FILES ${SimCreate_SRCS})
+
+SET(SimRun_SRCS
+ simRun/__init__.py
+ simRun/Simulation.py
+ simRun/TaskPanel.py
+ simRun/TaskPanel.ui
+ simRun/clSim/__init__.py
+ simRun/clSim/initialization.py
+ simRun/clSim/Utils.py
+ simRun/Sim/__init__.py
+ simRun/Sim/initialization.py
+)
+SOURCE_GROUP("simrun" FILES ${SimRun_SRCS})
+
+SET(all_files ${ShipMain_SRCS} ${ShipIcons_SRCS} ${ShipExamples_SRCS} ${ShipLoadExample_SRCS} ${ShipCreateShip_SRCS} ${ShipOutlineDraw_SRCS} ${ShipAreasCurve_SRCS} ${ShipHydrostatics_SRCS} ${ShipUtils_SRCS} ${ShipWeights_SRCS} ${ShipCreateTank_SRCS} ${ShipGZ_SRCS} ${SimCreate_SRCS} ${SimRun_SRCS})
ADD_CUSTOM_TARGET(Ship ALL
SOURCES ${all_files}
@@ -197,6 +227,18 @@ INSTALL(
DESTINATION
Mod/Ship/tankGZ
)
+INSTALL(
+ FILES
+ ${SimCreate_SRCS}
+ DESTINATION
+ Mod/Ship/simCreate
+)
+INSTALL(
+ FILES
+ ${SimRun_SRCS}
+ DESTINATION
+ Mod/Ship/simRun
+)
INSTALL(
FILES
${ShipMain_SRCS}
diff --git a/src/Mod/Ship/Icons/Sim.xpm b/src/Mod/Ship/Icons/Sim.xpm
new file mode 100644
index 000000000..effc4026f
--- /dev/null
+++ b/src/Mod/Ship/Icons/Sim.xpm
@@ -0,0 +1,336 @@
+/* XPM */
+static char * Sim_xpm[] = {
+"32 32 301 2",
+" c None",
+". c #CCCCCC",
+"+ c #A9A9A9",
+"@ c #989898",
+"# c #A1A1A1",
+"$ c #C3C3C3",
+"% c #C1C0C1",
+"& c #BFBFBF",
+"* c #A7A7A7",
+"= c #808080",
+"- c #5C5C5C",
+"; c #565655",
+"> c #4E4E4E",
+", c #676767",
+"' c #898989",
+") c #B6B5B6",
+"! c #BABABA",
+"~ c #B9B9B9",
+"{ c #A5A5A5",
+"] c #7E7E7E",
+"^ c #595A59",
+"/ c #575656",
+"( c #535353",
+"_ c #505050",
+": c #4D4D4C",
+"< c #474747",
+"[ c #404040",
+"} c #4D4D4D",
+"| c #787878",
+"1 c #B8B7B8",
+"2 c #B6B6B6",
+"3 c #888888",
+"4 c #7C7C7C",
+"5 c #575657",
+"6 c #535354",
+"7 c #4E4D4E",
+"8 c #4A4A4A",
+"9 c #444444",
+"0 c #414141",
+"a c #3E3E3E",
+"b c #393938",
+"c c #313131",
+"d c #393939",
+"e c #636363",
+"f c #ABABAB",
+"g c #B3B3B3",
+"h c #848484",
+"i c #787979",
+"j c #545454",
+"k c #515151",
+"l c #4B4B4B",
+"m c #484748",
+"n c #3B3B3B",
+"o c #383838",
+"p c #353535",
+"q c #323232",
+"r c #2F2F2E",
+"s c #2A2A2A",
+"t c #222323",
+"u c #252625",
+"v c #AFAFAF",
+"w c #767676",
+"x c #484848",
+"y c #454545",
+"z c #424242",
+"A c #3F3F3E",
+"B c #3B3B3C",
+"C c #393838",
+"D c #2F2F2F",
+"E c #2C2C2C",
+"F c #292929",
+"G c #262626",
+"H c #222222",
+"I c #1F1F20",
+"J c #171716",
+"K c #959595",
+"L c #747474",
+"M c #4E4E4F",
+"N c #4C4B4C",
+"O c #484849",
+"P c #424243",
+"Q c #282828",
+"R c #525251",
+"S c #373737",
+"T c #353636",
+"U c #333233",
+"V c #30302F",
+"W c #2C2D2D",
+"X c #232323",
+"Y c #201F20",
+"Z c #1D1D1D",
+"` c #151414",
+" . c #717272",
+".. c #4C4C4C",
+"+. c #484949",
+"@. c #464545",
+"#. c #424343",
+"$. c #3A3A3A",
+"%. c #5D4A49",
+"&. c #7E7E86",
+"*. c #56569F",
+"=. c #3E3E41",
+"-. c #757575",
+";. c #575757",
+">. c #222221",
+",. c #262627",
+"'. c #242423",
+"). c #212020",
+"!. c #1A1A1A",
+"~. c #121212",
+"{. c #939493",
+"]. c #6F6F6F",
+"^. c #494949",
+"/. c #464646",
+"(. c #434343",
+"_. c #554545",
+":. c #686863",
+"<. c #939394",
+"[. c #BDBDBD",
+"}. c #202021",
+"|. c #1E1E1E",
+"1. c #171718",
+"2. c #0F0F0F",
+"3. c #929292",
+"4. c #6C6D6D",
+"5. c #464746",
+"6. c #525F73",
+"7. c #444648",
+"8. c #3D3D3D",
+"9. c #2D2C2A",
+"0. c #A1A2A2",
+"a. c #AAACAC",
+"b. c #A6A7A7",
+"c. c #A8AAAA",
+"d. c #AFB0B0",
+"e. c #777676",
+"f. c #9A9A9A",
+"g. c #1B1B1B",
+"h. c #181818",
+"i. c #0C0C0C",
+"j. c #909090",
+"k. c #6B6A6B",
+"l. c #55657E",
+"m. c #6990FB",
+"n. c #6483CD",
+"o. c #5871B2",
+"p. c #434E7E",
+"q. c #A97C76",
+"r. c #AB7777",
+"s. c #AC7070",
+"t. c #A26565",
+"u. c #805C5C",
+"v. c #848686",
+"w. c #424342",
+"x. c #151515",
+"y. c #0A0909",
+"z. c #8F8F8F",
+"A. c #676868",
+"B. c #3B3A3A",
+"C. c #383738",
+"D. c #353534",
+"E. c #45525F",
+"F. c #6367AC",
+"G. c #804682",
+"H. c #942A39",
+"I. c #991312",
+"J. c #540901",
+"K. c #393742",
+"L. c #1C1C1C",
+"M. c #191919",
+"N. c #161515",
+"O. c #121313",
+"P. c #070707",
+"Q. c #8D8E8D",
+"R. c #656566",
+"S. c #3E3F3F",
+"T. c #2F2E2F",
+"U. c #353838",
+"V. c #35496A",
+"W. c #3E4D88",
+"X. c #354889",
+"Y. c #5573D7",
+"Z. c #5D80FB",
+"`. c #374899",
+" + c #293338",
+".+ c #101010",
+"++ c #0D0D0D",
+"@+ c #040404",
+"#+ c #8C8C8C",
+"$+ c #8B8B8B",
+"%+ c #4B4A4B",
+"&+ c #303030",
+"*+ c #333232",
+"=+ c #2F2F30",
+"-+ c #232223",
+";+ c #1A1919",
+">+ c #2E3949",
+",+ c #5C7BA3",
+"'+ c #36467D",
+")+ c #536F93",
+"!+ c #0A0A0A",
+"~+ c #010101",
+"{+ c #C1C1C1",
+"]+ c #B8B8B8",
+"^+ c #A0A0A0",
+"/+ c #3F3F3F",
+"(+ c #222122",
+"_+ c #202020",
+":+ c #161717",
+"<+ c #141414",
+"[+ c #111011",
+"}+ c #0D0E0E",
+"|+ c #0B0B0A",
+"1+ c #000000",
+"2+ c #525252",
+"3+ c #686868",
+"4+ c #ADADAD",
+"5+ c #9E9F9F",
+"6+ c #6D6D6D",
+"7+ c #3C3C3C",
+"8+ c #131414",
+"9+ c #111111",
+"0+ c #0E0E0E",
+"a+ c #0B0B0B",
+"b+ c #080708",
+"c+ c #050504",
+"d+ c #4C4D4C",
+"e+ c #4D4C4D",
+"f+ c #494A4A",
+"g+ c #454444",
+"h+ c #9D9D9D",
+"i+ c #9E9E9E",
+"j+ c #AEAEAE",
+"k+ c #BEBEBF",
+"l+ c #BEBDBD",
+"m+ c #979797",
+"n+ c #6A6B6A",
+"o+ c #3F3F40",
+"p+ c #020202",
+"q+ c #030303",
+"r+ c #878787",
+"s+ c #69696A",
+"t+ c #868685",
+"u+ c #646464",
+"v+ c #474647",
+"w+ c #656565",
+"x+ c #9E9F9E",
+"y+ c #A8A8A8",
+"z+ c #AFAFAE",
+"A+ c #A4A4A4",
+"B+ c #7A7A7A",
+"C+ c #969696",
+"D+ c #363636",
+"E+ c #777776",
+"F+ c #8C8D8D",
+"G+ c #7D7D7D",
+"H+ c #5E5E5E",
+"I+ c #4F4F50",
+"J+ c #808181",
+"K+ c #707070",
+"L+ c #909191",
+"M+ c #9C9C9C",
+"N+ c #787877",
+"O+ c #696969",
+"P+ c #616161",
+"Q+ c #6E6E6E",
+"R+ c #7C7B7C",
+"S+ c #777677",
+"T+ c #6F6E6E",
+"U+ c #595959",
+"V+ c #717171",
+"W+ c #8D8D8D",
+"X+ c #515051",
+"Y+ c #49494A",
+"Z+ c #4B4A4A",
+"`+ c #606060",
+" @ c #6A6A6A",
+".@ c #616162",
+"+@ c #6C6D6C",
+"@@ c #767777",
+"#@ c #727272",
+"$@ c #6B6B6B",
+"%@ c #828283",
+"&@ c #757475",
+"*@ c #444545",
+"=@ c #565656",
+"-@ c #5A595A",
+";@ c #666666",
+">@ c #878687",
+",@ c #8A8A8A",
+"'@ c #797979",
+")@ c #444344",
+"!@ c #7F8080",
+"~@ c #737373",
+"{@ c #484747",
+"]@ c #707170",
+"^@ c #7F7F7F",
+"/@ c #676867",
+"(@ c #4D4C4C",
+"_@ c #5F5F5F",
+":@ c #434444",
+" ",
+" ",
+" . + ",
+" @ # $ % & * ",
+" = - ; > , ' ) ! ~ { ",
+" ] ^ / ( _ : < [ } | # 1 2 # 3 ",
+" 4 5 6 _ 7 8 < 9 0 a b c d e ' f g + h ",
+" i j k 7 l m 9 0 a n o p q r s t u < | v ",
+" w k > l x y z A B C p q D E F G H I J K ",
+" L M N O y P Q R S T U V W F G X Y Z ` K ",
+" ...+.@.#.$.%.&.*.=.-.;.>.,.'.).Z !.~.{. ",
+" ].^./.(.[ c _._ :.<.[.$ ' /.}.|.!.1.2.3. ",
+" 4.5.6.7.8.9.# 0.a.b.c.d.e.f.g.g.h.` i.j. ",
+" k.9 l.m.n.o.p.q.r.s.t.u.v.w.g.h.x.~.y.z. ",
+" A.0 a B.C.D.E.F.G.H.I.J.K.L.M.N.O.2.P.Q. ",
+" R.S.n o p q T.E U.V.W.X.Y.Z.`. +.+++@+#+ ",
+" $+%+&+q *+=+E F G -+I Z ;+>+,+'+)+!+~+$+ ",
+" {+]+^+w /+H (+X _+Z !.:+<+[+}+|+P.1+' ",
+" k 2+_ > 3+z.4+5+6+7+x.~.8+9+0+a+b+c+1+3 ",
+" %+..d+e+..f+< g+h+i+j+k+l+m+n+o+P.p+q+p+1+r+ ",
+" s+t+u+< (.< v+y 9 (.w+x+y+z+y+h+A+B+C+K ].D+1+h ",
+" E+i+F+f.j.G+H+9 [ (.z I+J+m+f.j.K+z 9 9 9 K+L+r+/.9 (. ",
+" L M+N+O+u+P+Q+R+S+T+U+y 8 - ;...9 9 9 9 9 9 9 9 (.(.k w+ ",
+" V+m+' W+r+] , X+Y+(.: r+L P+k 9 z (.9 9 9 9 (.(.Z+;.- `+ ",
+" ].C+w @u+.@+@@@#@$@j %@B+&@#@L $@H+2+/.0 (.*@+.} 2+=@-@ ",
+" ;@| >@,@'@u+k 8 )@..!@| ~@V+#@#@#@#@L 6+..(.9 {@.._ ( ",
+" e ]@^@] /@k G+w #@#@#@#@#@V+ @$@_ 9 9 9 /.Y+(@ ",
+" - R.T+L ~@#@#@#@#@]._ _@_ 9 9 9 (.9 x ",
+" =@_@O+L ~@#@~@L _ 9 9 :@ ",
+" ;.H+ @-._ (. ",
+" ",
+" "};
diff --git a/src/Mod/Ship/Icons/SimCreateIco.png b/src/Mod/Ship/Icons/SimCreateIco.png
new file mode 100644
index 000000000..4886cd01d
Binary files /dev/null and b/src/Mod/Ship/Icons/SimCreateIco.png differ
diff --git a/src/Mod/Ship/Icons/SimCreateIco.xcf b/src/Mod/Ship/Icons/SimCreateIco.xcf
new file mode 100644
index 000000000..6dcf3fdd0
Binary files /dev/null and b/src/Mod/Ship/Icons/SimCreateIco.xcf differ
diff --git a/src/Mod/Ship/Icons/SimCreateIco.xpm b/src/Mod/Ship/Icons/SimCreateIco.xpm
new file mode 100644
index 000000000..72814a4f1
--- /dev/null
+++ b/src/Mod/Ship/Icons/SimCreateIco.xpm
@@ -0,0 +1,2255 @@
+/* XPM */
+static char * SimCreateIco_xpm[] = {
+"128 128 2124 2",
+" c None",
+". c #7B7B7B",
+"+ c #EAEAEA",
+"@ c #E9EAE9",
+"# c #E9E9E9",
+"$ c #E9E9E8",
+"% c #D9D9D9",
+"& c #EAEAE9",
+"* c #E8E9E8",
+"= c #E9E8E8",
+"- c #E8E8E8",
+"; c #E8E8E7",
+"> c #E7E7E7",
+", c #E7E6E7",
+"' c #E6E6E6",
+") c #5F5F5F",
+"! c #606060",
+"~ c #868686",
+"{ c #AEAEAE",
+"] c #C3C2C2",
+"^ c #D1D1D1",
+"/ c #E4E3E3",
+"( c #E5E6E5",
+"_ c #E6E5E5",
+": c #E5E4E5",
+"< c #6B6B6B",
+"[ c #7B7A7A",
+"} c #888889",
+"| c #ABABAB",
+"1 c #D5D5D5",
+"2 c #E5E6E6",
+"3 c #E5E5E5",
+"4 c #E4E5E4",
+"5 c #E4E4E4",
+"6 c #E3E3E3",
+"7 c #E3E3E2",
+"8 c #E2E2E2",
+"9 c #5E5E5E",
+"0 c #5D5D5D",
+"a c #5C5C5C",
+"b c #5B5B5C",
+"c c #5A5B5B",
+"d c #838484",
+"e c #BABABA",
+"f c #DEDEDE",
+"g c #E2E3E2",
+"h c #E1E2E2",
+"i c #E1E1E2",
+"j c #E0E1E0",
+"k c #E1E1E1",
+"l c #EAE9E9",
+"m c #5E5F5F",
+"n c #5E5D5E",
+"o c #5C5D5C",
+"p c #5B5C5B",
+"q c #5B5A5A",
+"r c #5A5A5A",
+"s c #595959",
+"t c #595858",
+"u c #585857",
+"v c #575757",
+"w c #686868",
+"x c #909090",
+"y c #BEBEBE",
+"z c #D3D2D3",
+"A c #E0E0E0",
+"B c #E0DFE0",
+"C c #E0DFDF",
+"D c #DEDEDF",
+"E c #5F5E5E",
+"F c #5E5D5D",
+"G c #5C5B5B",
+"H c #5B5B5B",
+"I c #5A5A59",
+"J c #595A59",
+"K c #595859",
+"L c #585757",
+"M c #565656",
+"N c #555555",
+"O c #545455",
+"P c #545454",
+"Q c #676666",
+"R c #717272",
+"S c #8B8B8A",
+"T c #B7B7B8",
+"U c #DFDFDF",
+"V c #DDDDDD",
+"W c #DCDDDD",
+"X c #DDDCDC",
+"Y c #E8E9E9",
+"Z c #5D5E5E",
+"` c #5C5B5C",
+" . c #595958",
+".. c #585858",
+"+. c #565657",
+"@. c #555556",
+"#. c #545554",
+"$. c #555454",
+"%. c #535354",
+"&. c #525252",
+"*. c #525251",
+"=. c #515050",
+"-. c #4F5050",
+";. c #4F4F50",
+">. c #4E4F4F",
+",. c #959595",
+"'. c #CAC9C9",
+"). c #D9D9DA",
+"!. c #DADBDA",
+"~. c #DCDCDC",
+"{. c #DDDDDC",
+"]. c #DBDCDB",
+"^. c #DBDBDB",
+"/. c #DADADB",
+"(. c #DADADA",
+"_. c #E8E8E9",
+":. c #5B5A5B",
+"<. c #505151",
+"[. c #505050",
+"}. c #4F4F4F",
+"|. c #4E4D4E",
+"1. c #4D4D4D",
+"2. c #4C4D4D",
+"3. c #4C4C4C",
+"4. c #4B4B4B",
+"5. c #707070",
+"6. c #959596",
+"7. c #AAAAAA",
+"8. c #BFBEBF",
+"9. c #D7D7D6",
+"0. c #DADAD9",
+"a. c #D9DADA",
+"b. c #D8D9D9",
+"c. c #5B5C5C",
+"d. c #5A5B5A",
+"e. c #5A5959",
+"f. c #565757",
+"g. c #535353",
+"h. c #535253",
+"i. c #505150",
+"j. c #4F504F",
+"k. c #4E4E4E",
+"l. c #4C4B4B",
+"m. c #494A49",
+"n. c #494949",
+"o. c #484747",
+"p. c #6C6C6C",
+"q. c #C7C7C7",
+"r. c #DAD9D9",
+"s. c #D9D8D9",
+"t. c #D9D8D8",
+"u. c #D8D8D8",
+"v. c #D8D8D7",
+"w. c #D7D8D8",
+"x. c #D7D7D7",
+"y. c #D6D6D6",
+"z. c #D5D5D6",
+"A. c #5E5E5D",
+"B. c #595A5A",
+"C. c #575656",
+"D. c #545555",
+"E. c #4F4E4E",
+"F. c #4E4E4D",
+"G. c #4C4D4C",
+"H. c #4C4B4C",
+"I. c #4A4A4A",
+"J. c #494A4A",
+"K. c #494848",
+"L. c #484847",
+"M. c #474747",
+"N. c #474646",
+"O. c #454545",
+"P. c #444444",
+"Q. c #434343",
+"R. c #434243",
+"S. c #6D6D6D",
+"T. c #A7A8A7",
+"U. c #D0D0D0",
+"V. c #D4D4D4",
+"W. c #D6D5D5",
+"X. c #E7E8E8",
+"Y. c #59595A",
+"Z. c #535454",
+"`. c #515151",
+" + c #4D4D4C",
+".+ c #464647",
+"++ c #464545",
+"@+ c #444545",
+"#+ c #424242",
+"$+ c #414141",
+"%+ c #404041",
+"&+ c #3F4040",
+"*+ c #787878",
+"=+ c #969696",
+"-+ c #A7A7A7",
+";+ c #C3C3C2",
+">+ c #D5D4D5",
+",+ c #D4D4D5",
+"'+ c #D3D4D4",
+")+ c #D3D3D3",
+"!+ c #D2D3D3",
+"~+ c #E6E7E6",
+"{+ c #5A5A5B",
+"]+ c #575858",
+"^+ c #575657",
+"/+ c #555656",
+"(+ c #565555",
+"_+ c #525352",
+":+ c #515051",
+"<+ c #4D4D4E",
+"[+ c #4D4C4C",
+"}+ c #4A4A49",
+"|+ c #474848",
+"1+ c #464747",
+"2+ c #444544",
+"3+ c #434342",
+"4+ c #434142",
+"5+ c #404141",
+"6+ c #403F3F",
+"7+ c #3F3E3E",
+"8+ c #3E3E3E",
+"9+ c #3D3D3D",
+"0+ c #3C3C3C",
+"a+ c #404040",
+"b+ c #707071",
+"c+ c #A4A5A5",
+"d+ c #D4D3D3",
+"e+ c #D3D2D2",
+"f+ c #D2D2D2",
+"g+ c #D2D2D1",
+"h+ c #D1D0D0",
+"i+ c #D0D1D0",
+"j+ c #CFD0CF",
+"k+ c #525353",
+"l+ c #525152",
+"m+ c #504F4F",
+"n+ c #4B4A4A",
+"o+ c #484848",
+"p+ c #464646",
+"q+ c #454544",
+"r+ c #454444",
+"s+ c #424343",
+"t+ c #414142",
+"u+ c #403F40",
+"v+ c #3F3F3F",
+"w+ c #3C3D3C",
+"x+ c #3B3B3B",
+"y+ c #3A3A3A",
+"z+ c #3A3A39",
+"A+ c #383838",
+"B+ c #373737",
+"C+ c #474847",
+"D+ c #7F7F7F",
+"E+ c #B6B6B6",
+"F+ c #C8C9C8",
+"G+ c #CBCBCB",
+"H+ c #CFD0D0",
+"I+ c #D0D0CF",
+"J+ c #D0CFD0",
+"K+ c #CFCFCF",
+"L+ c #CECECE",
+"M+ c #CECDCE",
+"N+ c #545453",
+"O+ c #525151",
+"P+ c #4F4E4F",
+"Q+ c #4A4B4B",
+"R+ c #4A494A",
+"S+ c #474647",
+"T+ c #454645",
+"U+ c #404140",
+"V+ c #3E3E3F",
+"W+ c #3D3E3E",
+"X+ c #3D3C3C",
+"Y+ c #3C3B3C",
+"Z+ c #3C3B3B",
+"`+ c #3A3939",
+" @ c #383839",
+".@ c #363637",
+"+@ c #353636",
+"@@ c #353535",
+"#@ c #343434",
+"$@ c #333333",
+"%@ c #7B7B7C",
+"&@ c #919190",
+"*@ c #ACACAB",
+"=@ c #C9C9C9",
+"-@ c #CECFCE",
+";@ c #CECECD",
+">@ c #CDCDCD",
+",@ c #CDCDCC",
+"'@ c #CCCCCC",
+")@ c #CCCCCB",
+"!@ c #858585",
+"~@ c #E6E5E6",
+"{@ c #585859",
+"]@ c #565655",
+"^@ c #545354",
+"/@ c #4E4F4E",
+"(@ c #4C4C4D",
+"_@ c #4B4B4A",
+":@ c #484748",
+"<@ c #434344",
+"[@ c #3D3C3D",
+"}@ c #393839",
+"|@ c #373636",
+"1@ c #333334",
+"2@ c #323332",
+"3@ c #323232",
+"4@ c #313131",
+"5@ c #303131",
+"6@ c #383939",
+"7@ c #50504F",
+"8@ c #7E7F7E",
+"9@ c #B6B7B6",
+"0@ c #CBCBCC",
+"a@ c #CBCBCA",
+"b@ c #CACACA",
+"c@ c #CAC9CA",
+"d@ c #575857",
+"e@ c #515150",
+"f@ c #4A4A4B",
+"g@ c #494849",
+"h@ c #474746",
+"i@ c #464547",
+"j@ c #434444",
+"k@ c #424141",
+"l@ c #3D3D3E",
+"m@ c #3B3C3B",
+"n@ c #3B3B3A",
+"o@ c #383737",
+"p@ c #363737",
+"q@ c #363636",
+"r@ c #353635",
+"s@ c #343433",
+"t@ c #333233",
+"u@ c #313132",
+"v@ c #323131",
+"w@ c #303030",
+"x@ c #2F2F2F",
+"y@ c #2F2F2E",
+"z@ c #2E2E2F",
+"A@ c #2D2C2D",
+"B@ c #2C2D2D",
+"C@ c #2C2C2C",
+"D@ c #2C2B2C",
+"E@ c #939393",
+"F@ c #B9BAB9",
+"G@ c #C0C0C0",
+"H@ c #C7C6C7",
+"I@ c #CACAC9",
+"J@ c #C9C9C8",
+"K@ c #C8C8C9",
+"L@ c #C8C8C8",
+"M@ c #585758",
+"N@ c #535152",
+"O@ c #504F50",
+"P@ c #4B4C4A",
+"Q@ c #494948",
+"R@ c #454646",
+"S@ c #434443",
+"T@ c #414241",
+"U@ c #3F3F40",
+"V@ c #3F3E3F",
+"W@ c #3E3E3D",
+"X@ c #3D3C3E",
+"Y@ c #393939",
+"Z@ c #373838",
+"`@ c #363535",
+" # c #343334",
+".# c #313232",
+"+# c #2E2E2E",
+"@# c #2D2D2D",
+"## c #2C2B2B",
+"$# c #2B2B2B",
+"%# c #2A2A2A",
+" c #29292A",
+"*# c #292929",
+"=# c #282828",
+"-# c #383938",
+";# c #5D5E5D",
+"># c #7A797A",
+",# c #919191",
+"'# c #B3B2B3",
+")# c #C8C7C8",
+"!# c #C8C7C7",
+"~# c #C8C8C7",
+"{# c #C7C7C6",
+"]# c #C6C6C7",
+"^# c #C6C6C5",
+"/# c #9D9D9D",
+"(# c #E4E4E5",
+"_# c #4A4B4A",
+":# c #484949",
+"<# c #474748",
+"[# c #444443",
+"}# c #424241",
+"|# c #3C3D3D",
+"1# c #3B3A3B",
+"2# c #383837",
+"3# c #353434",
+"4# c #333434",
+"5# c #313031",
+"6# c #302F2F",
+"7# c #2D2D2E",
+"8# c #2A2B2B",
+"9# c #292A2A",
+"0# c #292828",
+"a# c #282928",
+"b# c #272727",
+"c# c #262626",
+"d# c #242524",
+"e# c #C6C6C6",
+"f# c #C5C5C5",
+"g# c #C5C5C6",
+"h# c #424243",
+"i# c #3B3A3A",
+"j# c #383738",
+"k# c #343534",
+"l# c #343333",
+"m# c #313130",
+"n# c #302F30",
+"o# c #2D2C2C",
+"p# c #2C2C2D",
+"q# c #272626",
+"r# c #252625",
+"s# c #262525",
+"t# c #242424",
+"u# c #232423",
+"v# c #222223",
+"w# c #222222",
+"x# c #212121",
+"y# c #1F1F20",
+"z# c #30302F",
+"A# c #6A696A",
+"B# c #A0A09F",
+"C# c #C5C6C5",
+"D# c #E3E4E4",
+"E# c #555655",
+"F# c #535352",
+"G# c #4E4D4D",
+"H# c #424142",
+"I# c #414040",
+"J# c #3F403F",
+"K# c #3C3C3D",
+"L# c #39393A",
+"M# c #383637",
+"N# c #323233",
+"O# c #323132",
+"P# c #303031",
+"Q# c #2F2E2E",
+"R# c #2E2E2D",
+"S# c #2B2C2C",
+"T# c #2B2A2A",
+"U# c #272627",
+"V# c #252525",
+"W# c #242423",
+"X# c #232222",
+"Y# c #212221",
+"Z# c #202021",
+"`# c #202020",
+" $ c #1F1F1F",
+".$ c #1E1E1F",
+"+$ c #1E1D1D",
+"@$ c #1D1C1D",
+"#$ c #C4C5C5",
+"$$ c #C4C4C4",
+"%$ c #525253",
+"&$ c #515252",
+"*$ c #4E4E4F",
+"=$ c #4D4C4D",
+"-$ c #4B4A4B",
+";$ c #414041",
+">$ c #3C3C3B",
+",$ c #393938",
+"'$ c #363536",
+")$ c #353435",
+"!$ c #333433",
+"~$ c #2B2A2B",
+"{$ c #2A2B2A",
+"]$ c #292829",
+"^$ c #262627",
+"/$ c #252624",
+"($ c #252424",
+"_$ c #222322",
+":$ c #20201F",
+"<$ c #1E1F1E",
+"[$ c #1D1D1D",
+"}$ c #1C1D1D",
+"|$ c #1C1C1C",
+"1$ c #C4C5C4",
+"2$ c #4F4F4E",
+"3$ c #444344",
+"4$ c #3E3F3E",
+"5$ c #3E3D3E",
+"6$ c #393A39",
+"7$ c #393838",
+"8$ c #363736",
+"9$ c #2F302F",
+"0$ c #2D2E2D",
+"a$ c #2E2D2E",
+"b$ c #2D2D2C",
+"c$ c #2B2B2C",
+"d$ c #2B2B2A",
+"e$ c #262526",
+"f$ c #242324",
+"g$ c #232324",
+"h$ c #212222",
+"i$ c #202121",
+"j$ c #1F2020",
+"k$ c #1F1F1E",
+"l$ c #1D1C1C",
+"m$ c #1B1B1C",
+"n$ c #C4C4C3",
+"o$ c #E3E2E3",
+"p$ c #555455",
+"q$ c #515251",
+"r$ c #4B4C4C",
+"s$ c #3D3E3D",
+"t$ c #3B3D3C",
+"u$ c #3A3A3B",
+"v$ c #373837",
+"w$ c #373637",
+"x$ c #2F2E2F",
+"y$ c #232323",
+"z$ c #1E1E1D",
+"A$ c #1B1C1C",
+"B$ c #1C1B1B",
+"C$ c #1B1B1B",
+"D$ c #C3C4C4",
+"E$ c #C3C3C3",
+"F$ c #464546",
+"G$ c #3E3F3F",
+"H$ c #3E3D3D",
+"I$ c #3D3D3C",
+"J$ c #3A3B3B",
+"K$ c #323333",
+"L$ c #313030",
+"M$ c #2F3030",
+"N$ c #2E2F2F",
+"O$ c #2D2D2B",
+"P$ c #2A2B29",
+"Q$ c #292A29",
+"R$ c #282726",
+"S$ c #202120",
+"T$ c #1E1E1E",
+"U$ c #19191A",
+"V$ c #C3C3C4",
+"W$ c #E2E1E1",
+"X$ c #4A4949",
+"Y$ c #484849",
+"Z$ c #3A3B3A",
+"`$ c #373738",
+" % c #373736",
+".% c #252425",
+"+% c #222122",
+"@% c #212122",
+"#% c #1A1B1B",
+"$% c #1B1A1A",
+"%% c #1A1919",
+"&% c #E2E1E2",
+"*% c #E1E0E1",
+"=% c #505051",
+"-% c #49494A",
+";% c #1A1A1A",
+">% c #3A393A",
+",% c #2E2F2E",
+"'% c #282727",
+")% c #242425",
+"!% c #232322",
+"~% c #1E1F1F",
+"{% c #1B1C1B",
+"]% c #1A191A",
+"^% c #191A19",
+"/% c #191918",
+"(% c #C2C2C2",
+"_% c #E0E1E1",
+":% c #E1E1E0",
+"<% c #4B4B4C",
+"[% c #454445",
+"}% c #161515",
+"|% c #8B8B8B",
+"1% c #2C2C2B",
+"2% c #282827",
+"3% c #272728",
+"4% c #262727",
+"5% c #1F1E1F",
+"6% c #1A1A19",
+"7% c #181818",
+"8% c #C1C1C2",
+"9% c #E1E0E0",
+"0% c #464746",
+"a% c #111111",
+"b% c #7C7C7C",
+"c% c #BBBBBB",
+"d% c #969697",
+"e% c #5F5F5C",
+"f% c #33332F",
+"g% c #28292A",
+"h% c #262726",
+"i% c #201F20",
+"j% c #1F201F",
+"k% c #191919",
+"l% c #171717",
+"m% c #4C4C4B",
+"n% c #444445",
+"o% c #444343",
+"p% c #1A1717",
+"q% c #211515",
+"r% c #2D2B2B",
+"s% c #999999",
+"t% c #B3B3B5",
+"u% c #8B8BB2",
+"v% c #6F6F89",
+"w% c #4A4A4F",
+"x% c #2A2929",
+"y% c #2B2C2B",
+"z% c #2A292A",
+"A% c #232424",
+"B% c #212120",
+"C% c #181718",
+"D% c #171818",
+"E% c #171716",
+"F% c #C1C1C1",
+"G% c #C0C1C1",
+"H% c #DFE0E0",
+"I% c #484948",
+"J% c #422121",
+"K% c #552D2D",
+"L% c #363232",
+"M% c #A0A0A0",
+"N% c #646464",
+"O% c #ABABAE",
+"P% c #7575C7",
+"Q% c #5C5CD5",
+"R% c #7878BD",
+"S% c #7B7B8E",
+"T% c #585855",
+"U% c #30302E",
+"V% c #2A2A29",
+"W% c #212020",
+"X% c #201E1F",
+"Y% c #1E1D1E",
+"Z% c #1C1C1D",
+"`% c #1A1B1A",
+" & c #191A1A",
+".& c #171616",
+"+& c #161616",
+"@& c #C0C0C1",
+"#& c #414242",
+"$& c #1F1C1C",
+"%& c #542424",
+"&& c #4C2625",
+"*& c #585756",
+"=& c #A8A8A8",
+"-& c #767677",
+";& c #9D9D9E",
+">& c #8A8AAD",
+",& c #5A5AC4",
+"'& c #3838D7",
+")& c #3434D9",
+"!& c #4848BD",
+"~& c #535372",
+"{& c #878888",
+"]& c #A4A4A4",
+"^& c #A7A6A6",
+"/& c #B0B0B0",
+"(& c #B1B1B1",
+"_& c #A1A1A1",
+":& c #808080",
+"<& c #151515",
+"[& c #242525",
+"}& c #1D1E1E",
+"|& c #1A1A1B",
+"1& c #191819",
+"2& c #181817",
+"3& c #161717",
+"4& c #151516",
+"5& c #C1C0C0",
+"6& c #DFDEDE",
+"7& c #5B2020",
+"8& c #391A19",
+"9& c #A4A4A5",
+"0& c #878687",
+"a& c #8E8E8E",
+"b& c #9B9B98",
+"c& c #999994",
+"d& c #888898",
+"e& c #6C6BA8",
+"f& c #4F4FBD",
+"g& c #50508B",
+"h& c #CECDCD",
+"i& c #6A6A6A",
+"j& c #242323",
+"k& c #222121",
+"l& c #1F1E1E",
+"m& c #1C1D1C",
+"n& c #151514",
+"o& c #BFC0BF",
+"p& c #DFDFDE",
+"q& c #434445",
+"r& c #3F3E40",
+"s& c #1B1212",
+"t& c #611717",
+"u& c #301414",
+"v& c #797878",
+"w& c #9C9C9D",
+"x& c #888888",
+"y& c #8A8A89",
+"z& c #868688",
+"A& c #7C7C8F",
+"B& c #45455C",
+"C& c #B8B8B8",
+"D& c #C5C4C4",
+"E& c #AAA9A9",
+"F& c #252523",
+"G& c #222323",
+"H& c #171817",
+"I& c #161516",
+"J& c #141514",
+"K& c #141313",
+"L& c #C0BFBF",
+"M& c #4D4E4E",
+"N& c #464645",
+"O& c #1B0F0F",
+"P& c #570D0D",
+"Q& c #270D0D",
+"R& c #706F6F",
+"S& c #838383",
+"T& c #757474",
+"U& c #878787",
+"V& c #6F6F6F",
+"W& c #5C5C5A",
+"X& c #353533",
+"Y& c #656565",
+"Z& c #BCBCBC",
+"`& c #BFBFBF",
+" * c #C1C2C1",
+".* c #696969",
+"+* c #1D1D1E",
+"@* c #191818",
+"#* c #131313",
+"$* c #DDDEDD",
+"%* c #110F0F",
+"&* c #220B0B",
+"** c #201B1B",
+"=* c #7D7D7C",
+"-* c #727272",
+";* c #898989",
+">* c #BBBBBA",
+",* c #BCBCBB",
+"'* c #BDBDBD",
+")* c #676868",
+"!* c #7A7A7A",
+"~* c #1D1D1C",
+"{* c #181918",
+"]* c #141414",
+"^* c #131314",
+"/* c #131312",
+"(* c #BEBFBF",
+"_* c #454546",
+":* c #3B3B3C",
+"<* c #181919",
+"[* c #818181",
+"}* c #656465",
+"|* c #888787",
+"1* c #9B9B9B",
+"2* c #ADADAD",
+"3* c #B4B4B4",
+"4* c #B5B5B5",
+"5* c #B5B5B4",
+"6* c #B6B6B5",
+"7* c #B6B6B7",
+"8* c #B7B7B7",
+"9* c #B7B8B8",
+"0* c #767676",
+"a* c #121213",
+"b* c #212021",
+"c* c #141413",
+"d* c #111212",
+"e* c #9A9A9A",
+"f* c #515152",
+"g* c #616162",
+"h* c #949495",
+"i* c #A6A6A6",
+"j* c #AFAFAF",
+"k* c #ACADAD",
+"l* c #B2B2B2",
+"m* c #B0B0AF",
+"n* c #AFAFB0",
+"o* c #B3B3B3",
+"p* c #B5B4B4",
+"q* c #1C1B1C",
+"r* c #131414",
+"s* c #121313",
+"t* c #121212",
+"u* c #BEBDBD",
+"v* c #DCDCDD",
+"w* c #6E6E6E",
+"x* c #A5A5A5",
+"y* c #A9A9A9",
+"z* c #ABABAA",
+"A* c #AAAAA9",
+"B* c #ABA9A9",
+"C* c #ABAAAB",
+"D* c #ABABAC",
+"E* c #ACACAC",
+"F* c #666766",
+"G* c #141314",
+"H* c #1D1E1D",
+"I* c #1B1A1B",
+"J* c #131213",
+"K* c #101111",
+"L* c #586362",
+"M* c #5D6F74",
+"N* c #596767",
+"O* c #555A58",
+"P* c #A2A2A3",
+"Q* c #A2A2A2",
+"R* c #A3A3A3",
+"S* c #A5A5A3",
+"T* c #A6A7A7",
+"U* c #A5A4A5",
+"V* c #A8A7A7",
+"W* c #A9A8A9",
+"X* c #9C9C9C",
+"Y* c #424342",
+"Z* c #6C6D6C",
+"`* c #101010",
+" = c #151616",
+".= c #131412",
+"+= c #101110",
+"@= c #0F0F0F",
+"#= c #BDBCBD",
+"$= c #DBDCDC",
+"%= c #7FA3AE",
+"&= c #79A5EC",
+"*= c #5F80EB",
+"== c #485FD4",
+"-= c #4758B4",
+";= c #516392",
+">= c #586874",
+",= c #55605F",
+"'= c #393A3A",
+")= c #2D2E2F",
+"!= c #9E9E9E",
+"~= c #979897",
+"{= c #9A9B9B",
+"]= c #929493",
+"^= c #8C8D8D",
+"/= c #979797",
+"(= c #989999",
+"_= c #969898",
+":= c #979898",
+"<= c #9B9C9C",
+"[= c #A2A1A2",
+"}= c #737272",
+"|= c #A6A5A6",
+"1= c #616161",
+"2= c #1B1B1A",
+"3= c #181717",
+"4= c #161615",
+"5= c #151414",
+"6= c #121112",
+"7= c #111110",
+"8= c #7A9DAE",
+"9= c #597AF5",
+"0= c #5373F9",
+"a= c #668CFC",
+"b= c #5D80FC",
+"c= c #5271FB",
+"d= c #5576F5",
+"e= c #739AE6",
+"f= c #7495A5",
+"g= c #607578",
+"h= c #54646B",
+"i= c #58686B",
+"j= c #505A59",
+"k= c #484B4B",
+"l= c #323432",
+"m= c #919292",
+"n= c #959494",
+"o= c #878686",
+"p= c #7A7979",
+"q= c #7C7777",
+"r= c #807778",
+"s= c #776F6F",
+"t= c #706565",
+"u= c #7B6C6B",
+"v= c #847171",
+"w= c #7C6B6B",
+"x= c #746464",
+"y= c #736262",
+"z= c #7A6969",
+"A= c #807070",
+"B= c #807676",
+"C= c #807C7C",
+"D= c #949696",
+"E= c #9E9F9F",
+"F= c #757575",
+"G= c #171617",
+"H= c #151615",
+"I= c #141415",
+"J= c #121111",
+"K= c #0F1010",
+"L= c #0F0F10",
+"M= c #0E0F0E",
+"N= c #BDBDBC",
+"O= c #5B6766",
+"P= c #799CA3",
+"Q= c #76979D",
+"R= c #6F8D9F",
+"S= c #97CEEF",
+"T= c #76A2FB",
+"U= c #4C69FC",
+"V= c #1B27FD",
+"W= c #3549F4",
+"X= c #5979E3",
+"Y= c #698DE4",
+"Z= c #77A2F2",
+"`= c #688EE1",
+" - c #5C78C4",
+".- c #576FA2",
+"+- c #55697C",
+"@- c #4D5C5F",
+"#- c #333E39",
+"$- c #3D3B37",
+"%- c #6F6766",
+"&- c #786868",
+"*- c #7D6666",
+"=- c #947676",
+"-- c #9C7979",
+";- c #9D7676",
+">- c #AB7E7E",
+",- c #BA8888",
+"'- c #B88585",
+")- c #B17E7E",
+"!- c #B57E7E",
+"~- c #BD8383",
+"{- c #BD8181",
+"]- c #B07777",
+"^- c #A06A6A",
+"/- c #956161",
+"(- c #8A5B5B",
+"_- c #7D5858",
+":- c #755F5F",
+"<- c #807878",
+"[- c #7D7D7D",
+"}- c #797979",
+"|- c #131212",
+"1- c #0F0F0E",
+"2- c #0D0E0E",
+"3- c #BCBBBC",
+"4- c #DBDADB",
+"5- c #424545",
+"6- c #4F5756",
+"7- c #9BD0D5",
+"8- c #6D96FC",
+"9- c #435DFC",
+"0- c #3E55FC",
+"a- c #5270FC",
+"b- c #5878F8",
+"c- c #4862F2",
+"d- c #435DF8",
+"e- c #4D6BF8",
+"f- c #597BFC",
+"g- c #5B7DFB",
+"h- c #5E81FB",
+"i- c #678DEF",
+"j- c #7198D3",
+"k- c #354658",
+"l- c #5B4442",
+"m- c #B6817F",
+"n- c #C68B8B",
+"o- c #C38787",
+"p- c #C78888",
+"q- c #CE8C8C",
+"r- c #CA8686",
+"s- c #C68181",
+"t- c #C78080",
+"u- c #C87F7F",
+"v- c #C57B7B",
+"w- c #C37777",
+"x- c #C07373",
+"y- c #C17271",
+"z- c #C17070",
+"A- c #BF6B6B",
+"B- c #BB6767",
+"C- c #B15F5F",
+"D- c #9E5453",
+"E- c #744343",
+"F- c #302929",
+"G- c #161617",
+"H- c #141515",
+"I- c #131413",
+"J- c #100F10",
+"K- c #0F0E0E",
+"L- c #0E0E0E",
+"M- c #0D0D0D",
+"N- c #BBBCBB",
+"O- c #DAD9DA",
+"P- c #40403F",
+"Q- c #739297",
+"R- c #78A2E4",
+"S- c #7AA6E2",
+"T- c #86B1C5",
+"U- c #6A879E",
+"V- c #6A879A",
+"W- c #708F95",
+"X- c #7C9FA0",
+"Y- c #5F7788",
+"Z- c #576C96",
+"`- c #5974B8",
+" ; c #5774D8",
+".; c #4B67F1",
+"+; c #4661FD",
+"@; c #3549D3",
+"#; c #2F236D",
+"$; c #A86F81",
+"%; c #C17777",
+"&; c #C27472",
+"*; c #C17272",
+"=; c #BE6F6F",
+"-; c #BC6C6C",
+";; c #BC6969",
+">; c #BA6766",
+",; c #B96363",
+"'; c #B86060",
+"); c #B75D5D",
+"!; c #B55B5B",
+"~; c #B35757",
+"{; c #B25554",
+"]; c #B15251",
+"^; c #B04F4F",
+"/; c #AF4C4C",
+"(; c #AF4A49",
+"_; c #763030",
+":; c #291313",
+"<; c #0C0C0C",
+"[; c #BBBBBC",
+"}; c #434241",
+"|; c #49504F",
+"1; c #697F7E",
+"2; c #607270",
+"3; c #464C4B",
+"4; c #454748",
+"5; c #3B3D3D",
+"6; c #454848",
+"7; c #4D5353",
+"8; c #637D7F",
+"9; c #7BA3C0",
+"0; c #688EE9",
+"a; c #364CD9",
+"b; c #564EC6",
+"c; c #8F639C",
+"d; c #B06D77",
+"e; c #B75A55",
+"f; c #B55753",
+"g; c #B25352",
+"h; c #B15050",
+"i; c #B04E4D",
+"j; c #AE4A4A",
+"k; c #AD4747",
+"l; c #AC4444",
+"m; c #AA4242",
+"n; c #A93F3F",
+"o; c #A83C3C",
+"p; c #A63939",
+"q; c #A53636",
+"r; c #A43333",
+"s; c #8F2C2C",
+"t; c #451616",
+"u; c #541A1A",
+"v; c #663B3B",
+"w; c #848383",
+"x; c #1C1A1C",
+"y; c #0E0F0F",
+"z; c #0E0D0D",
+"A; c #0D0D0C",
+"B; c #BBBABB",
+"C; c #BABBBA",
+"D; c #D9DAD9",
+"E; c #3E4645",
+"F; c #5A6F74",
+"G; c #7094BE",
+"H; c #5A7EF1",
+"I; c #3F52F7",
+"J; c #4A49DD",
+"K; c #6E3D9B",
+"L; c #914B73",
+"M; c #A13B45",
+"N; c #A73735",
+"O; c #A6332F",
+"P; c #A42F2C",
+"Q; c #A22C2B",
+"R; c #A02B2C",
+"S; c #9F2929",
+"T; c #9E2626",
+"U; c #9D2323",
+"V; c #9B2020",
+"W; c #9A1E1D",
+"X; c #951919",
+"Y; c #581010",
+"Z; c #3B0909",
+"`; c #7E1C1C",
+" > c #671B1B",
+".> c #2F2929",
+"+> c #101011",
+"@> c #0B0B0B",
+"#> c #D8D9D8",
+"$> c #3B3C3C",
+"%> c #353534",
+"&> c #353334",
+"*> c #454949",
+"=> c #6B8382",
+"-> c #779FB5",
+";> c #76A2EF",
+">> c #5B72EE",
+",> c #555CDE",
+"'> c #623AA0",
+")> c #762969",
+"!> c #872F51",
+"~> c #922C3C",
+"{> c #952129",
+"]> c #941619",
+"^> c #950D0B",
+"/> c #960B07",
+"(> c #950B06",
+"_> c #930907",
+":> c #8F0707",
+"<> c #680504",
+"[> c #350200",
+"}> c #4D0301",
+"|> c #680D0E",
+"1> c #391213",
+"2> c #252E29",
+"3> c #242B25",
+"4> c #252A26",
+"5> c #151415",
+"6> c #121312",
+"7> c #111211",
+"8> c #10100F",
+"9> c #0E0E0F",
+"0> c #0D0C0D",
+"a> c #0C0C0B",
+"b> c #0A0A0B",
+"c> c #B9BABA",
+"d> c #2F2F30",
+"e> c #313333",
+"f> c #51656B",
+"g> c #587293",
+"h> c #5574C3",
+"i> c #5170F4",
+"j> c #4658F3",
+"k> c #4A4BDB",
+"l> c #5943B8",
+"m> c #6B3E8F",
+"n> c #793468",
+"o> c #7F264C",
+"p> c #7E1435",
+"q> c #7E0320",
+"r> c #82051B",
+"s> c #70030D",
+"t> c #2B0003",
+"u> c #170002",
+"v> c #3A0B12",
+"w> c #35272C",
+"x> c #3F5785",
+"y> c #455FC7",
+"z> c #4961B0",
+"A> c #495E89",
+"B> c #445664",
+"C> c #3C4A49",
+"D> c #0A0B0B",
+"E> c #0A0A09",
+"F> c #BAB9BA",
+"G> c #2D2E2E",
+"H> c #2E3030",
+"I> c #323231",
+"J> c #464C4C",
+"K> c #6B8887",
+"L> c #6C8FA1",
+"M> c #6183BB",
+"N> c #5071D2",
+"O> c #4463E8",
+"P> c #3E55F8",
+"Q> c #414EED",
+"R> c #4B45CF",
+"S> c #5131AA",
+"T> c #502EA3",
+"U> c #2E1FA3",
+"V> c #09089D",
+"W> c #0A0B8D",
+"X> c #202788",
+"Y> c #5476B4",
+"Z> c #7BAAF4",
+"`> c #5879FB",
+" , c #5D7FFD",
+"., c #5C7FFB",
+"+, c #658AF7",
+"@, c #749FE8",
+"#, c #6383A7",
+"$, c #4B616A",
+"%, c #394443",
+"&, c #1C1F1F",
+"*, c #100F0F",
+"=, c #0B0B0C",
+"-, c #0B0B0A",
+";, c #0A0A0A",
+">, c #090909",
+",, c #B9B9B9",
+"', c #333332",
+"), c #303130",
+"!, c #2E2D2D",
+"~, c #2A2A2B",
+"{, c #2B2D2D",
+"], c #363F40",
+"^, c #445358",
+"/, c #526873",
+"(, c #5C778D",
+"_, c #607FA4",
+":, c #5D7FBE",
+"<, c #597ED6",
+"[, c #577BE9",
+"}, c #3E56B9",
+"|, c #5E81D3",
+"1, c #5574D4",
+"2, c #425AD8",
+"3, c #425BF1",
+"4, c #3C54FB",
+"5, c #3B52FC",
+"6, c #4660FC",
+"7, c #5574FC",
+"8, c #5473FC",
+"9, c #455FFC",
+"0, c #4059F5",
+"a, c #516EE2",
+"b, c #6A91CA",
+"c, c #587480",
+"d, c #2E3636",
+"e, c #0D0C0C",
+"f, c #0C0B0C",
+"g, c #0A090A",
+"h, c #B8B9B8",
+"i, c #D8D7D7",
+"j, c #D7D7D8",
+"k, c #333232",
+"l, c #282B2C",
+"m, c #363F41",
+"n, c #4B5B5B",
+"o, c #5B6F6D",
+"p, c #3C4747",
+"q, c #404D54",
+"r, c #465861",
+"s, c #495C67",
+"t, c #577285",
+"u, c #5E7EA0",
+"v, c #5B7ABA",
+"w, c #6084ED",
+"x, c #5677FB",
+"y, c #6388FC",
+"z, c #82B3FB",
+"A, c #86B8FB",
+"B, c #5575FB",
+"C, c #354AFC",
+"D, c #4F6EF8",
+"E, c #719BD3",
+"F, c #62838E",
+"G, c #4B6466",
+"H, c #32403F",
+"I, c #171919",
+"J, c #0A0A0C",
+"K, c #080908",
+"L, c #070708",
+"M, c #B9B8B9",
+"N, c #B9B9B8",
+"O, c #383937",
+"P, c #2C2D2C",
+"Q, c #252626",
+"R, c #272C30",
+"S, c #4E6676",
+"T, c #5C7CB0",
+"U, c #5A7CEB",
+"V, c #4159FC",
+"W, c #435CFC",
+"X, c #374CFC",
+"Y, c #3347FC",
+"Z, c #1C27FD",
+"`, c #222FFD",
+" ' c #4864F7",
+".' c #5C7EE9",
+"+' c #7098D4",
+"@' c #5A798B",
+"#' c #394948",
+"$' c #252A2A",
+"%' c #0B0A0B",
+"&' c #0B0A09",
+"*' c #090808",
+"=' c #070808",
+"-' c #070707",
+";' c #B8B7B8",
+">' c #D6D7D7",
+",' c #D7D6D7",
+"'' c #343435",
+")' c #2D2D2F",
+"!' c #282929",
+"~' c #2C2F2E",
+"{' c #576E6D",
+"]' c #6B90A6",
+"^' c #658AE8",
+"/' c #3245FD",
+"(' c #3F56FC",
+"_' c #84B6FB",
+":' c #76A1DB",
+"<' c #5370C0",
+"[' c #4A65D9",
+"}' c #455FF7",
+"|' c #4661FA",
+"1' c #5D7FE7",
+"2' c #6D94B7",
+"3' c #3C4D4D",
+"4' c #0B0C0C",
+"5' c #080809",
+"6' c #060606",
+"7' c #B7B8B7",
+"8' c #D7D6D6",
+"9' c #3F3F3E",
+"0' c #363635",
+"a' c #282829",
+"b' c #1A1C1C",
+"c' c #495F68",
+"d' c #6B92CC",
+"e' c #5474FC",
+"f' c #75A0FB",
+"g' c #769FA3",
+"h' c #283137",
+"i' c #364651",
+"j' c #5B7A97",
+"k' c #6C93DA",
+"l' c #5979FB",
+"m' c #4D6AFC",
+"n' c #6283CF",
+"o' c #4D676B",
+"p' c #0D0D0E",
+"q' c #0A0909",
+"r' c #080808",
+"s' c #070706",
+"t' c #060605",
+"u' c #D6D5D6",
+"v' c #606061",
+"w' c #272726",
+"x' c #232223",
+"y' c #212220",
+"z' c #1C1C1B",
+"A' c #3E4C4A",
+"B' c #77A2C3",
+"C' c #82B1EC",
+"D' c #6A8F90",
+"E' c #2B3332",
+"F' c #55727E",
+"G' c #6D95E0",
+"H' c #658AFB",
+"I' c #8EC3D8",
+"J' c #283432",
+"K' c #050505",
+"L' c #B8B7B7",
+"M' c #D6D6D5",
+"N' c #C5C5C4",
+"O' c #848484",
+"P' c #252526",
+"Q' c #181819",
+"R' c #353E3D",
+"S' c #4F6664",
+"T' c #313D3D",
+"U' c #111010",
+"V' c #3F5255",
+"W' c #53718E",
+"X' c #688C93",
+"Y' c #1D2425",
+"Z' c #080707",
+"`' c #050606",
+" ) c #050406",
+".) c #040404",
+"+) c #B7B7B6",
+"@) c #D3D3D2",
+"#) c #292928",
+"$) c #111312",
+"%) c #0B0A0A",
+"&) c #080807",
+"*) c #080607",
+"=) c #060505",
+"-) c #050504",
+";) c #D1D1D2",
+">) c #858484",
+",) c #272827",
+"') c #0F100F",
+")) c #0E0D0E",
+"!) c #0C0D0C",
+"~) c #080A09",
+"{) c #090809",
+"]) c #060707",
+"^) c #060506",
+"/) c #040505",
+"() c #030303",
+"_) c #B6B5B5",
+":) c #CFCECF",
+"<) c #CFCECE",
+"[) c #BDBEBE",
+"}) c #0E0D0F",
+"|) c #0C0D0D",
+"1) c #0C0B0B",
+"2) c #0A0B0A",
+"3) c #090A0A",
+"4) c #070807",
+"5) c #050506",
+"6) c #040303",
+"7) c #030403",
+"8) c #020202",
+"9) c #CFCFCE",
+"0) c #CDCCCC",
+"a) c #828282",
+"b) c #252524",
+"c) c #121011",
+"d) c #0C0C0D",
+"e) c #060706",
+"f) c #020203",
+"g) c #010202",
+"h) c #B4B4B5",
+"i) c #555554",
+"j) c #CCCCCD",
+"k) c #CBCCCB",
+"l) c #CACBCA",
+"m) c #0E0E0D",
+"n) c #030404",
+"o) c #010101",
+"p) c #B5B4B5",
+"q) c #B4B5B4",
+"r) c #C9CACA",
+"s) c #C8C9C9",
+"t) c #C9C8C9",
+"u) c #777877",
+"v) c #121311",
+"w) c #050405",
+"x) c #040403",
+"y) c #020201",
+"z) c #000000",
+"A) c #4F504E",
+"B) c #C9C8C8",
+"C) c #C7C7C8",
+"D) c #C6C7C6",
+"E) c #60605F",
+"F) c #050404",
+"G) c #000001",
+"H) c #B3B4B4",
+"I) c #E9CFC6",
+"J) c #C7C6C6",
+"K) c #C5C6C6",
+"L) c #C6C5C6",
+"M) c #B2B3B3",
+"N) c #949494",
+"O) c #7E7E7E",
+"P) c #171718",
+"Q) c #0D0E0D",
+"R) c #09090A",
+"S) c #080909",
+"T) c #070607",
+"U) c #060504",
+"V) c #020303",
+"W) c #B3B3B4",
+"X) c #EDD0C2",
+"Y) c #F0CFBA",
+"Z) c #666666",
+"`) c #9F9F9F",
+" ! c #C4C3C4",
+".! c #C2C2C3",
+"+! c #C0C0BF",
+"@! c #BCBBBB",
+"#! c #909191",
+"$! c #141516",
+"%! c #121211",
+"&! c #0F0E0F",
+"*! c #090908",
+"=! c #070606",
+"-! c #050605",
+";! c #020101",
+">! c #B2B3B2",
+",! c #B6ACA9",
+"'! c #F4D0B5",
+")! c #F5D0B4",
+"!! c #4D4E4D",
+"~! c #929292",
+"{! c #C2C3C2",
+"]! c #C1C2C2",
+"^! c #C2C1C2",
+"/! c #0B0C0B",
+"(! c #030202",
+"_! c #000100",
+":! c #B3B2B2",
+"~ c #A3A2A3",
+",~ c #ACACAD",
+"'~ c #A4A4A3",
+")~ c #A1A0A0",
+"!~ c #9E9D9D",
+"~~ c #CCBBB5",
+"{~ c #FCC694",
+"]~ c #FFBA77",
+"^~ c #FFBF81",
+"/~ c #F3CAAE",
+"(~ c #F7E1D2",
+"_~ c #FCE3CD",
+":~ c #AEAEAF",
+"<~ c #8F8F8F",
+"[~ c #A9A9AA",
+"}~ c #A3A2A2",
+"|~ c #AEAFAF",
+"1~ c #B3B4B3",
+"2~ c #D4BEB3",
+"3~ c #FDC28B",
+"4~ c #FFB873",
+"5~ c #FFBB79",
+"6~ c #F3C7A1",
+"7~ c #A79894",
+"8~ c #FADABF",
+"9~ c #FDDBBA",
+"0~ c #BABAB9",
+"a~ c #B2B2B3",
+"b~ c #B1B3B2",
+"c~ c #B1B2B1",
+"d~ c #ADACAB",
+"e~ c #AAA9AA",
+"f~ c #888988",
+"g~ c #9E9D9E",
+"h~ c #A0A0A1",
+"i~ c #A4A3A3",
+"j~ c #A7A8A8",
+"k~ c #B4B4B3",
+"l~ c #B1B2B2",
+"m~ c #ADADAE",
+"n~ c #969595",
+"o~ c #828080",
+"p~ c #D7BEB2",
+"q~ c #FDC189",
+"r~ c #FFB771",
+"s~ c #FFB66F",
+"t~ c #FDC38C",
+"u~ c #BDA699",
+"v~ c #5C5959",
+"w~ c #F3DED4",
+"x~ c #FDC896",
+"y~ c #FCCCA1",
+"z~ c #F3E5E0",
+"A~ c #7D7C7C",
+"B~ c #989898",
+"C~ c #AEADAD",
+"D~ c #ADACAD",
+"E~ c #ACABAC",
+"F~ c #9C9D9D",
+"G~ c #7F7F7E",
+"H~ c #565756",
+"I~ c #989998",
+"J~ c #A0A1A0",
+"K~ c #A4A3A4",
+"L~ c #B0B1B1",
+"M~ c #B1B0B1",
+"N~ c #D3BDB4",
+"O~ c #FFB46B",
+"P~ c #FFB975",
+"Q~ c #EDBF98",
+"R~ c #90847F",
+"S~ c #E8D6D0",
+"T~ c #FBD3AE",
+"U~ c #FFB063",
+"V~ c #FCCDA3",
+"W~ c #B6B7B7",
+"X~ c #787877",
+"Y~ c #757676",
+"Z~ c #747474",
+"`~ c #8C8D8C",
+" { c #9D9C9D",
+".{ c #A8A8A7",
+"+{ c #545353",
+"@{ c #989797",
+"#{ c #9F9F9E",
+"${ c #A0A1A1",
+"%{ c #8C8C8B",
+"&{ c #706F70",
+"*{ c #B1B1B0",
+"={ c #CDBAB4",
+"-{ c #FDC48E",
+";{ c #FFB165",
+">{ c #EBBF9C",
+",{ c #908481",
+"'{ c #5A5757",
+"){ c #5E5C5B",
+"!{ c #A19793",
+"~{ c #F7D2B0",
+"{{ c #FFA247",
+"]{ c #FBD5B2",
+"^{ c #B4B5B5",
+"/{ c #777677",
+"({ c #727172",
+"_{ c #6B6C6C",
+":{ c #80807F",
+"<{ c #919090",
+"[{ c #9E9E9F",
+"}{ c #A4A5A4",
+"|{ c #A6A7A6",
+"1{ c #898888",
+"2{ c #6E6E6D",
+"3{ c #5F5F60",
+"4{ c #797A7A",
+"5{ c #7E7F7F",
+"6{ c #777777",
+"7{ c #616060",
+"8{ c #635D5D",
+"9{ c #BFA191",
+"0{ c #FDBF84",
+"a{ c #FFB267",
+"b{ c #FFAE5F",
+"c{ c #F0C096",
+"d{ c #C4ADA0",
+"e{ c #8D827F",
+"f{ c #6B6665",
+"g{ c #5D5A5A",
+"h{ c #6B6767",
+"i{ c #8C8482",
+"j{ c #C3B1A7",
+"k{ c #F0C6A3",
+"l{ c #FF9731",
+"m{ c #EBD3C1",
+"n{ c #767777",
+"o{ c #767675",
+"p{ c #717171",
+"q{ c #6E6E6F",
+"r{ c #6C6D6D",
+"s{ c #6A6969",
+"t{ c #676767",
+"u{ c #656665",
+"v{ c #676766",
+"w{ c #727373",
+"x{ c #5C5C5B",
+"y{ c #6A6A6B",
+"z{ c #7B7A7B",
+"A{ c #626262",
+"B{ c #5F5A59",
+"C{ c #B59A8D",
+"D{ c #FAC089",
+"E{ c #FFB369",
+"F{ c #FFAF61",
+"G{ c #FFAD5D",
+"H{ c #FFAB59",
+"I{ c #FDBE82",
+"J{ c #F1C29A",
+"K{ c #E1C0A6",
+"L{ c #D7BAA5",
+"M{ c #D5BAA6",
+"N{ c #E1C2A9",
+"O{ c #F2C69F",
+"P{ c #FDBD80",
+"Q{ c #FFA853",
+"R{ c #FF9B39",
+"S{ c #FCC590",
+"T{ c #EFDDD4",
+"U{ c #B1B1B2",
+"V{ c #777676",
+"W{ c #747575",
+"X{ c #717271",
+"Y{ c #6D6E6D",
+"Z{ c #6B6B6A",
+"`{ c #686767",
+" ] c #646363",
+".] c #5D5D5C",
+"+] c #777776",
+"@] c #878788",
+"#] c #969596",
+"$] c #9A9898",
+"%] c #9A9A99",
+"&] c #646463",
+"*] c #7B7C7C",
+"=] c #7B7C7B",
+"-] c #707170",
+";] c #575756",
+">] c #575353",
+",] c #AD9387",
+"'] c #FABF87",
+")] c #FFAC5B",
+"!] c #FFAA57",
+"~] c #FFA54D",
+"{] c #FF9C3B",
+"]] c #FF9833",
+"^] c #FDAC5F",
+"/] c #E5CAB5",
+"(] c #B0B0B1",
+"_] c #ABACAB",
+":] c #787777",
+"<] c #717170",
+"[] c #696869",
+"}] c #666565",
+"|] c #646465",
+"1] c #636363",
+"2] c #605F5F",
+"3] c #575758",
+"4] c #8B8A8B",
+"5] c #949393",
+"6] c #A98F84",
+"7] c #FFA64F",
+"8] c #FFA44B",
+"9] c #FFA043",
+"0] c #FF9F41",
+"a] c #FF9D3D",
+"b] c #FF9935",
+"c] c #FFA145",
+"d] c #FDCA9A",
+"e] c #B8AFAA",
+"f] c #A5A4A4",
+"g] c #969797",
+"h] c #787778",
+"i] c #636364",
+"j] c #606161",
+"k] c #5D5C5C",
+"l] c #585958",
+"m] c #5C5C5D",
+"n] c #868787",
+"o] c #7F807F",
+"p] c #5A5555",
+"q] c #A99085",
+"r] c #FFB56D",
+"s] c #FFA751",
+"t] c #FFA349",
+"u] c #FF9E3F",
+"v] c #FF9A37",
+"w] c #FFC791",
+"x] c #BDB0AA",
+"y] c #ADADAC",
+"z] c #A8A9A8",
+"A] c #9A9999",
+"B] c #6A6A69",
+"C] c #626261",
+"D] c #5F605F",
+"E] c #818081",
+"F] c #868685",
+"G] c #595453",
+"H] c #A98F83",
+"I] c #F7BD87",
+"J] c #FFA955",
+"K] c #F2CAA7",
+"L] c #767474",
+"M] c #7C7B7B",
+"N] c #939292",
+"O] c #8A8B8A",
+"P] c #676768",
+"Q] c #848485",
+"R] c #818281",
+"S] c #7F7E7E",
+"T] c #7B7B7A",
+"U] c #545050",
+"V] c #A48A7F",
+"W] c #F5BB86",
+"X] c #FBBF87",
+"Y] c #F2C6A1",
+"Z] c #D6BEAF",
+"`] c #A29996",
+" ^ c #626263",
+".^ c #A5A6A6",
+"+^ c #9F9FA0",
+"@^ c #8B8C8B",
+"#^ c #818180",
+"$^ c #7E7D7E",
+"%^ c #7C7C7D",
+"&^ c #787978",
+"*^ c #636463",
+"=^ c #504D4D",
+"-^ c #9F867D",
+";^ c #F7BC85",
+">^ c #FDC086",
+",^ c #D3B5A2",
+"'^ c #D5BAA7",
+")^ c #DCBCA5",
+"!^ c #DDC0A9",
+"~^ c #D0B8A9",
+"{^ c #BBACA4",
+"]^ c #99918F",
+"^^ c #777474",
+"/^ c #616160",
+"(^ c #626161",
+"_^ c #7C7D7C",
+":^ c #9B9A9A",
+"<^ c #666667",
+"[^ c #818182",
+"}^ c #7D7E7D",
+"|^ c #757475",
+"1^ c #514E4E",
+"2^ c #9E857C",
+"3^ c #FFBC7B",
+"4^ c #FFC185",
+"5^ c #B7A39A",
+"6^ c #6A6666",
+"7^ c #666464",
+"8^ c #6B6868",
+"9^ c #6D6969",
+"0^ c #666564",
+"a^ c #5F6060",
+"b^ c #707171",
+"c^ c #807F80",
+"d^ c #8E8E8F",
+"e^ c #979696",
+"f^ c #959594",
+"g^ c #686869",
+"h^ c #7F8080",
+"i^ c #7E7E7F",
+"j^ c #7C7D7D",
+"k^ c #737374",
+"l^ c #9D847A",
+"m^ c #F7BB83",
+"n^ c #FFC083",
+"o^ c #BDA598",
+"p^ c #6C6767",
+"q^ c #535453",
+"r^ c #5B595B",
+"s^ c #5F5F5E",
+"t^ c #747473",
+"u^ c #838384",
+"v^ c #908F90",
+"w^ c #919192",
+"x^ c #7D7C7D",
+"y^ c #818282",
+"z^ c #808081",
+"A^ c #7F7F80",
+"B^ c #524E4E",
+"C^ c #9B8279",
+"D^ c #F1B683",
+"E^ c #BFA597",
+"F^ c #6E6868",
+"G^ c #5B5A5C",
+"H^ c #5C5D5D",
+"I^ c #828181",
+"J^ c #5A595A",
+"K^ c #676667",
+"L^ c #8A8A8A",
+"M^ c #7A7A7B",
+"N^ c #4E4B4B",
+"O^ c #987F76",
+"P^ c #F0B682",
+"Q^ c #FFBD7D",
+"R^ c #C0A596",
+"S^ c #6D6867",
+"T^ c #9E9E9D",
+"U^ c #838282",
+"V^ c #767576",
+"W^ c #868585",
+"X^ c #797A79",
+"Y^ c #737273",
+"Z^ c #4A4747",
+"`^ c #967D73",
+" / c #F4B77E",
+"./ c #FDBB7C",
+"+/ c #C0A494",
+"@/ c #6C6766",
+"#/ c #7F7E7F",
+"$/ c #989897",
+"%/ c #9C9D9C",
+"&/ c #6F6D6D",
+"*/ c #A48C82",
+"=/ c #FBBB7D",
+"-/ c #C2A595",
+";/ c #6C6463",
+">/ c #4D4F4E",
+",/ c #9C9B9C",
+"'/ c #9B9B9A",
+")/ c #787676",
+"!/ c #A89189",
+"~/ c #F3B681",
+"{/ c #C5A592",
+"]/ c #6C6564",
+"^/ c #838483",
+"// c #8D8D8C",
+"(/ c #959696",
+"_/ c #959795",
+":/ c #757574",
+" c #656666",
+"[/ c #7D7E7E",
+"}/ c #737372",
+"|/ c #777575",
+"1/ c #A58E87",
+"2/ c #EDB280",
+"3/ c #C5A38E",
+"4/ c #747374",
+"5/ c #979796",
+"6/ c #939392",
+"7/ c #7D7D7E",
+"8/ c #777878",
+"9/ c #747373",
+"0/ c #A48C84",
+"a/ c #EDB17E",
+"b/ c #C8A58F",
+"c/ c #6E6564",
+"d/ c #7A7B7B",
+"e/ c #929393",
+"f/ c #666566",
+"g/ c #7C7C7B",
+"h/ c #747272",
+"i/ c #A68B82",
+"j/ c #F5B378",
+"k/ c #FDB876",
+"l/ c #CFA990",
+"m/ c #716765",
+"n/ c #7A7B7A",
+"o/ c #929293",
+"p/ c #898A8A",
+"q/ c #666665",
+"r/ c #757373",
+"s/ c #A28981",
+"t/ c #FBB674",
+"u/ c #D2AA8D",
+"v/ c #766B69",
+"w/ c #898988",
+"x/ c #787879",
+"y/ c #797978",
+"z/ c #757675",
+"A/ c #9E8882",
+"B/ c #EDAE7A",
+"C/ c #CFA68B",
+"D/ c #746967",
+"E/ c #89898A",
+"F/ c #858685",
+"G/ c #848384",
+"H/ c #808180",
+"I/ c #757576",
+"J/ c #747475",
+"K/ c #9B8680",
+"L/ c #E6AA79",
+"M/ c #D0A588",
+"N/ c #838382",
+"O/ c #747576",
+"P/ c #737473",
+"Q/ c #9B857F",
+"R/ c #E5A978",
+"S/ c #D4A786",
+"T/ c #766A68",
+"U/ c #79797A",
+"V/ c #7A7A79",
+"W/ c #767776",
+"X/ c #727171",
+"Y/ c #9E867F",
+"Z/ c #EDAA71",
+"`/ c #FDB570",
+" ( c #E2B189",
+".( c #7C6E6B",
+"+( c #6B6A6A",
+"@( c #747574",
+"#( c #97827C",
+"$( c #ECA86E",
+"%( c #FFC48B",
+"&( c #E2AD83",
+"*( c #84736E",
+"=( c #93807C",
+"-( c #DFA273",
+";( c #E1AE89",
+">( c #82726F",
+",( c #917E7A",
+"'( c #DA9E72",
+")( c #E1AB83",
+"!( c #9B8B88",
+"~( c #D99D72",
+"{( c #FFC68F",
+"]( c #E8B081",
+"^( c #9B8985",
+"/( c #767575",
+"(( c #937E79",
+"_( c #DD9B6B",
+":( c #FDB46F",
+"<( c #F7B77B",
+"[( c #A18D87",
+"}( c #8D7C79",
+"|( c #D8996C",
+"1( c #FDB774",
+"2( c #F1B17A",
+"3( c #6F5F5C",
+"4( c #C98F67",
+"5( c #FDC590",
+"6( c #F9C290",
+"7( c #FCC28A",
+"8( c #EAAE7D",
+"9( c #A18C86",
+"0( c #E19D71",
+"a( c #D0AA91",
+"b( c #A38B82",
+"c( c #96827C",
+"d( c #AA8E82",
+"e( c #D7A988",
+"f( c #EAAC79",
+"g( c #A18B85",
+"h( c #D69A81",
+"i( c #FCB069",
+"j( c #EDBEA0",
+"k( c #6F6462",
+"l( c #C79D81",
+"m( c #F1AF76",
+"n( c #A38C84",
+"o( c #E7A06F",
+"p( c #F9B67A",
+"q( c #F5B784",
+"r( c #FAB36F",
+"s( c #91776E",
+"t( c #595757",
+"u( c #F0A469",
+"v( c #F6BA89",
+"w( c #EAB18D",
+"x( c #FEB875",
+"y( c #F8B273",
+"z( c #D3A190",
+"A( c #494747",
+"B( c #ECA26B",
+"C( c #F8B983",
+"D( c #E8B08D",
+"E( c #FEB671",
+"F( c #F6AF73",
+"G( c #D6A291",
+"H( c #DD9B77",
+"I( c #FBB370",
+"J( c #E3B8A6",
+"K( c #EFAF7F",
+"L( c #F7AF70",
+"M( c #D6A290",
+"N( c #F8AB67",
+"O( c #F8B881",
+"P( c #DDB3A5",
+"Q( c #DCA58D",
+"R( c #F9B06E",
+"S( c #D59F8B",
+"T( c #D4957C",
+"U( c #FEAE61",
+"V( c #FDB672",
+"W( c #E8B18E",
+"X( c #DEAE9A",
+"Y( c #DCA791",
+"Z( c #E8A981",
+"`( c #FDB26A",
+" _ c #D69F8B",
+"._ c #D59E8A",
+"+_ c #E7A376",
+"@_ c #F5A968",
+"#_ c #F8AC69",
+"$_ c #F5AA6A",
+"%_ c #E6A47B",
+"&_ c #D7A697",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . . . ",
+" + + + . . . . . . . ",
+" + + + + + @ # # $ . . . . . . ",
+" + + % + & # * = - ; > , ' . . . . . ",
+" + + ) ! ~ { ] ^ / > ' ' ' ( _ : . . . . . . . . ",
+" + + ) ) ) ) ) < [ } | 1 2 3 3 4 5 5 6 7 8 8 . . . . . ",
+" + # ) ) ) ) ) 9 0 a b c 0 d e f 8 8 7 g 8 h i j k . . . . . . ",
+" l # ) ) ) m n 0 o p q r s t u v w x { y z k k A A B C D f . . . . . . . ",
+" # # ) ) E F 0 a G H I J K L v M N O P u Q R S T A U U f f f V V W X . . . . . . ",
+" Y $ ) ) Z 9 0 ` H r J ...+.+.@.#.$.%.&.*.=.-.;.>.! ,.'.).!.~.{.~.].^.^./.(.. . . . . ",
+" _.- ) 9 0 0 H p :.s t ..v M M N P %.&.*.<.[.}.}.|.1.2.3.4.5.6.7.8.9.^.(./.0.a.% b.. . . . . . . . ",
+" - ; 9 n a c.H d.e. .u v f.N N P g.h.&.[.i.j.k.k.1.3.l.4.m.n.n.o.&.) p.,.q.r.s.t.u.v.w.x.y.y.z.. . . . . ",
+" ; > A.0 a H q B.s ..v C.M D.N g.&.&.<.i.[.E.F.|.G.3.H.I.J.K.L.M.N.O.O.P.Q.R.S.T.U.^ V.y.y.W.z.1 1 V.. . . . . . ",
+" X.> 0 a b H Y.s s L f.C.N P Z.h.&.&.`.[.j.k.1. +3.4.J.n.n.L.M..+++@+P.Q.R.#+$+%+&+i.*+=+-+;+>+,+V.'+)+)+)+!+. . . . . . . ",
+" > ~+a c.{+B.e.u ]+^+/+(+P %.h._+:+:+[.k.k.<+[+4.4.I.}+n.|+M.1+O.O.2+Q.3+4+5+%+6+7+8+9+0+a+4.N b+c+d+)+e+f+g+^ ^ h+i+j+. . . . . . ",
+" , ' c.H r s t u v M N N P k+_+l+[.[.m+k.k.[+3.4.n+I.}+o+M.M.p+q+r+Q.s+#+t+a+u+v+8+9+w+0+x+y+z+A+A+B+C+D+E+F+G+H+U.I+J+K+K+L+M+. . . . . . . ",
+" ' ' :.r Y.s L v v N N N+g.&.O+<.[.-.P+k.1.3.4.Q+R+n.o+M.S+T+O.2+Q.Q.#+5+U+a+v+V+W+X+Y+Z+y+`+ @A+B+.@+@@@#@$@..%@&@*@=@-@L+;@>@>@,@'@)@!@. . . . . . ",
+" ~@3 r s {@..v /+]@D.^@g.k+`.<.[.}./@k.2.(@l._@I.n.o+:@M.p+O.P.<@#+3+$+$+&+v+8+9+[@0+x+y+`+}@A+B+|@+@@@#@1@2@3@4@5@6@R.7@8@9@>@,@'@'@0@G+a@b@b@c@. . . . . ",
+" 3 3 r s ..d@+.@.N D.g.g.`.e@=.;.E.k.2.3.H.f@}+J.g@o.h@i@O.@+j@Q.#+k@$+a+v+V+l@9+0+m@n@y+6@A+o@p@q@r@#@s@t@u@v@w@x@y@z@A@B@C@D@M E@F@G@H@b@I@b@=@J@K@L@. . . . . . ",
+" 3 4 .]+M@M N N $.Z.&.N@`.[.O@>.k.1. +3.P@I.n.Q@:@M.N.R@2+P.S@4+T@$+a+U@V@W@X@w+0+y+y+Y@A+Z@|@q@`@#@ #$@.#4@w@w@x@+#@#B@##$#%#*#=#-#;#>#,#'#F+L@)#!#~#{#]#^#. /#/# ",
+" (#5 ..v ^+M N P Z.g.l+`.<.}.}.k.1.1.3._#_@R+:#<#M.p+O.O.[#Q.s+}#$+a+v+8+8+|#0+Y+1#y+Y@-#2#.@q@@@3#4#$@3@u@5#6#x@+#7#B@C@8#$#9#0#a#b#c#c#d#b#w@.@u ,#q.{#{#e#f#g#/#/# ",
+" 5 6 ..v ]@N $.P g.&.`.:+j.>./@|.3.3.Q+I.I.o+o+M.p+++O.[#Q.h#t+$+a+v+8+W@9+w+0+i#y+Y@ @j#B+.@@@k#s@l#3@3@m#n#6#x@7#o#p#$#%#%#*#=#=#q#r#s#t#u#v#w#x#x#y#z#A#B#C#f#/#/# ",
+" D#6 M M E#P g.F#&.`.e@}.}.k.G#1.3.4.n+}+g@o+1+M.p+@+r+<@s+H#t+I#J#v+8+|#K#Y+i#y+L# @A+M#q@q@k# # #N#O#4@P#x@Q#R#p#C@S#T#9#*#0#=#U#c#V#d#W#X#v#Y#Z#`# $.$+$@$#$$$/#/# ",
+" 5 6 M @.D.P g.%$&$:+;.m+*$1.=$3.4.-$J.o+g@M.N.R@O.P.S@Q.H#$+;$J#V@W+9+w+>$x+y+Y@,$A+B+q@'$)$#@!$3@v@4@w@6#y@+#@#p#$#~${$]$a#=#q#^$/$($t#_$w#x#`#:$y#<$[$}$|$1$$$/#/# ",
+" 6 6 (+D.N+g.F#O+:+[.2$*$F.=$2.l.4.I.:#o+o+1+p+R@P.3$Q.#+$+;$J#v+4$5$|#Y+x+y+6$7$A+B+8$@@k##@l#N#3@4@w@9$y@0$a$b$c$d${$*#=#=#b#c#e$t#f$g$w#h$i$j$ $k$+$}$l$m$$$n$/#/# ",
+" o$8 p$P g.&.q$<.[.}.k.G#1.3.r$n+R+n.Q@L.M.p+@+O.3$Q.#+H#$+U@v+4$s$9+t$n@u$`+Y@A+v$w$q@r@#@#@2@O#4@w@z#x$+#@#p#C@~$%#*#a#=#b#c#V#V#t#y$w#x#Z#Z# $.$z$[$A$B$C$D$E$/#/# ",
+" 8 h P g.%$&.`.[.7@}.G#1.G.4.Q+I.n.n.o+p+p+F$P.<@S@#+a+9+8+v+G$H$I$K#x+J$L# @A+o@|@q@@@)$s@K$3@4@L$M$N$+#7#O$S#c$P$Q$*#a#R$q#c#t#($u#v#h$S$`#`#T$z$+$|$C$C$U$V$E$/#/# ",
+" W$i ^@k+*.q$=.}.}.k.G#G.H._#f@X$Y$o+M.p+++2+P.<@#+8+y$[$Q$8$5$9+w+>$Z$y+Y@7$`$ %q@@@)$4#t@3@4@w@w@x@+#+#@#S#c$$##0#b#c#c#.%t#t#X#+%@%`# $T$T$[$|$|$#%$%%%] ] /#/# ",
+" &%*%F#&.q$=%j.j.k.<+3.r$4._#-%g@|+M.1+O.O.P.<@s+H#u$;%V#@@o#y$K$y+x+>%Y@7$Z@.@q@@@#@#@$@3@v@P#z#N$,%a$o#S###{$*#=#'%c#r#V#)%y$!%w#`#`# $~%T$+$l${%C$]%^%/%] (%/#/# ",
+" _%:%&.l+i.[.}.|.1.1.r$<%I.n.n.Y$M.S+p+[%[%j@#+H#t+0+}%4@g.|%s @#w#6#q@-#Z@w$q@@@k#s@$@t@O#m#w@6#y@+#@#C@1%T#%#*#2%3%4%s#V#t#g$y$w#+%`#`#5%T$T$|$A$C$;%6%/%7%(%8%/#/# ",
+" 9%A *.:+[.}.*$|.1.3.-$-$I.:#Y$1+1+0%[%P.j@s+#+H#9+8$a%Y@4.b%c%d%e%f%V#y@B+|@r@@@#@$@2@w@6#P#x@+#+#7#S#C@$#%#g%=#b#h%c#V#d#t#y$w#w#Z#i%j%T$[$[$|$C$$%6%k%7%l%(%8%/#/# ",
+" A A :+[.j.E.F.1.m%4.f@I.Q@L.<#M.T+O.n%o%s+#+$+a+7#p%q%r%D+0+s%t%u%v%w%W#k%]$4@u@$#t#w#f$b#x%$#@#@#C@y%d$z%*#=#2%q#c#r#)%A%y$w#x#B%`#k$5%+$@$|$C$;%6%k%C%D%E%F%G%/#/# ",
+" A H%[.;.>.F.1.H.4.-$J.m.I%M.M.p+O.2+P.R.h#k@a+V@X#J%K%L%M%g.N%O%P%Q%R%S%T%U%C$C$;%B+$+A+=# $C$l$t#$#d$T#V%*#=#b#^$s#V#t#y$X#Y#W%`#X%T$Y%Z%|$B$`% &k%7%C%.&+&G%@&/#/# ",
+" U U m+/@|.F.H.<%4.I.J.Q@o.M.N.O.n%P.Q.#+#&%+a+V+$&%&&&*&=&-&Q.;&>&,&'&)&!&~&+&p+{&]&^&/&(&_&:&g.=#<&Y%b#]$3%4%c#r#[&)%y$X#w#x#`#i%.$}&z$|${%|&6%k%1&2&3&+&4&5&G@/#/# ",
+" U 6&>.<+1.2.<%<%J.n.K.:@M.T+++O.[#Q.#+$+$+a+V@K#p%7&8&5.9&0&$@a&b&c&d&e&f&g&A+M%1$b@h&>@G+J@g#e /#i&3#7%C$w#U#V#)%A%j&_$k&x#W% $l&T$m&l$B$;%;%k%7%7%l%+&<&n&G@o&/#/# ",
+" p&D k.1.3.<%4.R+m.n.|+o.S+O.q+q&R.s+H#$+a+r&G$,$s&t&u&v&w&x&@#:&x a&y&z&A&B&I.C&$$$$D&f#f#^#q.=@a@f#E&`.k%7%`%V#F&y$G&Y#B%S$i%T$T$@$|$|$#%;% &7%l%H&+&I&J&K&L&o&/#/# ",
+" p&f M&=$3.<%R+X$n.o+M.S+N&n%P.Q.#+#+5+a+u+4$8+q@O&P&Q&R&,.S&+#T&U&. *+V&W&X&Y&Z&`&`&G@G@G@F%F%F% *(%] b%P..*+*;%f$G&w#x#W%`# $z$T$m&|$C$;%U$@*C%l%+&+&n&n*o&`&/#/# ",
+" f $*(@<%-$I.m.n.o+o.p+R@[%[#P.#+H#$+5+v+v+8+K#3#%*&***Q.=*-*4@@+1.3.8+3@#+&.;*e e e >*c%,*Z&Z&Z&'*'*F@)*0 '*!*7%T$+%@%`# $ $T$[$~*|$;%;%k%{*@*l%+&<&<&]*^*/*8.(*/#/# ",
+" V V 3.4.n+-%n.:@|+S+_*O.n%Q.Q.#&$+;$J#7+W@H$:*1%<*[.[*x+h#$+w#y+*$N }*|*E@1*2*3*4*5*6*E+7*8*8*9*C&C&2*J.0*e 4*`.a*b*x#i%<$5%z$Z%|$$%;%;%{*2&D%+&}%4&c*#*/*d*`&y /#/# ",
+" V W r$_#J.n.o+o+S+p+O.2+Q.#+h#$+a+%+4$8+W@K#2#;%o+e*-+D+f*g*[*,#h*i*j*k*j*l*/&j*m*n*(&(&(&l*l*l*o*o*&@x+,#p*4*x |$C$W% $.$z$|$q*B$#%;%%%7%l%.&+&<&J&r*s*t*a%y u*/#/# ",
+" v*{.-$J.n.o+C+.+p+_*M.P.R.H#T@I#v+v+8+9+9+0+4#<&w*x*x*x*_&y*^&-+z*A*=&=&7.y*B*C*| D*E*E*E*2*2*2*{ E*F*M.]&j*/&z*S@G* $k$H*[$|$I*;%;%1&<*l%.&+&<&]*r*J*t*a%K*u*'*/#/# ",
+" W ~.I.n.o+C+M.p+T+L*M*N*O*2$C+#&v+4$8+K#0+m@o@]%`./#P*Q*R*P*Q*Q*R*S*]&R*i*T*i*U*i*=&=&V*=&=&=&W*y*X*Y*w y*7.| E*Z*`*H*+*[$~*C$`%`%k%7%7%.&I& =]*#*.=t*a%+=@=u*#=/#/# ",
+" ~.$=R+o+|+M.p+F$2+%=&=*===-=;=>=,=8+[@0+I$y+'=)=U$k.,#R*_&M%M%Q*!=~=1*{=]=^=,#/=(=_=:=<=[=]&]&]&R*}=B+|%|=|=i*9&1=`*C$}$|$A$2=6%k%{*C%3=+&4=5=r*#*t*6=7=`*@='*'*/#/# ",
+" ].^.Q@o+h@N.++q+3$8=9=0=a=b=c=d=e=f=g=h=i=j=k=v+l=+&`+U&m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C={&D=E==+M.&.X*[=Q*_&F=$#`*|$m&C$C$;%k%<*2&G=3&H=I=r*#*t*J=a%K=L=M='*N=/#/# ",
+" ^.^.o+o.p+F$O.<@<@O=P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-,-'-)-!-~-{-]-^-/-(-_-:-<-R&3@[-M%_&X*}-w@`*k%~*q*C$#%k%<*7%G=+&+&5=]*^*|-J=J=`*@=1-2-Z&3-/#/# ",
+" 4-(.:@p+p+O.P.j@Q.#+;$5-6-7-8-9-0-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-3.s%_&1*}-$@a%7%Z%A$C$;%%%1&7%l%G-}%H-]*I-J*t*a%`*J-K-L-M-3-N-/#/# ",
+" (.O-N.R@O.q+S@Q.#+t+%+6+P-Q-R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;';);!;~;{;];^;/;(;_;:;t M%e*w*+#M-<*~*|$C$;%U$k%<*l%G=H=<&]*c*t*d*a%`*@=1-2-M-<;[;c%/#/# ",
+" (.).p+O.2+j@R.};}#5+J#v+8+|;1;2;3;4;v+Y@A+5;J#6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;! b#L-;%|$m&x;C$]%1&7%l%3&+&<&]*c*a*t*a%`*`*y;L-z;A;<;B;C;/#/# ",
+" O-D;O.n%[#P.#+$+%+&+v+v+W@X+0+x+y+y+ @A+o@|@q@@@3#$@E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;`; >.>%%a%I*}$Z%B$;%;%k%7%l%G-+& =I=G*s*t*J=+>`*@=L-M-M-<;@>C;e /#/# ",
+" % #>[%P.Q.#+#&;$u+v+8+9+9+$>x+i#Y@Y@ @ %p@q@%>&>l#2@.#4@*>=>->;>>>,>'>)>!>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4> $Z%B$C$U$%%<*l%l%I&<&5>G*6>t*7>`*8>9>L-2-0>a>@>b>e c>/#/# ",
+" % b.P.o%h#H#$+a+6+G$W@9+$>x+x+`+Y@6@o@w$'$r@#@l#K$O#O#4@d>x@e>f>g>h>i>j>k>l>m>n>o>p>q>r>s>t>u>v>w>x>y>z>A>B>C>x#|&/%k%D%3&E%<&]*]*/*t*6=7=J-@=L-2-M-<;@>D>E>F>F@/#/# ",
+" u.u.S@#+#&$+a+6+G$W@|#w+x+y+>%Y@7$j#w$q@@@@@#@$@3@v@m#w@x@z@G>H>I>J>K>L>M>N>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,&,l%+&H=n&]*#*t*t*a%`**,y;2-M-<;=,-,;,>,,,,,/#/# ",
+" u.w.s+t+;$a+a+7+8+9+0+>$x+'=Y@,$B+B+q@@@@@#@',N#O#),M$x@+#@#!,C@$#~,x%{,],^,/,(,_,:,<,[,},|,1,2,3,4,5,6,7,8,9,0,a,b,c,d,<&<&r*#*/*t*K*+>@=1-L-e,<;f,D>g,>,>,,,h,/#/# ",
+" i,j,#&$+U+6+v+W+s$X+$>x+'=6$}@o@p@q@'$k#4#$@k,3@5#M$x@z@+#@#C@S#~$%#*#]$3%b#c#V#l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,t*a%`*`*K-L-M-<;a>J,;,>,K,L,M,N,/#/# ",
+" j,9.H#a+u+v+8+l@9+0+n@Z$L# @O,B+.@'$%>#@$@N#I>4@),d>N$a$A@P,##$#V%*#0#2%b#Q,V#V#t#y$X#Y#S$v#5%T$T$T$R,S,T,U,V,W,X,Y,Z,`, '.'+'@'#'$'`*y;L-M-M-<;%'&'>,*'='-'C&;'/#/# ",
+" >','a+&+v+8+l@K#$>x+y+Y@Y@j#v$.@@@@@''$@K$3@L$L$M$,%)'@#C@$#$#9#*#!'2%4%c#V#V#t#y$w#Y#x#`# $.$T$[$|$C$y#~'{']'^'/'('_':'<'['}'|'1'2'3'3&0><;4'D>;,g,5'='L,6';'7'/#/# ",
+" 8'y.a+7+9'8+9+>$Z+J$`+Y@A+B+B+0'@@)$l#k,3@4@w@M$x@+#@#p#C@$#%#*#a'2%b#c#V#.%t#y$v#h$x#W%y#<$}&l$|$q*2=;%]%7%b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'a>4';,g,q'r'-'s't'T T /#/# ",
+" y.u'E@D+v'$+0+x+y+6$`+A+v$|@+@@@#@$@t@3@4@w@x@x@,%7#p#C@$#%#z%a#2%b#w's#V#W#y$x'k&y'`#y#.$T$+$|$z'I*6%%%7%3=l%}$A'B'C'D't*a%+&E'F'G'H'I'J'J,b>E>K,K,-'-'6'K'L'8*/#/# ",
+" M'1 1 1 '@N'8*O'=$Y@A+A+B++@r@k#l#$@N#4@4@M$x$z@+#C@p#1%%#*#]$'%b#w'P'V#)%W#w#+%x#`# $l&T$[$l$q*C$;%%%Q'7%l%+& =<&R'S'T'a%a%U'@=H-V'W'X'Y';,E>>,r'Z's'`' ).)+)E+/#/# ",
+" 1 V.V.'+)+)+@)f+f+i*S.-%#+Y@$@k,t@u@m#w@x@+#+#@#1%y%8#z%#)=#3%q#c#V#t#W#y$h$k&i$:$ $T$[$l$|$C$;%^%7%7%C%+&+&<&G*I-a*/*+>`*@=L-L-L-a%$)%);,q'r'&)*)6'=)-).)9@E+/#/# ",
+" d+@)e+f+;)^ ^ i+U.y /#>)< p+4@w@x@+#G>@#C@$#~$%#*#=#,)w'e$V#V#j&y$w#x#x#j$ $T$+*~*|$C$;%^%<*7%l%+&4=<&]*^*6>t*a%`*')y;))p'!)@>@>;,~){)&)])`'^)/).)()_)4*/#/# ",
+" &.^ i+U.H+K+:)<)b@D$[)1*! +#@#C@c$T#9#*#=#'%b#r#V#.%u#y$w#k&B%i% $T$H*~*|$C$I*6%7%7%3&.&+&<&J&c*a*6=7>+=@=@=})M-|)1)2)2)3)r'4)-'^)5).)6)7)8)_)4*/#/# ",
+" *.P N $.P ^@K+9)<)L+L+>@>@0)'@'@,,a)j.v+1@a#=#b#c#V#b)A%y$w#@%x#j$y#T$T$[$|${%I*]%<*{*7%.&+&<&]*G*J*6>c)7=@=L-1-M-d)<;@>;,E>*'r'-'e)5)/).)6)f)g)4*h)/#/# ",
+" `.i)i)P P g.F#&.&$`.:+[.7@>@j)'@)@k)a@l)b@g#=&|%F==%9#V#A%y$w#Y#i$i% $<$T$[$l$C$#%;%k%7%2&E%+&4=I=c*s*t*a%K=J-@=m)))e,a>@>;,g,>,r'*)6'K'K'n)()8)8)o)p)q)/#/# ",
+" j.i.k+N+g.g.g.g.&.l+q$`.[.}.}.M&F.3.3.4.G+b@b@r)=@s)t)q.(%y { u)Y@w#B%`# $<$z$[$|$C$C$ &k%7%7%E%+&<&5=]*J*v)J=a%`*@=9>M-M-<;@>b>q'K,&)Z'6'6'w).)x)8)g)y)z)q)3*/#/# ",
+" A)-.`._+*.O+f*`.f*`.e@[.[.-.}.}.F.1.3.<%4.I.-%o+L.h@=@B)L@L@C)q.{#D)^#C#s%E)K#4@_$|$z'$%;%k%k%D%l%+& =I=]*c*t*J=a%@=J-1-M-M-<;@>;,;,{)r'&)e)`'K'F)x)()y)o)G)z)H)o*/#/# I) ",
+" 1.}.-.i.[.=.[.[.=%[.7@7@j.}.>.k.M&1.G.3.4.f@I.m.o+o.M.R@<#.*e*e*/#q.J)K)L)f#$$$$$$M)N)O)) 3@%%Q'P)E%+&}%n&^*^*t*6=a%`**,M=Q)M-!)f,%'R)>,S)-'T)6'U)F)7)V)8)o)G)z)z)W)W)/#X* X)Y) ",
+" -%3.G#M&k.k.}.}.}.}.2$2$/@}.P+*$|.<+1.G.3.<%Q+I.R+Q@o+o.h@_*[%Z)/#/#/#/#/#`)Q*x*N'D& !D$E$E$.!+!@!C!}.@*$!5=]*I-t*%!a%K=8>&!z;M-0>@>%'q'*!K,Z'])=!-!.)n)f)8);!z)z)z)z)W)>!/#,!'!)! ",
+" o+I.4.m%[+ +=$G#|.!!|.k.M&|.F.k.<+!!(@G.H.4._#_#I.n.:#o+C+.+++2+P.~!/#/#/#/#/#B#R*i*y*D*{ E${!(%]!^!F%5&G@G@+!j*F=S@w@`#7>`*K=@=L-z;<;/!-,%)R)r'r'-'6'=)w).)()(!g)_!z)z)z)z):!M)>,>,u!T)=!K'/).)()v!8)w!z)z)z)z)z)z):!x!y!z!A! B! ",
+" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#C!D!E!F!E*j*G!3*W)(&{ | =&x*[=H!/#/#/#I!Z&Z&Z&c%c%e F>J!,,K!p$3@@%M-K'.)n)f)8);!z)z)z)z)z)z)z)L!M!N!O!P! Q!R! ",
+" P./=S!T!G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=U!9&V!7.2*W!X!(&j*Y!Z!`!x*Q*!=/#/#/#/#/#/# ~P.8!c>e ,,M,.~C&;'T.+~@~g. $8)#~#~z)z)z)z)z)z)d!$~%~&~O!*~ =~-~ ",
+" P.G%[;o*E!;~ ~T!M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`. ~/#/#/#M%>~x*=&7.E*2*{ ,~| y*^&'~)~!~/#/#/#/#/#/#1*P.P.P.P.P..~;'9*8*8*9@E+q)>!m!0!v+6'z)z)z)z)z)F)~~{~]~^~/~ (~_~ ",
+" P.c%E+E+E++)4*:~V!B#<~w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.<~/#!=_&R*i*V*E&7.| 7.[~-+x*}~B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.|~+)E+6*4*4*h)3*o*1~Q*p.x+b##*%)2~3~4~5~6~7~ 8~9~ ",
+" P.0~p)3*R*/&a~b~c~X!j*d~e~D!f~Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+N)g~h~i~x*i*T*j~-+^&x*R*_&`)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.P.P.k~k~o*M):!l*l~m~n~o~p~q~r~s~t~u~v~P.P. w~x~y~z~ ",
+" P..~1~o*%@!*A~;*B~T*j*{ C~D~E~| E*F~G~a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.H~-*} I~J~R*K~9&]&i~D!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o*l*(&l~L~M~G!N~q~s~O~P~Q~R~P.P.P.P.P.P.P. S~T~U~V~ ",
+" P.W~l*(&!*}-X~0*Y~Z~T![-`~ {=&E&=&=&=&y*.{E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$+{s !*. a)+~@{#{${${/#/#e*1*/#e*%{. &{K.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.*{/&/&={-{s~O~;{5~>{,{'{P.P.P.P.P.P.){!{~{;{{{]{ ",
+" P.^{/&/&}-*+/{F=F=T!({5.V&S._{-*:{<{[{9&R*R*}{|{`)1{2{s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r 3{}*i&V&Z~4{5{O):&[*D+6{Z)7{) P+J.P.P.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.8{9{0{O~a{;{b{4~c{d{e{f{g{v~h{i{j{k{;{l{;{m{ ",
+" P.1~:~:~*+n{o{Z~Z~}=p{&{q{r{p.s{w t{u{v{w{S&N)#{g~#{C!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M x{! Z)y{5.Y~z{[-6{-*S.)*A{0 ..F#M&Y$o+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.B{C{D{r~E{;{F{G{H{a{I{J{K{L{M{N{O{P{Q{l{R{S{T{ ",
+" P.U{2*,~V{Y~W{T!T!X{5.q{Y{p.Z{.*`{Z)}* ]g*! m .]Q +]@]#];~$]%];~|%. S.&]v I.a+$+#+Q.P.P.P.P.P.P.P.p.p{+]*]=]0*-]p.Z)1=a ;]*.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.>],]']r~E{a{U~b{)]!]Q{Q{)]U~a{U~)]~]{]]]l{^]/] ",
+" P.(]_]| !@:]T!-*-*<]V&2{S.< i&[]v{}]|]1]1=2]9 a H I 3]M :.[]. 4]E@5]5]<~>)}-p{Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.>]6]0{4~O~a{;{F{G{)]!]Q{7]8]{{9]0]a]R{b]l{c]d]e] ",
+" P.j*7.[~A*A*f]g]U&h]w*S.p.< .*w Z)Y&i]A{j]) A.k]H l]M@M P g.`.}.7@m]a!D+|%+~ ~n]o]}-T!1][.Q.a+#+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.p]q]']4~r]E{;{U~b{)]H{Q{s]~]t]c]9]u]a]v]v]s]w]x]V{ ",
+" P.y]z]F!e*f]=&T.V*V*x*A];*6{B]t{Z)}*1]C]! ) 0 x{r .v ]@N+&.`.-.1.3.4.n.<#}.D]({E]F]>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.G]H]I]P~s~O~a{U~b{G{H{J]s]7]8]{{9]u]a]a]~]P~K]x]L]}] ",
+" P.o!-+-+%@!*M]!@N]!=x*x*c+i~Q*e*O]*+P]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+Q]S&R]:&S]=*T]X~< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.U]V]W]]~s~r]E{;{F{G{)]!]Q{7]!]s~r]F{b{r]X]Y]Z]`]}= ^ ] ",
+" P.7.i*.^!*}-X~0*Y~Z~-*. x&,.`)_&J~+^H!e*@^}-P]c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)#^D+$^%^. 4{*+&^6{-**^g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.=^-^;^5~r~r]O~a{U~b{)]H{J]s]J]>^,^'^)^!^~^{^]^^^A{! /^(^ ",
+" P.=&]&]&}-*+/{F=F=T!({5.V&S._{5._^@^/=/#X*:^e*s%%{!*<^v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&[^:&G~}^*]T]p=*++]0*|^T!Z~F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.1^2^I{3^4~s~O~E{;{F{G{H{!]Q{H{4^5^6^7^8^9^0^E x{.]9 ) 3{a^ ",
+" P.|{Q*Q**+n{o{Z~Z~}=p{&{q{r{p.s{w t{u{v{b^c^d^B~/=e^6.f^ ~b%g^M [+4.Q@C+p+2+P.P.P.P.a)[*h^i^j^b%!*}-*++]F=k^-*-*-*T!Z~F=F=< 9 &.3.n.p+P.Q.P.P.P.P.P.P.P.P.P.P.P.P.U]l^m^3^P~r~r]E{a{U~b{)]!]J]H{n^o^p^q^N M v ..K r^:.a 0 n s^ ",
+" P.c+_&_&V{Y~W{T!T!X{5.q{Y{p.Z{.*`{Z)}* ]g*! m .]}]t^u^v^w^#!&@<~|%x^.*N 0%P.P.P.P.P.y^z^A^i^[-. !*}-:]-&F=T!-*-*-*-*-*-*-*T!Z~F=-*.*0 P }.I.O.Q.Q.Q.P.P.P.P.P.P.B^C^D^3^]~4~s~O~a{;{F{G{H{J]H{&~E^F^O+&.%.O N ^+3]{@s r G^m]H^ ",
+" P.R*C!`)I^V{T!-*-*<]V&2{S.< i&[]v{}]|]1]1=2]9 a H I 3]M J^K^:]!@+~ ~|%L^x&O)< ..n.P.R]:&D+O)b%M^4{&^6{0*Z~T!-*-*-*-*-*-*-*-*-*-*-*T!Z~F=5.t{9 ..&.I.P.#+Q.Q.P.N^O^P^3^]~P~r~r]E{;{U~b{)]!]!]Q^R^S^>.i.`.&.g.#.N +.v ..s Y.r H ",
+" P.[=!=T^!=!=%]<~U^V^w*S.p.< .*w Z)Y&i]A{j]) A.k]H l]M@M P g.`.}.}.{+< [ ~ n]W^O'S&[-#^A^O)[-%@!*X^@~0*F=Z~Y^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*T!Z~Z~V&t{1=H g.n.Z^`^ /Q^5~P~r~s~O~a{U~b{G{H{H{./+/@/1!2.}.-.<.O+g.P $.N H~v .. .s ",
+" P.#/5]$/%]%/ {X*X*X*:^,#S&F=B]t{Z)}*1]C]! ) 0 x{r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%y^:&D+O)%^. !**+6{0*F=T!}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*T!T!T!w*&/*/=/Q^3^]~4~r~r]E{;{F{b{)]H{3^-/;/I.n+<%M&>/}.[.`.&.g.P N N M ;]]+ ",
+" P.8+v+1.Z)D+ ~,#/=1*,/'/e*s%s%,#O'F=P]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+D+G~[-. !*v&*+n{F=Z~T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*)/!/~/&~Q^5~P~r~s~O~a{U~b{G{)]5~{/]/S+o+n.f@r$G.!!}.[.`.*.F#g.P O N M ",
+" P.#+8+9+#+_+w b%^///=+e*s%B~g](/_/~!!@:/.}.[.<. ",
+" $+P.4.g.H t{n/%{o/,#a&%{L^p/;*x&0!*+q/Z.0%P.P.P.P.P.b%. !*}-*+6{0*F=T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*r/s/t/&~n^&~3^5~P~r~r]E{a{U~b{P~u/v/P.P.P.P.P.P.P.O.p+M.o+Q@n.I.-$<%[+<+k.k.}. ",
+" Q.O.I.F.N t{b% ~+~|%w/U&~ !@O'S&a)x/w M o+P.b%d/!*y/6{0*z/k^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*h/A/B/&~4^^~Q^5~P~4~s~O~a{;{F{4~C/D/P.P.P.P.P.P.P.P.P.P.O.p+M.o+g@m.I.4.l.[+2.<+ ",
+" P.O.M.o+g.w =*E/U&F/G/a)H/:&D+[/%^&^. !*}-*+0*I/J/T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*9/K/L/&~4^n^&~3^]~4~s~r]E{;{F{r~M/D/P.P.P.P.P.P.P.P.P.P.P.P.O.O.p+M.|+Y$-%}+I.-$4. ",
+" P.P.P.P.p+N < =*N/#^H/O)7/%^%@M^}-v&:]0*O/P/}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*}=Q/R/&~O!n^&~Q^]~P~4~s~E{a{U~r~S/T/P.P.P.P.P.P.P.P.P.P.P.P.P.P.r+[%O.p+M.M.L.K.-$4. ",
+" P.Q.#+$+M. .Z*U/%@!*. V/v&h]W/F=9/w{-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*X/Y/Z/&~N!4^^~Q^3^]~4~s~r]E{;{`/ (.(P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+O.++o+n. ",
+" P.#+$+a+f@H +(Z~P/@(I/T&T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*#($(./%(O!n^&~Q^]~4~r~r]O~a{s~&(*(P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.p+o+ ",
+" P.Q.$+a+#+1.H t{< S.p{T!T!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*X/=(-(Q^%(N!4^^~Q^3^]~r~s~O~a{s~;(>(P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.o+ ",
+" P.#+a+a+P.k.s 1]t{p.p{Z~T!-*-*-*-*-*-*-*-*-*-*-*,('(Q^z!%(4^n^&~3^5~P~s~r]E{s~)(!(n+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.o+ ",
+" Q. $+M.}...) Z)S.T!Z~T!-*-*-*-*-*-*,(~(3^{(%(O!n^&~3^5~P~r~r]O~s~](^(/(n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M. ",
+" Q.o+}.M 0 Y&V&F=Z~T!-*((_(5~{(z!N!4^^~Q^3^P~4~s~O~:(<([(}=F=n.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M. ",
+" #+P.n.k.&.H t{}(|(1(w]{(%(O!n^&~Q^5~P~r~r]s~2(1/}=-*F=n.P.P.P.P.P.P.P.P.P.P.P.P.R@ ",
+" Q.O.3(4(k/5(6(7(N!4^^~Q^5~P~4~s~s~8(9(9/-*-*F=n.P.P.P.P.P.P.P.P.P.P.@+ ",
+" 0(k/a(b(c(d(e(^~&~3^]~4~r~s~f(g(L]-*-*-*F=n.P.P.P.P.P.P.P.P. ",
+" h(i(j( 1^k(l(./5~P~r~s~m(n(|/-*-*-*-*F=n.P.P.P.P.P.P. ",
+" o(p( q(]~4~s~r(s(t(N%5.T!T!-*F=n.P.P.P.P. ",
+" u(v( w(x(r~y(z(A(Q.#+#+n...t{T!n.P.P. ",
+" B(C( D(E(F(G( P.#+$+Q.P. ",
+" H(I(J( K(L(M( ",
+" N(O(P( Q(R(S( ",
+" T(U(V(W(X(Y(Z(`( _ ",
+" ._+_@_#_$_%_&_ ",
+" ",
+" "};
diff --git a/src/Mod/Ship/Icons/SimIco.xcf b/src/Mod/Ship/Icons/SimIco.xcf
new file mode 100644
index 000000000..8d250eb82
Binary files /dev/null and b/src/Mod/Ship/Icons/SimIco.xcf differ
diff --git a/src/Mod/Ship/Icons/SimRunIco.png b/src/Mod/Ship/Icons/SimRunIco.png
new file mode 100644
index 000000000..2e53c2505
Binary files /dev/null and b/src/Mod/Ship/Icons/SimRunIco.png differ
diff --git a/src/Mod/Ship/Icons/SimRunIco.xpm b/src/Mod/Ship/Icons/SimRunIco.xpm
new file mode 100644
index 000000000..7adab3214
--- /dev/null
+++ b/src/Mod/Ship/Icons/SimRunIco.xpm
@@ -0,0 +1,2590 @@
+/* XPM */
+static char * SimRunIco_xpm[] = {
+"128 128 2459 2",
+" c None",
+". c #7B7B7B",
+"+ c #EAEAEA",
+"@ c #E9EAE9",
+"# c #E9E9E9",
+"$ c #E9E9E8",
+"% c #D9D9D9",
+"& c #EAEAE9",
+"* c #E8E9E8",
+"= c #E9E8E8",
+"- c #E8E8E8",
+"; c #E8E8E7",
+"> c #E7E7E7",
+", c #E7E6E7",
+"' c #E6E6E6",
+") c #5F5F5F",
+"! c #606060",
+"~ c #868686",
+"{ c #AEAEAE",
+"] c #C3C2C2",
+"^ c #D1D1D1",
+"/ c #E4E3E3",
+"( c #E5E6E5",
+"_ c #E6E5E5",
+": c #E5E4E5",
+"< c #6B6B6B",
+"[ c #7B7A7A",
+"} c #888889",
+"| c #ABABAB",
+"1 c #D5D5D5",
+"2 c #E5E6E6",
+"3 c #E5E5E5",
+"4 c #E4E5E4",
+"5 c #E4E4E4",
+"6 c #E3E3E3",
+"7 c #E3E3E2",
+"8 c #E2E2E2",
+"9 c #5E5E5E",
+"0 c #5D5D5D",
+"a c #5C5C5C",
+"b c #5B5B5C",
+"c c #5A5B5B",
+"d c #838484",
+"e c #BABABA",
+"f c #DEDEDE",
+"g c #E2E3E2",
+"h c #E1E2E2",
+"i c #E1E1E2",
+"j c #E0E1E0",
+"k c #E1E1E1",
+"l c #EAE9E9",
+"m c #5E5F5F",
+"n c #5E5D5E",
+"o c #5C5D5C",
+"p c #5B5C5B",
+"q c #5B5A5A",
+"r c #5A5A5A",
+"s c #595959",
+"t c #595858",
+"u c #585857",
+"v c #575757",
+"w c #686868",
+"x c #909090",
+"y c #BEBEBE",
+"z c #D3D2D3",
+"A c #E0E0E0",
+"B c #E0DFE0",
+"C c #E0DFDF",
+"D c #DEDEDF",
+"E c #5F5E5E",
+"F c #5E5D5D",
+"G c #5C5B5B",
+"H c #5B5B5B",
+"I c #5A5A59",
+"J c #595A59",
+"K c #595859",
+"L c #585757",
+"M c #565656",
+"N c #555555",
+"O c #545455",
+"P c #545454",
+"Q c #676666",
+"R c #717272",
+"S c #8B8B8A",
+"T c #B7B7B8",
+"U c #DFDFDF",
+"V c #DDDDDD",
+"W c #DCDDDD",
+"X c #DDDCDC",
+"Y c #E8E9E9",
+"Z c #5D5E5E",
+"` c #5C5B5C",
+" . c #595958",
+".. c #585858",
+"+. c #565657",
+"@. c #555556",
+"#. c #545554",
+"$. c #555454",
+"%. c #535354",
+"&. c #525252",
+"*. c #525251",
+"=. c #515050",
+"-. c #4F5050",
+";. c #4F4F50",
+">. c #4E4F4F",
+",. c #959595",
+"'. c #CAC9C9",
+"). c #D9D9DA",
+"!. c #DADBDA",
+"~. c #DCDCDC",
+"{. c #DDDDDC",
+"]. c #DBDCDB",
+"^. c #DBDBDB",
+"/. c #DADADB",
+"(. c #DADADA",
+"_. c #E8E8E9",
+":. c #5B5A5B",
+"<. c #505151",
+"[. c #505050",
+"}. c #4F4F4F",
+"|. c #4E4D4E",
+"1. c #4D4D4D",
+"2. c #4C4D4D",
+"3. c #4C4C4C",
+"4. c #4B4B4B",
+"5. c #707070",
+"6. c #959596",
+"7. c #AAAAAA",
+"8. c #BFBEBF",
+"9. c #D7D7D6",
+"0. c #DADAD9",
+"a. c #D9DADA",
+"b. c #D8D9D9",
+"c. c #5B5C5C",
+"d. c #5A5B5A",
+"e. c #5A5959",
+"f. c #565757",
+"g. c #535353",
+"h. c #535253",
+"i. c #505150",
+"j. c #4F504F",
+"k. c #4E4E4E",
+"l. c #4C4B4B",
+"m. c #494A49",
+"n. c #494949",
+"o. c #484747",
+"p. c #6C6C6C",
+"q. c #C7C7C7",
+"r. c #DAD9D9",
+"s. c #D9D8D9",
+"t. c #D9D8D8",
+"u. c #D8D8D8",
+"v. c #D8D8D7",
+"w. c #D7D8D8",
+"x. c #D7D7D7",
+"y. c #D6D6D6",
+"z. c #D5D5D6",
+"A. c #5E5E5D",
+"B. c #595A5A",
+"C. c #575656",
+"D. c #545555",
+"E. c #4F4E4E",
+"F. c #4E4E4D",
+"G. c #4C4D4C",
+"H. c #4C4B4C",
+"I. c #4A4A4A",
+"J. c #494A4A",
+"K. c #494848",
+"L. c #484847",
+"M. c #474747",
+"N. c #474646",
+"O. c #454545",
+"P. c #444444",
+"Q. c #434343",
+"R. c #434243",
+"S. c #6D6D6D",
+"T. c #A7A8A7",
+"U. c #D0D0D0",
+"V. c #D4D4D4",
+"W. c #D6D5D5",
+"X. c #E7E8E8",
+"Y. c #59595A",
+"Z. c #535454",
+"`. c #515151",
+" + c #4D4D4C",
+".+ c #464647",
+"++ c #464545",
+"@+ c #444545",
+"#+ c #424242",
+"$+ c #414141",
+"%+ c #404041",
+"&+ c #3F4040",
+"*+ c #787878",
+"=+ c #969696",
+"-+ c #A7A7A7",
+";+ c #C3C3C2",
+">+ c #D5D4D5",
+",+ c #D4D4D5",
+"'+ c #D3D4D4",
+")+ c #D3D3D3",
+"!+ c #D2D3D3",
+"~+ c #E6E7E6",
+"{+ c #5A5A5B",
+"]+ c #575858",
+"^+ c #575657",
+"/+ c #555656",
+"(+ c #565555",
+"_+ c #525352",
+":+ c #515051",
+"<+ c #4D4D4E",
+"[+ c #4D4C4C",
+"}+ c #4A4A49",
+"|+ c #474848",
+"1+ c #464747",
+"2+ c #444544",
+"3+ c #434342",
+"4+ c #434142",
+"5+ c #404141",
+"6+ c #403F3F",
+"7+ c #3F3E3E",
+"8+ c #3E3E3E",
+"9+ c #3D3D3D",
+"0+ c #3C3C3C",
+"a+ c #404040",
+"b+ c #707071",
+"c+ c #A4A5A5",
+"d+ c #D4D3D3",
+"e+ c #D3D2D2",
+"f+ c #D2D2D2",
+"g+ c #D2D2D1",
+"h+ c #D1D0D0",
+"i+ c #D0D1D0",
+"j+ c #CFD0CF",
+"k+ c #525353",
+"l+ c #525152",
+"m+ c #504F4F",
+"n+ c #4B4A4A",
+"o+ c #484848",
+"p+ c #464646",
+"q+ c #454544",
+"r+ c #454444",
+"s+ c #424343",
+"t+ c #414142",
+"u+ c #403F40",
+"v+ c #3F3F3F",
+"w+ c #3C3D3C",
+"x+ c #3B3B3B",
+"y+ c #3A3A3A",
+"z+ c #3A3A39",
+"A+ c #383838",
+"B+ c #373737",
+"C+ c #474847",
+"D+ c #7F7F7F",
+"E+ c #B6B6B6",
+"F+ c #C8C9C8",
+"G+ c #CBCBCB",
+"H+ c #CFD0D0",
+"I+ c #D0D0CF",
+"J+ c #D0CFD0",
+"K+ c #CFCFCF",
+"L+ c #CECECE",
+"M+ c #CECDCE",
+"N+ c #545453",
+"O+ c #525151",
+"P+ c #4F4E4F",
+"Q+ c #4A4B4B",
+"R+ c #4A494A",
+"S+ c #474647",
+"T+ c #454645",
+"U+ c #404140",
+"V+ c #3E3E3F",
+"W+ c #3D3E3E",
+"X+ c #3D3C3C",
+"Y+ c #3C3B3C",
+"Z+ c #3C3B3B",
+"`+ c #3A3939",
+" @ c #383839",
+".@ c #363637",
+"+@ c #353636",
+"@@ c #353535",
+"#@ c #343434",
+"$@ c #333333",
+"%@ c #7B7B7C",
+"&@ c #919190",
+"*@ c #ACACAB",
+"=@ c #C9C9C9",
+"-@ c #CECFCE",
+";@ c #CECECD",
+">@ c #CDCDCD",
+",@ c #CDCDCC",
+"'@ c #CCCCCC",
+")@ c #CCCCCB",
+"!@ c #858585",
+"~@ c #E6E5E6",
+"{@ c #585859",
+"]@ c #565655",
+"^@ c #545354",
+"/@ c #4E4F4E",
+"(@ c #4C4C4D",
+"_@ c #4B4B4A",
+":@ c #484748",
+"<@ c #434344",
+"[@ c #3D3C3D",
+"}@ c #393839",
+"|@ c #373636",
+"1@ c #333334",
+"2@ c #323332",
+"3@ c #323232",
+"4@ c #313131",
+"5@ c #303131",
+"6@ c #383939",
+"7@ c #50504F",
+"8@ c #7E7F7E",
+"9@ c #B6B7B6",
+"0@ c #CBCBCC",
+"a@ c #CBCBCA",
+"b@ c #CACACA",
+"c@ c #CAC9CA",
+"d@ c #575857",
+"e@ c #515150",
+"f@ c #4A4A4B",
+"g@ c #494849",
+"h@ c #474746",
+"i@ c #464547",
+"j@ c #434444",
+"k@ c #424141",
+"l@ c #3D3D3E",
+"m@ c #3B3C3B",
+"n@ c #3B3B3A",
+"o@ c #383737",
+"p@ c #363737",
+"q@ c #363636",
+"r@ c #353635",
+"s@ c #343433",
+"t@ c #333233",
+"u@ c #313132",
+"v@ c #323131",
+"w@ c #303030",
+"x@ c #2F2F2F",
+"y@ c #2F2F2E",
+"z@ c #2E2E2F",
+"A@ c #2D2C2D",
+"B@ c #2C2D2D",
+"C@ c #2C2C2C",
+"D@ c #2C2B2C",
+"E@ c #939393",
+"F@ c #B9BAB9",
+"G@ c #C0C0C0",
+"H@ c #C7C6C7",
+"I@ c #CACAC9",
+"J@ c #C9C9C8",
+"K@ c #C8C8C9",
+"L@ c #C8C8C8",
+"M@ c #585758",
+"N@ c #535152",
+"O@ c #504F50",
+"P@ c #4B4C4A",
+"Q@ c #494948",
+"R@ c #454646",
+"S@ c #434443",
+"T@ c #414241",
+"U@ c #3F3F40",
+"V@ c #3F3E3F",
+"W@ c #3E3E3D",
+"X@ c #3D3C3E",
+"Y@ c #393939",
+"Z@ c #373838",
+"`@ c #363535",
+" # c #343334",
+".# c #313232",
+"+# c #2E2E2E",
+"@# c #2D2D2D",
+"## c #2C2B2B",
+"$# c #2B2B2B",
+"%# c #2A2A2A",
+" c #29292A",
+"*# c #292929",
+"=# c #282828",
+"-# c #383938",
+";# c #5D5E5D",
+"># c #7A797A",
+",# c #919191",
+"'# c #B3B2B3",
+")# c #C8C7C8",
+"!# c #C8C7C7",
+"~# c #C8C8C7",
+"{# c #C7C7C6",
+"]# c #C6C6C7",
+"^# c #C6C6C5",
+"/# c #9D9D9D",
+"(# c #E4E4E5",
+"_# c #4A4B4A",
+":# c #484949",
+"<# c #474748",
+"[# c #444443",
+"}# c #424241",
+"|# c #3C3D3D",
+"1# c #3B3A3B",
+"2# c #383837",
+"3# c #353434",
+"4# c #333434",
+"5# c #313031",
+"6# c #302F2F",
+"7# c #2D2D2E",
+"8# c #2A2B2B",
+"9# c #292A2A",
+"0# c #292828",
+"a# c #282928",
+"b# c #272727",
+"c# c #262626",
+"d# c #242524",
+"e# c #C6C6C6",
+"f# c #C5C5C5",
+"g# c #C5C5C6",
+"h# c #424243",
+"i# c #3B3A3A",
+"j# c #383738",
+"k# c #343534",
+"l# c #343333",
+"m# c #313130",
+"n# c #302F30",
+"o# c #2D2C2C",
+"p# c #2C2C2D",
+"q# c #272626",
+"r# c #252625",
+"s# c #262525",
+"t# c #242424",
+"u# c #232423",
+"v# c #222223",
+"w# c #222222",
+"x# c #212121",
+"y# c #1F1F20",
+"z# c #30302F",
+"A# c #6A696A",
+"B# c #A0A09F",
+"C# c #C5C6C5",
+"D# c #E3E4E4",
+"E# c #555655",
+"F# c #535352",
+"G# c #4E4D4D",
+"H# c #424142",
+"I# c #414040",
+"J# c #3F403F",
+"K# c #3C3C3D",
+"L# c #39393A",
+"M# c #383637",
+"N# c #323233",
+"O# c #323132",
+"P# c #303031",
+"Q# c #2F2E2E",
+"R# c #2E2E2D",
+"S# c #2B2C2C",
+"T# c #2B2A2A",
+"U# c #272627",
+"V# c #252525",
+"W# c #242423",
+"X# c #232222",
+"Y# c #212221",
+"Z# c #202021",
+"`# c #202020",
+" $ c #1F1F1F",
+".$ c #1E1E1F",
+"+$ c #1E1D1D",
+"@$ c #1D1C1D",
+"#$ c #C4C5C5",
+"$$ c #C4C4C4",
+"%$ c #525253",
+"&$ c #515252",
+"*$ c #4E4E4F",
+"=$ c #4D4C4D",
+"-$ c #4B4A4B",
+";$ c #414041",
+">$ c #3C3C3B",
+",$ c #393938",
+"'$ c #363536",
+")$ c #353435",
+"!$ c #333433",
+"~$ c #2B2A2B",
+"{$ c #2A2B2A",
+"]$ c #292829",
+"^$ c #262627",
+"/$ c #252624",
+"($ c #252424",
+"_$ c #222322",
+":$ c #20201F",
+"<$ c #1E1F1E",
+"[$ c #1D1D1D",
+"}$ c #1C1D1D",
+"|$ c #1C1C1C",
+"1$ c #C4C5C4",
+"2$ c #4F4F4E",
+"3$ c #444344",
+"4$ c #3E3F3E",
+"5$ c #3E3D3E",
+"6$ c #393A39",
+"7$ c #393838",
+"8$ c #363736",
+"9$ c #2F302F",
+"0$ c #2D2E2D",
+"a$ c #2E2D2E",
+"b$ c #2D2D2C",
+"c$ c #2B2B2C",
+"d$ c #2B2B2A",
+"e$ c #262526",
+"f$ c #242324",
+"g$ c #232324",
+"h$ c #212222",
+"i$ c #202121",
+"j$ c #1F2020",
+"k$ c #1F1F1E",
+"l$ c #1D1C1C",
+"m$ c #1B1B1C",
+"n$ c #C4C4C3",
+"o$ c #E3E2E3",
+"p$ c #555455",
+"q$ c #515251",
+"r$ c #4B4C4C",
+"s$ c #3D3E3D",
+"t$ c #3B3D3C",
+"u$ c #3A3A3B",
+"v$ c #373837",
+"w$ c #373637",
+"x$ c #2F2E2F",
+"y$ c #232323",
+"z$ c #1E1E1D",
+"A$ c #1B1C1C",
+"B$ c #1C1B1B",
+"C$ c #1B1B1B",
+"D$ c #C3C4C4",
+"E$ c #C3C3C3",
+"F$ c #464546",
+"G$ c #3E3F3F",
+"H$ c #3E3D3D",
+"I$ c #3D3D3C",
+"J$ c #3A3B3B",
+"K$ c #323333",
+"L$ c #313030",
+"M$ c #2F3030",
+"N$ c #2E2F2F",
+"O$ c #2D2D2B",
+"P$ c #2A2B29",
+"Q$ c #292A29",
+"R$ c #282726",
+"S$ c #202120",
+"T$ c #1E1E1E",
+"U$ c #19191A",
+"V$ c #C3C3C4",
+"W$ c #E2E1E1",
+"X$ c #4A4949",
+"Y$ c #484849",
+"Z$ c #3A3B3A",
+"`$ c #373738",
+" % c #373736",
+".% c #252425",
+"+% c #222122",
+"@% c #212122",
+"#% c #1A1B1B",
+"$% c #1B1A1A",
+"%% c #1A1919",
+"&% c #E2E1E2",
+"*% c #E1E0E1",
+"=% c #505051",
+"-% c #49494A",
+";% c #1A1A1A",
+">% c #3A393A",
+",% c #2E2F2E",
+"'% c #282727",
+")% c #242425",
+"!% c #232322",
+"~% c #1E1F1F",
+"{% c #1B1C1B",
+"]% c #1A191A",
+"^% c #191A19",
+"/% c #191918",
+"(% c #C2C2C2",
+"_% c #E0E1E1",
+":% c #E1E1E0",
+"<% c #4B4B4C",
+"[% c #454445",
+"}% c #161515",
+"|% c #8B8B8B",
+"1% c #2C2C2B",
+"2% c #282827",
+"3% c #272728",
+"4% c #262727",
+"5% c #1F1E1F",
+"6% c #1A1A19",
+"7% c #181818",
+"8% c #C1C1C2",
+"9% c #E1E0E0",
+"0% c #464746",
+"a% c #111111",
+"b% c #7C7C7C",
+"c% c #BBBBBB",
+"d% c #969697",
+"e% c #5F5F5C",
+"f% c #33332F",
+"g% c #28292A",
+"h% c #262726",
+"i% c #201F20",
+"j% c #1F201F",
+"k% c #191919",
+"l% c #171717",
+"m% c #4C4C4B",
+"n% c #444445",
+"o% c #444343",
+"p% c #1A1717",
+"q% c #211515",
+"r% c #2D2B2B",
+"s% c #999999",
+"t% c #B3B3B5",
+"u% c #8B8BB2",
+"v% c #6F6F89",
+"w% c #4A4A4F",
+"x% c #2A2929",
+"y% c #2B2C2B",
+"z% c #2A292A",
+"A% c #232424",
+"B% c #212120",
+"C% c #181718",
+"D% c #171818",
+"E% c #171716",
+"F% c #C1C1C1",
+"G% c #C0C1C1",
+"H% c #DFE0E0",
+"I% c #484948",
+"J% c #422121",
+"K% c #552D2D",
+"L% c #363232",
+"M% c #A0A0A0",
+"N% c #646464",
+"O% c #ABABAE",
+"P% c #7575C7",
+"Q% c #5C5CD5",
+"R% c #7878BD",
+"S% c #7B7B8E",
+"T% c #585855",
+"U% c #30302E",
+"V% c #2A2A29",
+"W% c #212020",
+"X% c #201E1F",
+"Y% c #1E1D1E",
+"Z% c #1C1C1D",
+"`% c #1A1B1A",
+" & c #191A1A",
+".& c #171616",
+"+& c #161616",
+"@& c #C0C0C1",
+"#& c #414242",
+"$& c #1F1C1C",
+"%& c #542424",
+"&& c #4C2625",
+"*& c #585756",
+"=& c #A8A8A8",
+"-& c #767677",
+";& c #9D9D9E",
+">& c #8A8AAD",
+",& c #5A5AC4",
+"'& c #3838D7",
+")& c #3434D9",
+"!& c #4848BD",
+"~& c #535372",
+"{& c #878888",
+"]& c #A4A4A4",
+"^& c #A7A6A6",
+"/& c #B0B0B0",
+"(& c #B1B1B1",
+"_& c #A1A1A1",
+":& c #808080",
+"<& c #151515",
+"[& c #242525",
+"}& c #1D1E1E",
+"|& c #1A1A1B",
+"1& c #191819",
+"2& c #181817",
+"3& c #161717",
+"4& c #151516",
+"5& c #C1C0C0",
+"6& c #DFDEDE",
+"7& c #5B2020",
+"8& c #391A19",
+"9& c #A4A4A5",
+"0& c #878687",
+"a& c #8E8E8E",
+"b& c #9B9B98",
+"c& c #999994",
+"d& c #888898",
+"e& c #6C6BA8",
+"f& c #4F4FBD",
+"g& c #50508B",
+"h& c #CECDCD",
+"i& c #6A6A6A",
+"j& c #242323",
+"k& c #222121",
+"l& c #1F1E1E",
+"m& c #1C1D1C",
+"n& c #151514",
+"o& c #BFC0BF",
+"p& c #DFDFDE",
+"q& c #434445",
+"r& c #3F3E40",
+"s& c #1B1212",
+"t& c #611717",
+"u& c #301414",
+"v& c #797878",
+"w& c #9C9C9D",
+"x& c #888888",
+"y& c #8A8A89",
+"z& c #868688",
+"A& c #7C7C8F",
+"B& c #45455C",
+"C& c #B8B8B8",
+"D& c #C5C4C4",
+"E& c #AAA9A9",
+"F& c #252523",
+"G& c #222323",
+"H& c #171817",
+"I& c #161516",
+"J& c #141514",
+"K& c #141313",
+"L& c #C0BFBF",
+"M& c #4D4E4E",
+"N& c #464645",
+"O& c #1B0F0F",
+"P& c #570D0D",
+"Q& c #270D0D",
+"R& c #706F6F",
+"S& c #838383",
+"T& c #757474",
+"U& c #878787",
+"V& c #6F6F6F",
+"W& c #5C5C5A",
+"X& c #353533",
+"Y& c #656565",
+"Z& c #BCBCBC",
+"`& c #BFBFBF",
+" * c #C1C2C1",
+".* c #696969",
+"+* c #1D1D1E",
+"@* c #191818",
+"#* c #131313",
+"$* c #DDDEDD",
+"%* c #110F0F",
+"&* c #220B0B",
+"** c #201B1B",
+"=* c #7D7D7C",
+"-* c #727272",
+";* c #898989",
+">* c #BBBBBA",
+",* c #BCBCBB",
+"'* c #BDBDBD",
+")* c #676868",
+"!* c #7A7A7A",
+"~* c #1D1D1C",
+"{* c #181918",
+"]* c #141414",
+"^* c #131314",
+"/* c #131312",
+"(* c #BEBFBF",
+"_* c #454546",
+":* c #3B3B3C",
+"<* c #181919",
+"[* c #818181",
+"}* c #656465",
+"|* c #888787",
+"1* c #9B9B9B",
+"2* c #ADADAD",
+"3* c #B4B4B4",
+"4* c #B5B5B5",
+"5* c #B5B5B4",
+"6* c #B6B6B5",
+"7* c #B6B6B7",
+"8* c #B7B7B7",
+"9* c #B7B8B8",
+"0* c #767676",
+"a* c #121213",
+"b* c #212021",
+"c* c #141413",
+"d* c #111212",
+"e* c #9A9A9A",
+"f* c #515152",
+"g* c #616162",
+"h* c #949495",
+"i* c #A6A6A6",
+"j* c #AFAFAF",
+"k* c #ACADAD",
+"l* c #B2B2B2",
+"m* c #B0B0AF",
+"n* c #AFAFB0",
+"o* c #B3B3B3",
+"p* c #B5B4B4",
+"q* c #1C1B1C",
+"r* c #131414",
+"s* c #121313",
+"t* c #121212",
+"u* c #BEBDBD",
+"v* c #DCDCDD",
+"w* c #6E6E6E",
+"x* c #A5A5A5",
+"y* c #A9A9A9",
+"z* c #ABABAA",
+"A* c #AAAAA9",
+"B* c #ABA9A9",
+"C* c #ABAAAB",
+"D* c #ABABAC",
+"E* c #ACACAC",
+"F* c #666766",
+"G* c #141314",
+"H* c #1D1E1D",
+"I* c #1B1A1B",
+"J* c #131213",
+"K* c #101111",
+"L* c #586362",
+"M* c #5D6F74",
+"N* c #596767",
+"O* c #555A58",
+"P* c #A2A2A3",
+"Q* c #A2A2A2",
+"R* c #A3A3A3",
+"S* c #A5A5A3",
+"T* c #A6A7A7",
+"U* c #A5A4A5",
+"V* c #A8A7A7",
+"W* c #A9A8A9",
+"X* c #9C9C9C",
+"Y* c #424342",
+"Z* c #6C6D6C",
+"`* c #101010",
+" = c #151616",
+".= c #131412",
+"+= c #101110",
+"@= c #0F0F0F",
+"#= c #BDBCBD",
+"$= c #DBDCDC",
+"%= c #7FA3AE",
+"&= c #79A5EC",
+"*= c #5F80EB",
+"== c #485FD4",
+"-= c #4758B4",
+";= c #516392",
+">= c #586874",
+",= c #55605F",
+"'= c #393A3A",
+")= c #2D2E2F",
+"!= c #9E9E9E",
+"~= c #979897",
+"{= c #9A9B9B",
+"]= c #929493",
+"^= c #8C8D8D",
+"/= c #979797",
+"(= c #989999",
+"_= c #969898",
+":= c #979898",
+"<= c #9B9C9C",
+"[= c #A2A1A2",
+"}= c #737272",
+"|= c #A6A5A6",
+"1= c #616161",
+"2= c #1B1B1A",
+"3= c #181717",
+"4= c #161615",
+"5= c #151414",
+"6= c #121112",
+"7= c #111110",
+"8= c #7A9DAE",
+"9= c #597AF5",
+"0= c #5373F9",
+"a= c #668CFC",
+"b= c #5D80FC",
+"c= c #5271FB",
+"d= c #5576F5",
+"e= c #739AE6",
+"f= c #7495A5",
+"g= c #607578",
+"h= c #54646B",
+"i= c #58686B",
+"j= c #505A59",
+"k= c #484B4B",
+"l= c #323432",
+"m= c #919292",
+"n= c #959494",
+"o= c #878686",
+"p= c #7A7979",
+"q= c #7C7777",
+"r= c #807778",
+"s= c #776F6F",
+"t= c #706565",
+"u= c #7B6C6B",
+"v= c #847171",
+"w= c #7C6B6B",
+"x= c #746464",
+"y= c #736262",
+"z= c #7A6969",
+"A= c #807070",
+"B= c #807676",
+"C= c #807C7C",
+"D= c #949696",
+"E= c #9E9F9F",
+"F= c #757575",
+"G= c #171617",
+"H= c #151615",
+"I= c #141415",
+"J= c #121111",
+"K= c #0F1010",
+"L= c #0F0F10",
+"M= c #0E0F0E",
+"N= c #BDBDBC",
+"O= c #5B6766",
+"P= c #799CA3",
+"Q= c #76979D",
+"R= c #6F8D9F",
+"S= c #97CEEF",
+"T= c #76A2FB",
+"U= c #4C69FC",
+"V= c #1B27FD",
+"W= c #3549F4",
+"X= c #5979E3",
+"Y= c #698DE4",
+"Z= c #77A2F2",
+"`= c #688EE1",
+" - c #5C78C4",
+".- c #576FA2",
+"+- c #55697C",
+"@- c #4D5C5F",
+"#- c #333E39",
+"$- c #3D3B37",
+"%- c #6F6766",
+"&- c #786868",
+"*- c #7D6666",
+"=- c #947676",
+"-- c #9C7979",
+";- c #9D7676",
+">- c #AB7E7E",
+",- c #BA8888",
+"'- c #B88585",
+")- c #B17E7E",
+"!- c #B57E7E",
+"~- c #BD8383",
+"{- c #BD8181",
+"]- c #B07777",
+"^- c #A06A6A",
+"/- c #956161",
+"(- c #8A5B5B",
+"_- c #7D5858",
+":- c #755F5F",
+"<- c #807878",
+"[- c #7D7D7D",
+"}- c #797979",
+"|- c #131212",
+"1- c #0F0F0E",
+"2- c #0D0E0E",
+"3- c #BCBBBC",
+"4- c #DBDADB",
+"5- c #424545",
+"6- c #4F5756",
+"7- c #9BD0D5",
+"8- c #6D96FC",
+"9- c #435DFC",
+"0- c #3E55FC",
+"a- c #5270FC",
+"b- c #5878F8",
+"c- c #4862F2",
+"d- c #435DF8",
+"e- c #4D6BF8",
+"f- c #597BFC",
+"g- c #5B7DFB",
+"h- c #5E81FB",
+"i- c #678DEF",
+"j- c #7198D3",
+"k- c #354658",
+"l- c #5B4442",
+"m- c #B6817F",
+"n- c #C68B8B",
+"o- c #C38787",
+"p- c #C78888",
+"q- c #CE8C8C",
+"r- c #CA8686",
+"s- c #C68181",
+"t- c #C78080",
+"u- c #C87F7F",
+"v- c #C57B7B",
+"w- c #C37777",
+"x- c #C07373",
+"y- c #C17271",
+"z- c #C17070",
+"A- c #BF6B6B",
+"B- c #BB6767",
+"C- c #B15F5F",
+"D- c #9E5453",
+"E- c #744343",
+"F- c #302929",
+"G- c #161617",
+"H- c #141515",
+"I- c #131413",
+"J- c #100F10",
+"K- c #0F0E0E",
+"L- c #0E0E0E",
+"M- c #0D0D0D",
+"N- c #BBBCBB",
+"O- c #DAD9DA",
+"P- c #40403F",
+"Q- c #739297",
+"R- c #78A2E4",
+"S- c #7AA6E2",
+"T- c #86B1C5",
+"U- c #6A879E",
+"V- c #6A879A",
+"W- c #708F95",
+"X- c #7C9FA0",
+"Y- c #5F7788",
+"Z- c #576C96",
+"`- c #5974B8",
+" ; c #5774D8",
+".; c #4B67F1",
+"+; c #4661FD",
+"@; c #3549D3",
+"#; c #2F236D",
+"$; c #A86F81",
+"%; c #C17777",
+"&; c #C27472",
+"*; c #C17272",
+"=; c #BE6F6F",
+"-; c #BC6C6C",
+";; c #BC6969",
+">; c #BA6766",
+",; c #B96363",
+"'; c #B86060",
+"); c #B75D5D",
+"!; c #B55B5B",
+"~; c #B35757",
+"{; c #B25554",
+"]; c #B15251",
+"^; c #B04F4F",
+"/; c #AF4C4C",
+"(; c #AF4A49",
+"_; c #763030",
+":; c #291313",
+"<; c #0C0C0C",
+"[; c #BBBBBC",
+"}; c #434241",
+"|; c #49504F",
+"1; c #697F7E",
+"2; c #607270",
+"3; c #464C4B",
+"4; c #454748",
+"5; c #3B3D3D",
+"6; c #454848",
+"7; c #4D5353",
+"8; c #637D7F",
+"9; c #7BA3C0",
+"0; c #688EE9",
+"a; c #364CD9",
+"b; c #564EC6",
+"c; c #8F639C",
+"d; c #B06D77",
+"e; c #B75A55",
+"f; c #B55753",
+"g; c #B25352",
+"h; c #B15050",
+"i; c #B04E4D",
+"j; c #AE4A4A",
+"k; c #AD4747",
+"l; c #AC4444",
+"m; c #AA4242",
+"n; c #A93F3F",
+"o; c #A83C3C",
+"p; c #A63939",
+"q; c #A53636",
+"r; c #A43333",
+"s; c #8F2C2C",
+"t; c #451616",
+"u; c #541A1A",
+"v; c #663B3B",
+"w; c #848383",
+"x; c #1C1A1C",
+"y; c #0E0F0F",
+"z; c #0E0D0D",
+"A; c #0D0D0C",
+"B; c #BBBABB",
+"C; c #BABBBA",
+"D; c #D9DAD9",
+"E; c #3E4645",
+"F; c #5A6F74",
+"G; c #7094BE",
+"H; c #5A7EF1",
+"I; c #3F52F7",
+"J; c #4A49DD",
+"K; c #6E3D9B",
+"L; c #914B73",
+"M; c #A13B45",
+"N; c #A73735",
+"O; c #A6332F",
+"P; c #A42F2C",
+"Q; c #A22C2B",
+"R; c #A02B2C",
+"S; c #9F2929",
+"T; c #9E2626",
+"U; c #9D2323",
+"V; c #9B2020",
+"W; c #9A1E1D",
+"X; c #951919",
+"Y; c #581010",
+"Z; c #3B0909",
+"`; c #7E1C1C",
+" > c #671B1B",
+".> c #2F2929",
+"+> c #101011",
+"@> c #0B0B0B",
+"#> c #D8D9D8",
+"$> c #3B3C3C",
+"%> c #353534",
+"&> c #353334",
+"*> c #454949",
+"=> c #6B8382",
+"-> c #779FB5",
+";> c #76A2EF",
+">> c #5B72EE",
+",> c #555CDE",
+"'> c #623AA0",
+")> c #762969",
+"!> c #872F51",
+"~> c #922C3C",
+"{> c #952129",
+"]> c #941619",
+"^> c #950D0B",
+"/> c #960B07",
+"(> c #950B06",
+"_> c #930907",
+":> c #8F0707",
+"<> c #680504",
+"[> c #350200",
+"}> c #4D0301",
+"|> c #680D0E",
+"1> c #391213",
+"2> c #252E29",
+"3> c #242B25",
+"4> c #252A26",
+"5> c #151415",
+"6> c #121312",
+"7> c #111211",
+"8> c #10100F",
+"9> c #0E0E0F",
+"0> c #0D0C0D",
+"a> c #0C0C0B",
+"b> c #0A0A0B",
+"c> c #B9BABA",
+"d> c #2F2F30",
+"e> c #313333",
+"f> c #51656B",
+"g> c #587293",
+"h> c #5574C3",
+"i> c #5170F4",
+"j> c #4658F3",
+"k> c #4A4BDB",
+"l> c #5943B8",
+"m> c #6B3E8F",
+"n> c #793468",
+"o> c #7F264C",
+"p> c #7E1435",
+"q> c #7E0320",
+"r> c #82051B",
+"s> c #70030D",
+"t> c #2B0003",
+"u> c #170002",
+"v> c #3A0B12",
+"w> c #35272C",
+"x> c #3F5785",
+"y> c #455FC7",
+"z> c #4961B0",
+"A> c #495E89",
+"B> c #445664",
+"C> c #3C4A49",
+"D> c #0A0B0B",
+"E> c #0A0A09",
+"F> c #BAB9BA",
+"G> c #2D2E2E",
+"H> c #2E3030",
+"I> c #323231",
+"J> c #464C4C",
+"K> c #6B8887",
+"L> c #6C8FA1",
+"M> c #6183BB",
+"N> c #5071D2",
+"O> c #4463E8",
+"P> c #3E55F8",
+"Q> c #414EED",
+"R> c #4B45CF",
+"S> c #5131AA",
+"T> c #502EA3",
+"U> c #2E1FA3",
+"V> c #09089D",
+"W> c #0A0B8D",
+"X> c #202788",
+"Y> c #5476B4",
+"Z> c #7BAAF4",
+"`> c #5879FB",
+" , c #5D7FFD",
+"., c #5C7FFB",
+"+, c #658AF7",
+"@, c #749FE8",
+"#, c #6383A7",
+"$, c #4B616A",
+"%, c #394443",
+"&, c #1C1F1F",
+"*, c #100F0F",
+"=, c #0B0B0C",
+"-, c #0B0B0A",
+";, c #0A0A0A",
+">, c #090909",
+",, c #B9B9B9",
+"', c #333332",
+"), c #303130",
+"!, c #2E2D2D",
+"~, c #2A2A2B",
+"{, c #2B2D2D",
+"], c #363F40",
+"^, c #445358",
+"/, c #526873",
+"(, c #5C778D",
+"_, c #607FA4",
+":, c #5D7FBE",
+"<, c #597ED6",
+"[, c #577BE9",
+"}, c #3E56B9",
+"|, c #5E81D3",
+"1, c #5574D4",
+"2, c #425AD8",
+"3, c #425BF1",
+"4, c #3C54FB",
+"5, c #3B52FC",
+"6, c #4660FC",
+"7, c #5574FC",
+"8, c #5473FC",
+"9, c #455FFC",
+"0, c #4059F5",
+"a, c #516EE2",
+"b, c #6A91CA",
+"c, c #587480",
+"d, c #2E3636",
+"e, c #0D0C0C",
+"f, c #0C0B0C",
+"g, c #0A090A",
+"h, c #B8B9B8",
+"i, c #D8D7D7",
+"j, c #D7D7D8",
+"k, c #333232",
+"l, c #282B2C",
+"m, c #363F41",
+"n, c #4B5B5B",
+"o, c #5B6F6D",
+"p, c #3C4747",
+"q, c #404D54",
+"r, c #465861",
+"s, c #495C67",
+"t, c #577285",
+"u, c #5E7EA0",
+"v, c #5B7ABA",
+"w, c #6084ED",
+"x, c #5677FB",
+"y, c #6388FC",
+"z, c #82B3FB",
+"A, c #86B8FB",
+"B, c #5575FB",
+"C, c #354AFC",
+"D, c #4F6EF8",
+"E, c #719BD3",
+"F, c #62838E",
+"G, c #4B6466",
+"H, c #32403F",
+"I, c #171919",
+"J, c #0A0A0C",
+"K, c #080908",
+"L, c #070708",
+"M, c #B9B8B9",
+"N, c #B9B9B8",
+"O, c #383937",
+"P, c #2C2D2C",
+"Q, c #252626",
+"R, c #272C30",
+"S, c #4E6676",
+"T, c #5C7CB0",
+"U, c #5A7CEB",
+"V, c #4159FC",
+"W, c #435CFC",
+"X, c #374CFC",
+"Y, c #3347FC",
+"Z, c #1C27FD",
+"`, c #222FFD",
+" ' c #4864F7",
+".' c #5C7EE9",
+"+' c #7098D4",
+"@' c #5A798B",
+"#' c #394948",
+"$' c #252A2A",
+"%' c #0B0A0B",
+"&' c #0B0A09",
+"*' c #090808",
+"=' c #070808",
+"-' c #070707",
+";' c #B8B7B8",
+">' c #D6D7D7",
+",' c #D7D6D7",
+"'' c #343435",
+")' c #2D2D2F",
+"!' c #282929",
+"~' c #2C2F2E",
+"{' c #576E6D",
+"]' c #6B90A6",
+"^' c #658AE8",
+"/' c #3245FD",
+"(' c #3F56FC",
+"_' c #84B6FB",
+":' c #76A1DB",
+"<' c #5370C0",
+"[' c #4A65D9",
+"}' c #455FF7",
+"|' c #4661FA",
+"1' c #5D7FE7",
+"2' c #6D94B7",
+"3' c #3C4D4D",
+"4' c #0B0C0C",
+"5' c #080809",
+"6' c #060606",
+"7' c #B7B8B7",
+"8' c #D7D6D6",
+"9' c #3F3F3E",
+"0' c #363635",
+"a' c #282829",
+"b' c #1A1C1C",
+"c' c #495F68",
+"d' c #6B92CC",
+"e' c #5474FC",
+"f' c #75A0FB",
+"g' c #769FA3",
+"h' c #283137",
+"i' c #364651",
+"j' c #5B7A97",
+"k' c #6C93DA",
+"l' c #5979FB",
+"m' c #4D6AFC",
+"n' c #6283CF",
+"o' c #4D676B",
+"p' c #0D0D0E",
+"q' c #0A0909",
+"r' c #080808",
+"s' c #070706",
+"t' c #060605",
+"u' c #D6D5D6",
+"v' c #606061",
+"w' c #272726",
+"x' c #232223",
+"y' c #212220",
+"z' c #1C1C1B",
+"A' c #3E4C4A",
+"B' c #77A2C3",
+"C' c #82B1EC",
+"D' c #6A8F90",
+"E' c #2B3332",
+"F' c #55727E",
+"G' c #6D95E0",
+"H' c #658AFB",
+"I' c #8EC3D8",
+"J' c #283432",
+"K' c #050505",
+"L' c #B8B7B7",
+"M' c #D6D6D5",
+"N' c #C5C5C4",
+"O' c #848484",
+"P' c #252526",
+"Q' c #181819",
+"R' c #353E3D",
+"S' c #4F6664",
+"T' c #313D3D",
+"U' c #111010",
+"V' c #3F5255",
+"W' c #53718E",
+"X' c #688C93",
+"Y' c #1D2425",
+"Z' c #080707",
+"`' c #050606",
+" ) c #050406",
+".) c #040404",
+"+) c #B7B7B6",
+"@) c #D3D3D2",
+"#) c #292928",
+"$) c #111312",
+"%) c #0B0A0A",
+"&) c #080807",
+"*) c #080607",
+"=) c #060505",
+"-) c #050504",
+";) c #D1D1D2",
+">) c #858484",
+",) c #272827",
+"') c #0F100F",
+")) c #0E0D0E",
+"!) c #0C0D0C",
+"~) c #080A09",
+"{) c #090809",
+"]) c #060707",
+"^) c #060506",
+"/) c #040505",
+"() c #030303",
+"_) c #B6B5B5",
+":) c #CFCECF",
+"<) c #CFCECE",
+"[) c #BDBEBE",
+"}) c #0E0D0F",
+"|) c #0C0D0D",
+"1) c #0C0B0B",
+"2) c #0A0B0A",
+"3) c #090A0A",
+"4) c #070807",
+"5) c #050506",
+"6) c #040303",
+"7) c #030403",
+"8) c #020202",
+"9) c #CFCFCE",
+"0) c #CDCCCC",
+"a) c #828282",
+"b) c #252524",
+"c) c #121011",
+"d) c #0C0C0D",
+"e) c #060706",
+"f) c #020203",
+"g) c #010202",
+"h) c #B4B4B5",
+"i) c #555554",
+"j) c #CCCCCD",
+"k) c #CBCCCB",
+"l) c #CACBCA",
+"m) c #0E0E0D",
+"n) c #030404",
+"o) c #010101",
+"p) c #B5B4B5",
+"q) c #B4B5B4",
+"r) c #C9CACA",
+"s) c #C8C9C9",
+"t) c #C9C8C9",
+"u) c #777877",
+"v) c #121311",
+"w) c #050405",
+"x) c #040403",
+"y) c #020201",
+"z) c #000000",
+"A) c #4F504E",
+"B) c #C9C8C8",
+"C) c #C7C7C8",
+"D) c #C6C7C6",
+"E) c #60605F",
+"F) c #050404",
+"G) c #000001",
+"H) c #B3B4B4",
+"I) c #C7C6C6",
+"J) c #C5C6C6",
+"K) c #C6C5C6",
+"L) c #B2B3B3",
+"M) c #949494",
+"N) c #7E7E7E",
+"O) c #171718",
+"P) c #0D0E0D",
+"Q) c #09090A",
+"R) c #080909",
+"S) c #070607",
+"T) c #060504",
+"U) c #020303",
+"V) c #B3B3B4",
+"W) c #666666",
+"X) c #9F9F9F",
+"Y) c #C4C3C4",
+"Z) c #C2C2C3",
+"`) c #C0C0BF",
+" ! c #BCBBBB",
+".! c #909191",
+"+! c #141516",
+"@! c #121211",
+"#! c #0F0E0F",
+"$! c #090908",
+"%! c #070606",
+"&! c #050605",
+"*! c #020101",
+"=! c #B2B3B2",
+"-! c #4D4E4D",
+";! c #929292",
+">! c #C2C3C2",
+",! c #C1C2C2",
+"'! c #C2C1C2",
+")! c #0B0C0B",
+"!! c #030202",
+"~! c #000100",
+"{! c #B3B2B2",
+"]! c #4B4C4B",
+"^! c #464745",
+"/! c #AFB0AF",
+"(! c #ADAEAE",
+"_! c #ABAAAA",
+":! c #BFBFBE",
+"~ c #565756",
+",~ c #989998",
+"'~ c #A0A1A0",
+")~ c #A4A3A4",
+"!~ c #454946",
+"~~ c #444644",
+"{~ c #B0B1B1",
+"]~ c #B1B0B1",
+"^~ c #B6B7B7",
+"/~ c #787877",
+"(~ c #757676",
+"_~ c #747474",
+":~ c #8C8D8C",
+"<~ c #9D9C9D",
+"[~ c #A8A8A7",
+"}~ c #545353",
+"|~ c #989797",
+"1~ c #9F9F9E",
+"2~ c #A0A1A1",
+"3~ c #8C8C8B",
+"4~ c #706F70",
+"5~ c #455646",
+"6~ c #4F6A51",
+"7~ c #4F7153",
+"8~ c #506B54",
+"9~ c #515653",
+"0~ c #B1B1B0",
+"a~ c #B4B5B5",
+"b~ c #777677",
+"c~ c #727172",
+"d~ c #6B6C6C",
+"e~ c #80807F",
+"f~ c #919090",
+"g~ c #9E9E9F",
+"h~ c #A4A5A4",
+"i~ c #A6A7A6",
+"j~ c #898888",
+"k~ c #6E6E6D",
+"l~ c #5F5F60",
+"m~ c #797A7A",
+"n~ c #7E7F7F",
+"o~ c #777777",
+"p~ c #616060",
+"q~ c #4C634E",
+"r~ c #5A8B5E",
+"s~ c #63A86A",
+"t~ c #63AC6A",
+"u~ c #47854E",
+"v~ c #565A57",
+"w~ c #474C48",
+"x~ c #626263",
+"y~ c #767777",
+"z~ c #767675",
+"A~ c #717171",
+"B~ c #6E6E6F",
+"C~ c #6C6D6D",
+"D~ c #6A6969",
+"E~ c #676767",
+"F~ c #656665",
+"G~ c #676766",
+"H~ c #727373",
+"I~ c #5C5C5B",
+"J~ c #6A6A6B",
+"K~ c #7B7A7B",
+"L~ c #626262",
+"M~ c #4C634F",
+"N~ c #5D9361",
+"O~ c #6ECA78",
+"P~ c #7AE984",
+"Q~ c #6FCD78",
+"R~ c #609D67",
+"S~ c #47774A",
+"T~ c #535754",
+"U~ c #454745",
+"V~ c #6B6A6B",
+"W~ c #6C6B6B",
+"X~ c #B1B1B2",
+"Y~ c #777676",
+"Z~ c #747575",
+"`~ c #717271",
+" { c #6D6E6D",
+".{ c #6B6B6A",
+"+{ c #686767",
+"@{ c #646363",
+"#{ c #5D5D5C",
+"${ c #777776",
+"%{ c #878788",
+"&{ c #969596",
+"*{ c #9A9898",
+"={ c #9A9A99",
+"-{ c #646463",
+";{ c #7B7C7C",
+">{ c #7B7C7B",
+",{ c #707170",
+"'{ c #575756",
+"){ c #4D624F",
+"!{ c #5D9463",
+"~{ c #74D47F",
+"{{ c #86FF91",
+"]{ c #81F68C",
+"^{ c #76D882",
+"/{ c #6DB373",
+"({ c #5C8B61",
+"_{ c #5B675E",
+":{ c #454C46",
+"<{ c #696968",
+"[{ c #B0B0B1",
+"}{ c #ABACAB",
+"|{ c #787777",
+"1{ c #717170",
+"2{ c #696869",
+"3{ c #666565",
+"4{ c #646465",
+"5{ c #636363",
+"6{ c #605F5F",
+"7{ c #575758",
+"8{ c #8B8A8B",
+"9{ c #949393",
+"0{ c #5C9361",
+"a{ c #73D07D",
+"b{ c #86FD92",
+"c{ c #7FFC8A",
+"d{ c #74F182",
+"e{ c #72CA7B",
+"f{ c #639D67",
+"g{ c #617264",
+"h{ c #4C544E",
+"i{ c #444645",
+"j{ c #666566",
+"k{ c #A5A4A4",
+"l{ c #969797",
+"m{ c #787778",
+"n{ c #636364",
+"o{ c #606161",
+"p{ c #5D5C5C",
+"q{ c #585958",
+"r{ c #5C5C5D",
+"s{ c #868787",
+"t{ c #7F807F",
+"u{ c #4F6251",
+"v{ c #5B9361",
+"w{ c #64C46E",
+"x{ c #61DD6C",
+"y{ c #3DBE49",
+"z{ c #25AA32",
+"A{ c #43C44D",
+"B{ c #63DA6F",
+"C{ c #76DB82",
+"D{ c #77B880",
+"E{ c #668E6B",
+"F{ c #586659",
+"G{ c #454844",
+"H{ c #606160",
+"I{ c #616261",
+"J{ c #656566",
+"K{ c #666767",
+"L{ c #ADADAC",
+"M{ c #A8A9A8",
+"N{ c #9A9999",
+"O{ c #6A6A69",
+"P{ c #626261",
+"Q{ c #5F605F",
+"R{ c #818081",
+"S{ c #868685",
+"T{ c #506252",
+"U{ c #5FC36A",
+"V{ c #58D863",
+"W{ c #2AB336",
+"X{ c #079412",
+"Y{ c #1FAC2C",
+"Z{ c #40CA4E",
+"`{ c #62E76F",
+" ] c #77E983",
+".] c #72CB7B",
+"+] c #66A56C",
+"@] c #66796B",
+"#] c #4D5750",
+"$] c #464846",
+"%] c #636362",
+"&] c #7C7B7B",
+"*] c #939292",
+"=] c #8A8B8A",
+"-] c #676768",
+";] c #848485",
+">] c #818281",
+",] c #7F7E7E",
+"'] c #7B7B7A",
+")] c #5C9362",
+"!] c #62C76C",
+"~] c #60E26C",
+"{] c #30C23D",
+"]] c #019D0D",
+"^] c #06A211",
+"/] c #17AF21",
+"(] c #35C63F",
+"_] c #57DE62",
+":] c #72F17C",
+"<] c #7BE885",
+"[] c #6FC077",
+"}] c #619367",
+"|] c #57655C",
+"1] c #484C48",
+"2] c #A5A6A6",
+"3] c #9F9FA0",
+"4] c #8B8C8B",
+"5] c #818180",
+"6] c #7E7D7E",
+"7] c #7C7C7D",
+"8] c #787978",
+"9] c #636463",
+"0] c #62C86B",
+"a] c #5FE66C",
+"b] c #32CB3F",
+"c] c #06AC12",
+"d] c #0DB319",
+"e] c #13BA1F",
+"f] c #12BB1D",
+"g] c #1DC227",
+"h] c #34CF3F",
+"i] c #50E05A",
+"j] c #6CE977",
+"k] c #75DA7E",
+"l] c #6AAC71",
+"m] c #57805A",
+"n] c #535C55",
+"o] c #434543",
+"p] c #5D5D5E",
+"q] c #616160",
+"r] c #626161",
+"s] c #7C7D7C",
+"t] c #9B9A9A",
+"u] c #666667",
+"v] c #818182",
+"w] c #7D7E7D",
+"x] c #757475",
+"y] c #62C76B",
+"z] c #5EE76A",
+"A] c #30D13C",
+"B] c #05B711",
+"C] c #10C01C",
+"D] c #15C421",
+"E] c #0BBE16",
+"F] c #09BD14",
+"G] c #13C11E",
+"H] c #2CCF37",
+"I] c #50E25D",
+"J] c #6BF076",
+"K] c #75E481",
+"L] c #72BE7A",
+"M] c #639166",
+"N] c #657269",
+"O] c #565D58",
+"P] c #505251",
+"Q] c #5F6060",
+"R] c #707171",
+"S] c #807F80",
+"T] c #8E8E8F",
+"U] c #979696",
+"V] c #959594",
+"W] c #686869",
+"X] c #7F8080",
+"Y] c #7E7E7F",
+"Z] c #7C7D7D",
+"`] c #737374",
+" ^ c #62C96B",
+".^ c #5EE96A",
+"+^ c #30D53C",
+"@^ c #03BE0F",
+"#^ c #0EC81A",
+"$^ c #17D023",
+"%^ c #15CF21",
+"&^ c #11CE1D",
+"*^ c #0BC715",
+"=^ c #0EC718",
+"-^ c #22D02D",
+";^ c #45DF4E",
+">^ c #6CF479",
+",^ c #80F38B",
+"'^ c #7AD682",
+")^ c #6CAF72",
+"!^ c #5F8464",
+"~^ c #5C655F",
+"{^ c #525553",
+"]^ c #535453",
+"^^ c #5B595B",
+"/^ c #5F5F5E",
+"(^ c #747473",
+"_^ c #838384",
+":^ c #908F90",
+"<^ c #919192",
+"[^ c #7D7C7D",
+"}^ c #818282",
+"|^ c #808081",
+"1^ c #7F7F80",
+"2^ c #61CA6B",
+"3^ c #5DEB69",
+"4^ c #2ED93B",
+"5^ c #01C60D",
+"6^ c #0CD118",
+"7^ c #15D921",
+"8^ c #13D91F",
+"9^ c #10D91D",
+"0^ c #0FD51A",
+"a^ c #0ED119",
+"b^ c #0ECD19",
+"c^ c #18CB22",
+"d^ c #2CD238",
+"e^ c #3FD84A",
+"f^ c #4EDC5A",
+"g^ c #61D46B",
+"h^ c #73C27B",
+"i^ c #6D9D72",
+"j^ c #627865",
+"k^ c #545E54",
+"l^ c #5B5A5C",
+"m^ c #5C5D5D",
+"n^ c #828181",
+"o^ c #5A595A",
+"p^ c #676667",
+"q^ c #8A8A8A",
+"r^ c #7A7A7B",
+"s^ c #4F6151",
+"t^ c #62CA69",
+"u^ c #5EEE68",
+"v^ c #2EDF3A",
+"w^ c #00CD0C",
+"x^ c #0AD916",
+"y^ c #12E21E",
+"z^ c #11E11B",
+"A^ c #11E11C",
+"B^ c #11DF1C",
+"C^ c #10DB1B",
+"D^ c #0AD615",
+"E^ c #07CA14",
+"F^ c #0CC61A",
+"G^ c #17C625",
+"H^ c #26CB34",
+"I^ c #41D64E",
+"J^ c #68E473",
+"K^ c #74D37D",
+"L^ c #6FB176",
+"M^ c #728D7E",
+"N^ c #5E6F60",
+"O^ c #545955",
+"P^ c #9E9E9D",
+"Q^ c #838282",
+"R^ c #767576",
+"S^ c #868585",
+"T^ c #797A79",
+"U^ c #737273",
+"V^ c #5C6E5F",
+"W^ c #5F9664",
+"X^ c #61CB69",
+"Y^ c #5EEF69",
+"Z^ c #2CE239",
+"`^ c #00D20B",
+" / c #09DD13",
+"./ c #11E71C",
+"+/ c #0EE918",
+"@/ c #0EEB18",
+"#/ c #0EE719",
+"$/ c #11DF1B",
+"%/ c #11DC1C",
+"&/ c #12D51E",
+"*/ c #0AC116",
+"=/ c #04B610",
+"-/ c #15BB21",
+";/ c #3ECF4A",
+">/ c #63E76E",
+",/ c #7FEC89",
+"'/ c #7ECF89",
+")/ c #6BA873",
+"!/ c #697D6E",
+"~/ c #545B56",
+"{/ c #7F7E7F",
+"]/ c #989897",
+"^/ c #9C9D9C",
+"// c #738575",
+"(/ c #71A977",
+"_/ c #6AD471",
+":/ c #5EF069",
+" c #2CE337",
+"[/ c #00D30A",
+"}/ c #07E012",
+"|/ c #10EC1B",
+"1/ c #0CF017",
+"2/ c #0CF218",
+"3/ c #0BEC18",
+"4/ c #0DE41A",
+"5/ c #10DF1C",
+"6/ c #12D81E",
+"7/ c #13D120",
+"8/ c #11C71D",
+"9/ c #0EBD1B",
+"0/ c #10B61B",
+"a/ c #1BB326",
+"b/ c #35C441",
+"c/ c #5DDF68",
+"d/ c #73EC7F",
+"e/ c #7AE484",
+"f/ c #71BE79",
+"g/ c #6F8F74",
+"h/ c #576658",
+"i/ c #535553",
+"j/ c #9C9B9C",
+"k/ c #9B9B9A",
+"l/ c #768879",
+"m/ c #77AE7C",
+"n/ c #6DD775",
+"o/ c #5FF06A",
+"p/ c #00D40A",
+"q/ c #12EC1D",
+"r/ c #0EEE19",
+"s/ c #0FF019",
+"t/ c #0EEB19",
+"u/ c #0FE51B",
+"v/ c #10DF1E",
+"w/ c #13D71F",
+"x/ c #15D121",
+"y/ c #18CA22",
+"z/ c #19C323",
+"A/ c #13B81D",
+"B/ c #0CAA18",
+"C/ c #16A923",
+"D/ c #32B93E",
+"E/ c #4FD15B",
+"F/ c #66E773",
+"G/ c #70E87D",
+"H/ c #71CF7A",
+"I/ c #69A370",
+"J/ c #68796D",
+"K/ c #59625A",
+"L/ c #545654",
+"M/ c #838483",
+"N/ c #8D8D8C",
+"O/ c #959696",
+"P/ c #959795",
+"Q/ c #757574",
+"R/ c #656666",
+"S/ c #7D7E7E",
+"T/ c #737372",
+"U/ c #76AE7C",
+"V/ c #6DD676",
+"W/ c #5FF06B",
+"X/ c #2EE239",
+"Y/ c #01D10C",
+"Z/ c #0ADC14",
+"`/ c #13E81E",
+" ( c #0FE81A",
+".( c #0FE619",
+"+( c #10E11B",
+"@( c #11DB1D",
+"#( c #13D31F",
+"$( c #14CE21",
+"%( c #16C722",
+"&( c #18C324",
+"*( c #1ABC26",
+"=( c #18B226",
+"-( c #14A422",
+";( c #119A1E",
+">( c #1A9D26",
+",( c #2EB039",
+"'( c #50D05C",
+")( c #71EE7C",
+"!( c #78E382",
+"~( c #71BB79",
+"{( c #649269",
+"]( c #606E63",
+"^( c #525953",
+"/( c #747374",
+"(( c #979796",
+"_( c #939392",
+":( c #7D7D7E",
+"<( c #777878",
+"[( c #747373",
+"}( c #768878",
+"|( c #6DD675",
+"1( c #5EEC6B",
+"2( c #2DDE3A",
+"3( c #00CB0C",
+"4( c #0BD616",
+"5( c #13E020",
+"6( c #0FE01C",
+"7( c #10DF1B",
+"8( c #11DE1C",
+"9( c #13D91D",
+"0( c #12D21E",
+"a( c #13CD1F",
+"b( c #15CA21",
+"c( c #18C424",
+"d( c #19C025",
+"e( c #19B927",
+"f( c #1AB429",
+"g( c #1AA927",
+"h( c #179E24",
+"i( c #169A23",
+"j( c #1A9E28",
+"k( c #30B23C",
+"l( c #49CA56",
+"m( c #5FDF6D",
+"n( c #71E47B",
+"o( c #70CE78",
+"p( c #6AAB6F",
+"q( c #718A77",
+"r( c #5B6D5E",
+"s( c #575958",
+"t( c #7A7B7B",
+"u( c #929393",
+"v( c #7C7C7B",
+"w( c #758778",
+"x( c #77AE7D",
+"y( c #6DD575",
+"z( c #5EEC6A",
+"A( c #2FDA3B",
+"B( c #03C40D",
+"C( c #0DCE16",
+"D( c #16D721",
+"E( c #12D71F",
+"F( c #12D61E",
+"G( c #13D41D",
+"H( c #13D01F",
+"I( c #15CC21",
+"J( c #17C523",
+"K( c #18C024",
+"L( c #19BD25",
+"M( c #1BB527",
+"N( c #1CAF29",
+"O( c #1DAA2A",
+"P( c #1FA42C",
+"Q( c #1BA029",
+"R( c #179B24",
+"S( c #179C24",
+"T( c #1EA32C",
+"U( c #3CC04A",
+"V( c #61E06C",
+"W( c #73F180",
+"X( c #7CE587",
+"Y( c #71BF79",
+"Z( c #5F9264",
+"`( c #4D6B51",
+" _ c #7A7B7A",
+"._ c #929293",
+"+_ c #898A8A",
+"@_ c #666665",
+"#_ c #6F7070",
+"$_ c #6A806D",
+"%_ c #6BA472",
+"&_ c #68D070",
+"*_ c #5DE869",
+"=_ c #2FD33C",
+"-_ c #04BC0F",
+";_ c #0EC619",
+">_ c #17CF23",
+",_ c #16CE20",
+"'_ c #16CC21",
+")_ c #16CD22",
+"!_ c #16CB22",
+"~_ c #17C823",
+"{_ c #17C423",
+"]_ c #18C023",
+"^_ c #18BE24",
+"/_ c #19B725",
+"(_ c #1CAF26",
+"__ c #1CA728",
+":_ c #1DA529",
+"<_ c #20A32B",
+"[_ c #1CA029",
+"}_ c #10951D",
+"|_ c #0A8D15",
+"1_ c #1CA028",
+"2_ c #40C14C",
+"3_ c #67E774",
+"4_ c #83FA90",
+"5_ c #7AD785",
+"6_ c #65A76B",
+"7_ c #58785C",
+"8_ c #535755",
+"9_ c #898988",
+"0_ c #787879",
+"a_ c #797978",
+"b_ c #757675",
+"c_ c #6D8170",
+"d_ c #6BA470",
+"e_ c #67CF70",
+"f_ c #5FE86B",
+"g_ c #31CE3D",
+"h_ c #06B510",
+"i_ c #11BE1A",
+"j_ c #1AC725",
+"k_ c #18C621",
+"l_ c #18C522",
+"m_ c #18C323",
+"n_ c #17C123",
+"o_ c #16BD22",
+"p_ c #18B824",
+"q_ c #19B527",
+"r_ c #1AAF29",
+"s_ c #1DAC29",
+"t_ c #1EA52A",
+"u_ c #1FA62B",
+"v_ c #20A22C",
+"w_ c #1A9C28",
+"x_ c #139720",
+"y_ c #159A23",
+"z_ c #2AAD38",
+"A_ c #45C651",
+"B_ c #5EDE6A",
+"C_ c #71E67B",
+"D_ c #75D17E",
+"E_ c #69A46E",
+"F_ c #65786A",
+"G_ c #535D54",
+"H_ c #89898A",
+"I_ c #858685",
+"J_ c #848384",
+"K_ c #808180",
+"L_ c #757576",
+"M_ c #747475",
+"N_ c #6A6B6B",
+"O_ c #6B7D6C",
+"P_ c #6BA46E",
+"Q_ c #64CB6D",
+"R_ c #5FE56A",
+"S_ c #33C73F",
+"T_ c #08AB14",
+"U_ c #13B51D",
+"V_ c #1CBF27",
+"W_ c #18BD24",
+"X_ c #18BE25",
+"Y_ c #18BD26",
+"Z_ c #1ABA26",
+"`_ c #1AB926",
+" : c #19B525",
+".: c #1BB126",
+"+: c #1BAD27",
+"@: c #1DA82A",
+"#: c #1EA52B",
+"$: c #1EA22B",
+"%: c #1DA129",
+"&: c #1B9F26",
+"*: c #189C25",
+"=: c #1AA027",
+"-: c #31B43E",
+";: c #55D660",
+">: c #69E473",
+",: c #70DF7B",
+"': c #6BBE72",
+"): c #5C8F62",
+"!: c #526655",
+"~: c #4A4C4B",
+"{: c #838382",
+"]: c #747576",
+"^: c #737473",
+"/: c #647867",
+"(: c #67A16C",
+"_: c #64C86D",
+":: c #60E36C",
+"<: c #32C242",
+"[: c #08A218",
+"}: c #14AD21",
+"|: c #1EB828",
+"1: c #1AB426",
+"2: c #1BB526",
+"3: c #1AB528",
+"4: c #1CB428",
+"5: c #1CB228",
+"6: c #1BAF27",
+"7: c #1DAB29",
+"8: c #1FA62A",
+"9: c #1FA42A",
+"0: c #1DA028",
+"a: c #199E25",
+"b: c #10941D",
+"c: c #0A9118",
+"d: c #1C9F29",
+"e: c #3BBC49",
+"f: c #5FDA6C",
+"g: c #7AEB86",
+"h: c #76CC7F",
+"i: c #64A46C",
+"j: c #52785F",
+"k: c #4F554E",
+"l: c #79797A",
+"m: c #7A7A79",
+"n: c #767776",
+"o: c #585959",
+"p: c #5E7260",
+"q: c #639D68",
+"r: c #64C76E",
+"s: c #62E16D",
+"t: c #35BC42",
+"u: c #0D9719",
+"v: c #19A224",
+"w: c #20AE2C",
+"x: c #1DAC2B",
+"y: c #1CAC2A",
+"z: c #1DAC2A",
+"A: c #1EA92A",
+"B: c #1EA62A",
+"C: c #1EA42B",
+"D: c #179D25",
+"E: c #189C26",
+"F: c #20A52E",
+"G: c #2BAD38",
+"H: c #38BA45",
+"I: c #4ECE59",
+"J: c #65DD6F",
+"K: c #6DD177",
+"L: c #6BB173",
+"M: c #658A6B",
+"N: c #58655A",
+"O: c #494E49",
+"P: c #6B6A6A",
+"Q: c #747574",
+"R: c #566A58",
+"S: c #5E9963",
+"T: c #64C56D",
+"U: c #61DE6C",
+"V: c #35B742",
+"W: c #0E911B",
+"X: c #199C26",
+"Y: c #21A52D",
+"Z: c #1EA42A",
+"`: c #1DA42B",
+" < c #1EA32A",
+".< c #1FA22A",
+"+< c #1FA12A",
+"@< c #1EA12B",
+"#< c #1B9E28",
+"$< c #22A42D",
+"%< c #38BA44",
+"&< c #4DCE59",
+"*< c #61DD6D",
+"=< c #6FDF7A",
+"-< c #73C87C",
+";< c #669E6C",
+">< c #567459",
+",< c #4C544D",
+"'< c #566958",
+")< c #639E69",
+"!< c #67CB70",
+"~< c #61E16C",
+"{< c #36B945",
+"]< c #0F931C",
+"^< c #1B9E27",
+"/< c #22A42E",
+"(< c #20A42C",
+"_< c #21A32C",
+":< c #21A42E",
+"<< c #20A32E",
+"[< c #1DA12B",
+"}< c #22A630",
+"|< c #3EC049",
+"1< c #62E36E",
+"2< c #72ED7E",
+"3< c #74D77B",
+"4< c #69AF6F",
+"5< c #5A835D",
+"6< c #556158",
+"7< c #778B79",
+"8< c #75AF7A",
+"9< c #6ED277",
+"0< c #35B943",
+"a< c #1A9E27",
+"b< c #21A52F",
+"c< c #20A32D",
+"d< c #20A42D",
+"e< c #1FA32D",
+"f< c #1DA12A",
+"g< c #149821",
+"h< c #2CB039",
+"i< c #49CB55",
+"j< c #61E06D",
+"k< c #72E27C",
+"l< c #70C277",
+"m< c #659669",
+"n< c #627167",
+"o< c #445045",
+"p< c #77B27C",
+"q< c #6ED278",
+"r< c #61E16D",
+"s< c #21A52E",
+"t< c #30B13B",
+"u< c #4ACA56",
+"v< c #66DE71",
+"w< c #6FD879",
+"x< c #6AAF6F",
+"y< c #5B845F",
+"z< c #535C56",
+"A< c #444845",
+"B< c #10931C",
+"C< c #22A62F",
+"D< c #1FA22C",
+"E< c #0F941C",
+"F< c #169B23",
+"G< c #34B741",
+"H< c #51D25E",
+"I< c #6BE876",
+"J< c #72E17C",
+"K< c #6BBF73",
+"L< c #5B685F",
+"M< c #4A504B",
+"N< c #36BA45",
+"O< c #0E931C",
+"P< c #169B24",
+"Q< c #19A028",
+"R< c #189E26",
+"S< c #36BA43",
+"T< c #5BDA68",
+"U< c #70E47C",
+"V< c #71CE7B",
+"W< c #68A96E",
+"X< c #5D7D65",
+"Y< c #4A5B4B",
+"Z< c #62E16E",
+"`< c #35BA43",
+" [ c #0D9219",
+".[ c #149920",
+"+[ c #1A9F27",
+"@[ c #1FA22B",
+"#[ c #2DAF39",
+"$[ c #44C450",
+"%[ c #5FD869",
+"&[ c #76DF7F",
+"*[ c #77BE7E",
+"=[ c #64906A",
+"-[ c #59685D",
+";[ c #484D49",
+">[ c #6BCF74",
+",[ c #5BDB67",
+"'[ c #2BAE37",
+")[ c #01850D",
+"![ c #31B33D",
+"~[ c #51D05D",
+"{[ c #6BEA77",
+"][ c #75EB80",
+"^[ c #64A36B",
+"/[ c #657963",
+"([ c #4D5851",
+"_[ c #788C7A",
+":[ c #78B27D",
+"<[ c #6ED177",
+"[[ c #61E06E",
+"}[ c #39BC45",
+"|[ c #1A9F25",
+"1[ c #33B53F",
+"2[ c #4FCF5A",
+"3[ c #68E275",
+"4[ c #79DC82",
+"5[ c #72BA79",
+"6[ c #629367",
+"7[ c #5E6C63",
+"8[ c #47534A",
+"9[ c #5D725F",
+"0[ c #6FAA74",
+"a[ c #73D67C",
+"b[ c #6FEC7A",
+"c[ c #56D762",
+"d[ c #47CC53",
+"e[ c #5CDA68",
+"f[ c #6ADC76",
+"g[ c #6DC976",
+"h[ c #669F6B",
+"i[ c #58785B",
+"j[ c #4E6751",
+"k[ c #5E9B65",
+"l[ c #75D57D",
+"m[ c #86FE90",
+"n[ c #80FF8C",
+"o[ c #7AF985",
+"p[ c #7AE182",
+"q[ c #64AE6B",
+"r[ c #667F6C",
+"s[ c #526254",
+"t[ c #7EEF89",
+"u[ c #86FB94",
+"v[ c #84EF91",
+"w[ c #79CB82",
+"x[ c #829F8B",
+"y[ c #5B6F5E",
+"z[ c #82FF8E",
+"A[ c #80FF8D",
+"B[ c #7CFF88",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . . . ",
+" + + + . . . . . . . ",
+" + + + + + @ # # $ . . . . . . ",
+" + + % + & # * = - ; > , ' . . . . . ",
+" + + ) ! ~ { ] ^ / > ' ' ' ( _ : . . . . . . . . ",
+" + + ) ) ) ) ) < [ } | 1 2 3 3 4 5 5 6 7 8 8 . . . . . ",
+" + # ) ) ) ) ) 9 0 a b c 0 d e f 8 8 7 g 8 h i j k . . . . . . ",
+" l # ) ) ) m n 0 o p q r s t u v w x { y z k k A A B C D f . . . . . . . ",
+" # # ) ) E F 0 a G H I J K L v M N O P u Q R S T A U U f f f V V W X . . . . . . ",
+" Y $ ) ) Z 9 0 ` H r J ...+.+.@.#.$.%.&.*.=.-.;.>.! ,.'.).!.~.{.~.].^.^./.(.. . . . . ",
+" _.- ) 9 0 0 H p :.s t ..v M M N P %.&.*.<.[.}.}.|.1.2.3.4.5.6.7.8.9.^.(./.0.a.% b.. . . . . . . . ",
+" - ; 9 n a c.H d.e. .u v f.N N P g.h.&.[.i.j.k.k.1.3.l.4.m.n.n.o.&.) p.,.q.r.s.t.u.v.w.x.y.y.z.. . . . . ",
+" ; > A.0 a H q B.s ..v C.M D.N g.&.&.<.i.[.E.F.|.G.3.H.I.J.K.L.M.N.O.O.P.Q.R.S.T.U.^ V.y.y.W.z.1 1 V.. . . . . . ",
+" X.> 0 a b H Y.s s L f.C.N P Z.h.&.&.`.[.j.k.1. +3.4.J.n.n.L.M..+++@+P.Q.R.#+$+%+&+i.*+=+-+;+>+,+V.'+)+)+)+!+. . . . . . . ",
+" > ~+a c.{+B.e.u ]+^+/+(+P %.h._+:+:+[.k.k.<+[+4.4.I.}+n.|+M.1+O.O.2+Q.3+4+5+%+6+7+8+9+0+a+4.N b+c+d+)+e+f+g+^ ^ h+i+j+. . . . . . ",
+" , ' c.H r s t u v M N N P k+_+l+[.[.m+k.k.[+3.4.n+I.}+o+M.M.p+q+r+Q.s+#+t+a+u+v+8+9+w+0+x+y+z+A+A+B+C+D+E+F+G+H+U.I+J+K+K+L+M+. . . . . . . ",
+" ' ' :.r Y.s L v v N N N+g.&.O+<.[.-.P+k.1.3.4.Q+R+n.o+M.S+T+O.2+Q.Q.#+5+U+a+v+V+W+X+Y+Z+y+`+ @A+B+.@+@@@#@$@..%@&@*@=@-@L+;@>@>@,@'@)@!@. . . . . . ",
+" ~@3 r s {@..v /+]@D.^@g.k+`.<.[.}./@k.2.(@l._@I.n.o+:@M.p+O.P.<@#+3+$+$+&+v+8+9+[@0+x+y+`+}@A+B+|@+@@@#@1@2@3@4@5@6@R.7@8@9@>@,@'@'@0@G+a@b@b@c@. . . . . ",
+" 3 3 r s ..d@+.@.N D.g.g.`.e@=.;.E.k.2.3.H.f@}+J.g@o.h@i@O.@+j@Q.#+k@$+a+v+V+l@9+0+m@n@y+6@A+o@p@q@r@#@s@t@u@v@w@x@y@z@A@B@C@D@M E@F@G@H@b@I@b@=@J@K@L@. . . . . . ",
+" 3 4 .]+M@M N N $.Z.&.N@`.[.O@>.k.1. +3.P@I.n.Q@:@M.N.R@2+P.S@4+T@$+a+U@V@W@X@w+0+y+y+Y@A+Z@|@q@`@#@ #$@.#4@w@w@x@+#@#B@##$#%#*#=#-#;#>#,#'#F+L@)#!#~#{#]#^#. /#/# ",
+" (#5 ..v ^+M N P Z.g.l+`.<.}.}.k.1.1.3._#_@R+:#<#M.p+O.O.[#Q.s+}#$+a+v+8+8+|#0+Y+1#y+Y@-#2#.@q@@@3#4#$@3@u@5#6#x@+#7#B@C@8#$#9#0#a#b#c#c#d#b#w@.@u ,#q.{#{#e#f#g#/#/# ",
+" 5 6 ..v ]@N $.P g.&.`.:+j.>./@|.3.3.Q+I.I.o+o+M.p+++O.[#Q.h#t+$+a+v+8+W@9+w+0+i#y+Y@ @j#B+.@@@k#s@l#3@3@m#n#6#x@7#o#p#$#%#%#*#=#=#q#r#s#t#u#v#w#x#x#y#z#A#B#C#f#/#/# ",
+" D#6 M M E#P g.F#&.`.e@}.}.k.G#1.3.4.n+}+g@o+1+M.p+@+r+<@s+H#t+I#J#v+8+|#K#Y+i#y+L# @A+M#q@q@k# # #N#O#4@P#x@Q#R#p#C@S#T#9#*#0#=#U#c#V#d#W#X#v#Y#Z#`# $.$+$@$#$$$/#/# ",
+" 5 6 M @.D.P g.%$&$:+;.m+*$1.=$3.4.-$J.o+g@M.N.R@O.P.S@Q.H#$+;$J#V@W+9+w+>$x+y+Y@,$A+B+q@'$)$#@!$3@v@4@w@6#y@+#@#p#$#~${$]$a#=#q#^$/$($t#_$w#x#`#:$y#<$[$}$|$1$$$/#/# ",
+" 6 6 (+D.N+g.F#O+:+[.2$*$F.=$2.l.4.I.:#o+o+1+p+R@P.3$Q.#+$+;$J#v+4$5$|#Y+x+y+6$7$A+B+8$@@k##@l#N#3@4@w@9$y@0$a$b$c$d${$*#=#=#b#c#e$t#f$g$w#h$i$j$ $k$+$}$l$m$$$n$/#/# ",
+" o$8 p$P g.&.q$<.[.}.k.G#1.3.r$n+R+n.Q@L.M.p+@+O.3$Q.#+H#$+U@v+4$s$9+t$n@u$`+Y@A+v$w$q@r@#@#@2@O#4@w@z#x$+#@#p#C@~$%#*#a#=#b#c#V#V#t#y$w#x#Z#Z# $.$z$[$A$B$C$D$E$/#/# ",
+" 8 h P g.%$&.`.[.7@}.G#1.G.4.Q+I.n.n.o+p+p+F$P.<@S@#+a+9+8+v+G$H$I$K#x+J$L# @A+o@|@q@@@)$s@K$3@4@L$M$N$+#7#O$S#c$P$Q$*#a#R$q#c#t#($u#v#h$S$`#`#T$z$+$|$C$C$U$V$E$/#/# ",
+" W$i ^@k+*.q$=.}.}.k.G#G.H._#f@X$Y$o+M.p+++2+P.<@#+8+y$[$Q$8$5$9+w+>$Z$y+Y@7$`$ %q@@@)$4#t@3@4@w@w@x@+#+#@#S#c$$##0#b#c#c#.%t#t#X#+%@%`# $T$T$[$|$|$#%$%%%] ] /#/# ",
+" &%*%F#&.q$=%j.j.k.<+3.r$4._#-%g@|+M.1+O.O.P.<@s+H#u$;%V#@@o#y$K$y+x+>%Y@7$Z@.@q@@@#@#@$@3@v@P#z#N$,%a$o#S###{$*#=#'%c#r#V#)%y$!%w#`#`# $~%T$+$l${%C$]%^%/%] (%/#/# ",
+" _%:%&.l+i.[.}.|.1.1.r$<%I.n.n.Y$M.S+p+[%[%j@#+H#t+0+}%4@g.|%s @#w#6#q@-#Z@w$q@@@k#s@$@t@O#m#w@6#y@+#@#C@1%T#%#*#2%3%4%s#V#t#g$y$w#+%`#`#5%T$T$|$A$C$;%6%/%7%(%8%/#/# ",
+" 9%A *.:+[.}.*$|.1.3.-$-$I.:#Y$1+1+0%[%P.j@s+#+H#9+8$a%Y@4.b%c%d%e%f%V#y@B+|@r@@@#@$@2@w@6#P#x@+#+#7#S#C@$#%#g%=#b#h%c#V#d#t#y$w#w#Z#i%j%T$[$[$|$C$$%6%k%7%l%(%8%/#/# ",
+" A A :+[.j.E.F.1.m%4.f@I.Q@L.<#M.T+O.n%o%s+#+$+a+7#p%q%r%D+0+s%t%u%v%w%W#k%]$4@u@$#t#w#f$b#x%$#@#@#C@y%d$z%*#=#2%q#c#r#)%A%y$w#x#B%`#k$5%+$@$|$C$;%6%k%C%D%E%F%G%/#/# ",
+" A H%[.;.>.F.1.H.4.-$J.m.I%M.M.p+O.2+P.R.h#k@a+V@X#J%K%L%M%g.N%O%P%Q%R%S%T%U%C$C$;%B+$+A+=# $C$l$t#$#d$T#V%*#=#b#^$s#V#t#y$X#Y#W%`#X%T$Y%Z%|$B$`% &k%7%C%.&+&G%@&/#/# ",
+" U U m+/@|.F.H.<%4.I.J.Q@o.M.N.O.n%P.Q.#+#&%+a+V+$&%&&&*&=&-&Q.;&>&,&'&)&!&~&+&p+{&]&^&/&(&_&:&g.=#<&Y%b#]$3%4%c#r#[&)%y$X#w#x#`#i%.$}&z$|${%|&6%k%1&2&3&+&4&5&G@/#/# ",
+" U 6&>.<+1.2.<%<%J.n.K.:@M.T+++O.[#Q.#+$+$+a+V@K#p%7&8&5.9&0&$@a&b&c&d&e&f&g&A+M%1$b@h&>@G+J@g#e /#i&3#7%C$w#U#V#)%A%j&_$k&x#W% $l&T$m&l$B$;%;%k%7%7%l%+&<&n&G@o&/#/# ",
+" p&D k.1.3.<%4.R+m.n.|+o.S+O.q+q&R.s+H#$+a+r&G$,$s&t&u&v&w&x&@#:&x a&y&z&A&B&I.C&$$$$D&f#f#^#q.=@a@f#E&`.k%7%`%V#F&y$G&Y#B%S$i%T$T$@$|$|$#%;% &7%l%H&+&I&J&K&L&o&/#/# ",
+" p&f M&=$3.<%R+X$n.o+M.S+N&n%P.Q.#+#+5+a+u+4$8+q@O&P&Q&R&,.S&+#T&U&. *+V&W&X&Y&Z&`&`&G@G@G@F%F%F% *(%] b%P..*+*;%f$G&w#x#W%`# $z$T$m&|$C$;%U$@*C%l%+&+&n&n*o&`&/#/# ",
+" f $*(@<%-$I.m.n.o+o.p+R@[%[#P.#+H#$+5+v+v+8+K#3#%*&***Q.=*-*4@@+1.3.8+3@#+&.;*e e e >*c%,*Z&Z&Z&'*'*F@)*0 '*!*7%T$+%@%`# $ $T$[$~*|$;%;%k%{*@*l%+&<&<&]*^*/*8.(*/#/# ",
+" V V 3.4.n+-%n.:@|+S+_*O.n%Q.Q.#&$+;$J#7+W@H$:*1%<*[.[*x+h#$+w#y+*$N }*|*E@1*2*3*4*5*6*E+7*8*8*9*C&C&2*J.0*e 4*`.a*b*x#i%<$5%z$Z%|$$%;%;%{*2&D%+&}%4&c*#*/*d*`&y /#/# ",
+" V W r$_#J.n.o+o+S+p+O.2+Q.#+h#$+a+%+4$8+W@K#2#;%o+e*-+D+f*g*[*,#h*i*j*k*j*l*/&j*m*n*(&(&(&l*l*l*o*o*&@x+,#p*4*x |$C$W% $.$z$|$q*B$#%;%%%7%l%.&+&<&J&r*s*t*a%y u*/#/# ",
+" v*{.-$J.n.o+C+.+p+_*M.P.R.H#T@I#v+v+8+9+9+0+4#<&w*x*x*x*_&y*^&-+z*A*=&=&7.y*B*C*| D*E*E*E*2*2*2*{ E*F*M.]&j*/&z*S@G* $k$H*[$|$I*;%;%1&<*l%.&+&<&]*r*J*t*a%K*u*'*/#/# ",
+" W ~.I.n.o+C+M.p+T+L*M*N*O*2$C+#&v+4$8+K#0+m@o@]%`./#P*Q*R*P*Q*Q*R*S*]&R*i*T*i*U*i*=&=&V*=&=&=&W*y*X*Y*w y*7.| E*Z*`*H*+*[$~*C$`%`%k%7%7%.&I& =]*#*.=t*a%+=@=u*#=/#/# ",
+" ~.$=R+o+|+M.p+F$2+%=&=*===-=;=>=,=8+[@0+I$y+'=)=U$k.,#R*_&M%M%Q*!=~=1*{=]=^=,#/=(=_=:=<=[=]&]&]&R*}=B+|%|=|=i*9&1=`*C$}$|$A$2=6%k%{*C%3=+&4=5=r*#*t*6=7=`*@='*'*/#/# ",
+" ].^.Q@o+h@N.++q+3$8=9=0=a=b=c=d=e=f=g=h=i=j=k=v+l=+&`+U&m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C={&D=E==+M.&.X*[=Q*_&F=$#`*|$m&C$C$;%k%<*2&G=3&H=I=r*#*t*J=a%K=L=M='*N=/#/# ",
+" ^.^.o+o.p+F$O.<@<@O=P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-,-'-)-!-~-{-]-^-/-(-_-:-<-R&3@[-M%_&X*}-w@`*k%~*q*C$#%k%<*7%G=+&+&5=]*^*|-J=J=`*@=1-2-Z&3-/#/# ",
+" 4-(.:@p+p+O.P.j@Q.#+;$5-6-7-8-9-0-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-3.s%_&1*}-$@a%7%Z%A$C$;%%%1&7%l%G-}%H-]*I-J*t*a%`*J-K-L-M-3-N-/#/# ",
+" (.O-N.R@O.q+S@Q.#+t+%+6+P-Q-R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;';);!;~;{;];^;/;(;_;:;t M%e*w*+#M-<*~*|$C$;%U$k%<*l%G=H=<&]*c*t*d*a%`*@=1-2-M-<;[;c%/#/# ",
+" (.).p+O.2+j@R.};}#5+J#v+8+|;1;2;3;4;v+Y@A+5;J#6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;! b#L-;%|$m&x;C$]%1&7%l%3&+&<&]*c*a*t*a%`*`*y;L-z;A;<;B;C;/#/# ",
+" O-D;O.n%[#P.#+$+%+&+v+v+W@X+0+x+y+y+ @A+o@|@q@@@3#$@E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;`; >.>%%a%I*}$Z%B$;%;%k%7%l%G-+& =I=G*s*t*J=+>`*@=L-M-M-<;@>C;e /#/# ",
+" % #>[%P.Q.#+#&;$u+v+8+9+9+$>x+i#Y@Y@ @ %p@q@%>&>l#2@.#4@*>=>->;>>>,>'>)>!>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4> $Z%B$C$U$%%<*l%l%I&<&5>G*6>t*7>`*8>9>L-2-0>a>@>b>e c>/#/# ",
+" % b.P.o%h#H#$+a+6+G$W@9+$>x+x+`+Y@6@o@w$'$r@#@l#K$O#O#4@d>x@e>f>g>h>i>j>k>l>m>n>o>p>q>r>s>t>u>v>w>x>y>z>A>B>C>x#|&/%k%D%3&E%<&]*]*/*t*6=7=J-@=L-2-M-<;@>D>E>F>F@/#/# ",
+" u.u.S@#+#&$+a+6+G$W@|#w+x+y+>%Y@7$j#w$q@@@@@#@$@3@v@m#w@x@z@G>H>I>J>K>L>M>N>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,&,l%+&H=n&]*#*t*t*a%`**,y;2-M-<;=,-,;,>,,,,,/#/# ",
+" u.w.s+t+;$a+a+7+8+9+0+>$x+'=Y@,$B+B+q@@@@@#@',N#O#),M$x@+#@#!,C@$#~,x%{,],^,/,(,_,:,<,[,},|,1,2,3,4,5,6,7,8,9,0,a,b,c,d,<&<&r*#*/*t*K*+>@=1-L-e,<;f,D>g,>,>,,,h,/#/# ",
+" i,j,#&$+U+6+v+W+s$X+$>x+'=6$}@o@p@q@'$k#4#$@k,3@5#M$x@z@+#@#C@S#~$%#*#]$3%b#c#V#l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,t*a%`*`*K-L-M-<;a>J,;,>,K,L,M,N,/#/# ",
+" j,9.H#a+u+v+8+l@9+0+n@Z$L# @O,B+.@'$%>#@$@N#I>4@),d>N$a$A@P,##$#V%*#0#2%b#Q,V#V#t#y$X#Y#S$v#5%T$T$T$R,S,T,U,V,W,X,Y,Z,`, '.'+'@'#'$'`*y;L-M-M-<;%'&'>,*'='-'C&;'/#/# ",
+" >','a+&+v+8+l@K#$>x+y+Y@Y@j#v$.@@@@@''$@K$3@L$L$M$,%)'@#C@$#$#9#*#!'2%4%c#V#V#t#y$w#Y#x#`# $.$T$[$|$C$y#~'{']'^'/'('_':'<'['}'|'1'2'3'3&0><;4'D>;,g,5'='L,6';'7'/#/# ",
+" 8'y.a+7+9'8+9+>$Z+J$`+Y@A+B+B+0'@@)$l#k,3@4@w@M$x@+#@#p#C@$#%#*#a'2%b#c#V#.%t#y$v#h$x#W%y#<$}&l$|$q*2=;%]%7%b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'a>4';,g,q'r'-'s't'T T /#/# ",
+" y.u'E@D+v'$+0+x+y+6$`+A+v$|@+@@@#@$@t@3@4@w@x@x@,%7#p#C@$#%#z%a#2%b#w's#V#W#y$x'k&y'`#y#.$T$+$|$z'I*6%%%7%3=l%}$A'B'C'D't*a%+&E'F'G'H'I'J'J,b>E>K,K,-'-'6'K'L'8*/#/# ",
+" M'1 1 1 '@N'8*O'=$Y@A+A+B++@r@k#l#$@N#4@4@M$x$z@+#C@p#1%%#*#]$'%b#w'P'V#)%W#w#+%x#`# $l&T$[$l$q*C$;%%%Q'7%l%+& =<&R'S'T'a%a%U'@=H-V'W'X'Y';,E>>,r'Z's'`' ).)+)E+/#/# ",
+" 1 V.V.'+)+)+@)f+f+i*S.-%#+Y@$@k,t@u@m#w@x@+#+#@#1%y%8#z%#)=#3%q#c#V#t#W#y$h$k&i$:$ $T$[$l$|$C$;%^%7%7%C%+&+&<&G*I-a*/*+>`*@=L-L-L-a%$)%);,q'r'&)*)6'=)-).)9@E+/#/# ",
+" d+@)e+f+;)^ ^ i+U.y /#>)< p+4@w@x@+#G>@#C@$#~$%#*#=#,)w'e$V#V#j&y$w#x#x#j$ $T$+*~*|$C$;%^%<*7%l%+&4=<&]*^*6>t*a%`*')y;))p'!)@>@>;,~){)&)])`'^)/).)()_)4*/#/# ",
+" &.^ i+U.H+K+:)<)b@D$[)1*! +#@#C@c$T#9#*#=#'%b#r#V#.%u#y$w#k&B%i% $T$H*~*|$C$I*6%7%7%3&.&+&<&J&c*a*6=7>+=@=@=})M-|)1)2)2)3)r'4)-'^)5).)6)7)8)_)4*/#/# ",
+" *.P N $.P ^@K+9)<)L+L+>@>@0)'@'@,,a)j.v+1@a#=#b#c#V#b)A%y$w#@%x#j$y#T$T$[$|${%I*]%<*{*7%.&+&<&]*G*J*6>c)7=@=L-1-M-d)<;@>;,E>*'r'-'e)5)/).)6)f)g)4*h)/#/# ",
+" `.i)i)P P g.F#&.&$`.:+[.7@>@j)'@)@k)a@l)b@g#=&|%F==%9#V#A%y$w#Y#i$i% $<$T$[$l$C$#%;%k%7%2&E%+&4=I=c*s*t*a%K=J-@=m)))e,a>@>;,g,>,r'*)6'K'K'n)()8)8)o)p)q)/#/# ",
+" j.i.k+N+g.g.g.g.&.l+q$`.[.}.}.M&F.3.3.4.G+b@b@r)=@s)t)q.(%y { u)Y@w#B%`# $<$z$[$|$C$C$ &k%7%7%E%+&<&5=]*J*v)J=a%`*@=9>M-M-<;@>b>q'K,&)Z'6'6'w).)x)8)g)y)z)q)3*/#/# ",
+" A)-.`._+*.O+f*`.f*`.e@[.[.-.}.}.F.1.3.<%4.I.-%o+L.h@=@B)L@L@C)q.{#D)^#C#s%E)K#4@_$|$z'$%;%k%k%D%l%+& =I=]*c*t*J=a%@=J-1-M-M-<;@>;,;,{)r'&)e)`'K'F)x)()y)o)G)z)H)o*/#/# ",
+" 1.}.-.i.[.=.[.[.=%[.7@7@j.}.>.k.M&1.G.3.4.f@I.m.o+o.M.R@<#.*e*e*/#q.I)J)K)f#$$$$$$L)M)N)) 3@%%Q'O)E%+&}%n&^*^*t*6=a%`**,M=P)M-!)f,%'Q)>,R)-'S)6'T)F)7)U)8)o)G)z)z)V)V)/#/# ",
+" -%3.G#M&k.k.}.}.}.}.2$2$/@}.P+*$|.<+1.G.3.<%Q+I.R+Q@o+o.h@_*[%W)/#/#/#/#/#X)Q*x*N'D&Y)D$E$E$Z)`) !C&.!}.@*+!5=]*I-t*@!a%K=8>#!z;M-0>@>%'q'$!K,Z'])%!&!.)n)f)8)*!z)z)z)z)V)=!/#/# ",
+" o+I.4.m%[+ +=$G#|.-!|.k.M&|.F.k.<+-!(@G.H.4._#_#I.n.:#o+C+.+++2+P.;!/#/#/#/#/#B#R*i*y*D*{ E$>!(%,!'!F%5&G@G@`)j*F=S@w@`#7>`*K=@=L-z;<;)!-,%)Q)r'r'-'6'=)w).)()!!g)~!z)z)z)z){!L)/#/# ",
+" p+M.:#I.n+4.4.]!H.3. +G.1. +2.=$G.3.(@3.r$4.4.I.I.m.n.o+o.M.^!++2+P.P.1*/#/#/#/#/#M%R*^&A*2*/!l*3*l*/&(!_!@&G@o&`&:!>,>,f!S)%!K'/).)()g!8)h!z)z)z)z)z)z)l*(&/#/# ",
+" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#i!j!k!l!E*j*m!3*V)(&{ | =&x*[=n!/#/#/#o!Z&Z&Z&c%c%e F>p!,,q!p$3@@%M-K'.)n)f)8)*!z)z)z)z)z)z)z)l*(&/#/# ",
+" P./=r!s!G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=t!9&u!7.2*v!w!(&j*x!y!z!x*Q*!=/#/#/#/#/#/#A!P.[!c>e ,,M,B!C&;'T.C!D!g. $8)E!E!z)z)z)z)z)z)z)(&(&/#/# ",
+" P.G%[;o*k!F!A!s!M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`.A!/#/#/#M%G!x*=&7.E*2*{ H!| y*^&I!J!K!/#/#/#/#/#/#1*P.P.P.P.P.B!;'9*8*8*9@E+q)=!8!|!v+6'z)z)z)z)z)z)(&/&/#/# ",
+" P.c%E+E+E++)4*L!u!B#M!w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.M!/#!=_&R*i*V*E&7.| 7.N!-+x*O!B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.P!+)E+6*4*4*h)3*o*Q!Q*p.x+b##*z)/&/&/#/#P. ",
+" P.R!p)3*R*/&S!T!U!w!j*V!W!j!X!Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+M)Y!Z!`!x*i*T* ~-+^&x*R*_&X)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.P.P..~.~o*L){!l*+~@~#~b%/&/&/#/#P.P.P.P.P. ",
+" P.B!Q!o*%@!*$~;*%~T*j*{ &~*~=~| E*-~;~a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.>~-*} ,~'~R*)~9&]&`!j!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.R@!~~~O.P.P.P.P.o*l*(&+~{~]~/&/&/&/#P.P.P.P.P.P.P.P.P.P.P. ",
+" P.^~l*(&!*}-/~0*(~_~s![-:~<~=&E&=&=&=&y*[~E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$}~s !*. a)C!|~1~2~2~/#/#e*1*/#e*3~. 4~K.P.P.P.P.P.P.P.P.P.P.p+5~6~7~8~9~P.P.P.P.P.P.P.0~/&/&/&P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O. ",
+" P.a~/&/&}-*+b~F=F=s!c~5.V&S.d~-*e~f~g~9&R*R*h~i~X)j~k~s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r l~}*i&V&_~m~n~N):&[*D+o~W)p~) P+J.P.P.O.P.P.P.P.P.P.P.P.M.q~r~s~t~u~v~w~P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.$+0 x~ ",
+" P.Q!L!L!*+y~z~_~_~}=A~4~B~C~p.D~w E~F~G~H~S&M)1~Y!1~i!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M I~! W)J~5.(~K~[-o~-*S.)*L~0 ..F#M&Y$o+P.P.P.P.P.P.P.P.P.P.M.M~N~O~P~Q~R~S~T~U~P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.P...i&V~W~ ",
+" P.X~2*H!Y~(~Z~s!s!`~5.B~ {p..{.*+{W)}*@{g*! m #{Q ${%{&{F!*{={F!|%. S.-{v I.a+$+#+Q.P.P.P.P.P.P.P.p.A~${;{>{0*,{p.W)1=a '{*.P.P.P.P.P.P.P.P.P.P.P.P.P.1+){!{~{{{]{^{/{({_{:{P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M.g.W).*E~<{i& ",
+" P.[{}{| !@|{s!-*-*1{V&k~S.< i&2{G~3{4{5{1=6{9 a H I 7{M :.2{. 8{E@9{9{M!>)}-A~Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.1+){0{a{b{c{d{P~e{f{g{h{i{P.P.P.P.P.P.P.P.P.P.P.P.Q.P.n.`.! W)N%Y&j{E~w ",
+" P.j*7.N!A*A*k{l{U&m{w*S.p.< .*w W)Y&n{L~o{) A.p{H q{M@M P g.`.}.7@r{1!D+|%C!A!s{t{}-s!5{[.Q.a+#+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M.u{v{w{x{y{z{A{B{C{D{E{F{G{P.P.P.P.P.P.P.P.P.P.Q.n.f*H L~H{I{L~n{}*J{K{ ",
+" P.L{M{l!e*k{=&T.V*V*x*N{;*o~O{E~W)}*5{P{! ) 0 I~r .v ]@N+&.`.-.1.3.4.n.<#}.Q{c~R{S{>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M.T{v{U{V{W{X{Y{Z{`{ ].]+]@]#]$]P.P.P.P.P.P.Q.M.F#f.A.0 9 ) ! 1=%]5{N%3{ ",
+" P.0!-+-+%@!*&]!@*]!=x*x*c+`!Q*e*=]*+-]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+;]S&>]:&,]=*']/~< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M.T{)]!]~]{]]]^]/](]_]:]<][]}]|]1]T+P.P.Q.O.l+%.B.s I H r{F E ! 1=1=x~@{ ",
+" P.7.i*2]!*}-/~0*(~_~-*. x&,.X)_&'~3]n!e*4]}--]c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)5]D+6]7]. m~*+8]o~-*9]g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.M.T{0{0]a]b]c]d]e]f]g]h]i]j]k]l]m]n]o]P.;.q$$.N M L K r c a p]9 ) ! q]r] ",
+" P.=&]&]&}-*+b~F=F=s!c~5.V&S.d~5.s]4]/=/#X*t]e*s%3~!*u]v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&v]:&;~w];{']p=*+${0*x]s!_~F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.P.P.P.M.T{0{y]z]A]B]C]D]E]F]G]H]I]J]K]L]M]N]O]P]O+%$P N M v t I H I~#{9 ) l~Q] ",
+" P.i~Q*Q**+y~z~_~_~}=A~4~B~C~p.D~w E~F~G~R]S]T]%~/=U]6.V]A!b%W]M [+4.Q@C+p+2+P.P.P.P.a)[*X]Y]Z]b%!*}-*+${F=`]-*-*-*s!_~F=F=< 9 &.3.n.p+P.Q.P.P.P.P.P.P.M.T{0{ ^.^+^@^#^$^%^&^*^=^-^;^>^,^'^)^!^~^{^`.g.]^N M v ..K ^^:.a 0 n /^ ",
+" P.c+_&_&Y~(~Z~s!s!`~5.B~ {p..{.*+{W)}*@{g*! m #{3{(^_^:^<^.!&@M!|%[^.*N 0%P.P.P.P.P.}^|^1^Y][-. !*}-|{-&F=s!-*-*-*-*-*-*-*s!_~F=-*.*0 P }.I.O.Q.Q.Q.P.M.T{)]2^3^4^5^6^7^8^9^0^a^b^c^d^e^f^g^h^i^j^k^e@&.%.O N ^+7{{@s r l^r{m^ ",
+" P.R*i!X)n^Y~s!-*-*1{V&k~S.< i&2{G~3{4{5{1=6{9 a H I 7{M o^p^|{!@C!A!|%q^x&N)< ..n.P.>]:&D+N)b%r^m~8]o~0*_~s!-*-*-*-*-*-*-*-*-*-*-*s!_~F=5.E~9 ..&.I.P.O.s^v{t^u^v^w^x^y^z^A^B^C^D^E^F^G^H^I^J^K^L^M^N^O^&.g.#.N +.v ..s Y.r H ",
+" P.[=!=P^!=!=={M!Q^R^w*S.p.< .*w W)Y&n{L~o{) A.p{H q{M@M P g.`.}.}.{+< [ ~ s{S^O'S&[-5]1^N)[-%@!*T^D!0*F=_~U^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*s!_~_~V&E~1=9 V^W^X^Y^Z^`^ /./+/@/#/$/%/&/&^*/=/-/;/>/,/'/)/!/~/O+g.P $.N >~v .. .s ",
+" P.{/9{]/={^/<~X*X*X*t],#S&F=O{E~W)}*5{P{! ) 0 I~r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%}^:&D+N)7]. !**+o~0*F=s!}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*s!s!F=//(/_/:/[/}/|/1/2/3/4/5/6/7/8/9/0/a/b/c/d/e/f/g/h/i/&.g.P N N M '{]+ ",
+" P.8+v+1.W)D+A!,#/=1*j/k/e*s%s%,#O'F=-]1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+D+;~[-. !*v&*+y~F=_~s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*_~l/m/n/o/
(,('()(!(~({(](^(f*&.g.}~P ",
+" Q.a+ v+p+M W)/(6]|%=+:=((,._(_(;!,#~ R^4{v h.`.[.k. +4.J.o+p+P.P.P.P.P.:(Z];{K~p=<(o~R^_~[(}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*_~}(m/|(1(2(3(4(5(6(7(8(9(0(a(b(c(d(e(f(g(h(i(j(k(l(m(n(o(p(q(r(s(:+f*&. ",
+" 8+#+R+N 1=d~t(|%=+,.u(&@M!a&a&^=~ Y~j{N [+4.Q@C+p+2+P.P.P.P.[-v(. m~}-o~0*F=_~H~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*A~w*R]w(x(y(z(A(B(C(D(E(&/F(G(H(I(J(K(L(M(N(O(P(Q(R(S(T(U(V(W(X(Y(Z(`(`.[.<. ",
+" $+P.4.g.H E~ _3~._,#a&3~q^+_;*x&|!*+@_Z.0%P.P.P.P.P.b%. !*}-*+o~0*F=s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*V&*+#_$_%_&_*_=_-_;_>_,_'_)_!_~_{_]_^_/_(___:_<_P([_}_|_1_2_3_4_5_6_7_8_k.}. ",
+" Q.O.I.F.N E~b%A!C!|%9_U&~ !@O'S&a)0_w M o+P.b%t(!*a_o~0*b_`]-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*V&0*s!c_d_e_f_g_h_i_j_k_k_l_m_n_o_p_q_r_s_t_u_v_w_x_y_z_A_B_C_D_E_F_G_[.2.<+ ",
+" P.O.M.o+g.w =*H_U&I_J_a)K_:&D+S/7]8]. !*}-*+0*L_M_s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*N_p.p.O_P_Q_R_S_T_U_V_W_X_Y_Z_`_ :.:+:@:#:$:%:&:*:=:-:;:>:,:':):!:~:}+I.-$4. ",
+" P.P.P.P.p+N < =*{:5]K_N):(7]%@r^}-v&|{0*]:^:}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*l~g*x~/:(:_:::<:[:}:|:1:2:3:4:5:6:7:8:9:0:a:b:c:d:e:f:g:h:i:j:k:I%M.L.K.-$4. ",
+" P.Q.#+$+M. .Z*l:%@!*. m:v&m{n:F=[(H~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*Y&C.o:p:q:r:s:t:u:v:w:x:y:z:A:B:B:C:[_D:E:F:G:H:I:J:K:L:M:N:O:2+O.++o+n. ",
+" P.#+$+a+f@H P:_~^:Q:L_T&s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*1=1=f*R:S:T:U:V:W:X:Y:Z:`: <.<+<.<@<#<*:$<%<&<*<=<-<;<><,[,['[)[x_![~[{[][H/^[/[([U~ ",
+" P.P.O.O.M.&.1=w*y~_[:[<[[[}[|[1[2[3[4[5[6[7[8[ ",
+" P.P.P.P.J.9[0[a[b[c[d[e[f[g[h[i[G_ ",
+" |+j[k[l[m[n[o[p[q[r[s[ ",
+" t[u[v[w[x[y[ ",
+" z[A[B[ ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/src/Mod/Ship/Icons/SimStopIco.png b/src/Mod/Ship/Icons/SimStopIco.png
new file mode 100644
index 000000000..43a2121b8
Binary files /dev/null and b/src/Mod/Ship/Icons/SimStopIco.png differ
diff --git a/src/Mod/Ship/Icons/SimStopIco.xpm b/src/Mod/Ship/Icons/SimStopIco.xpm
new file mode 100644
index 000000000..c4ee553ac
--- /dev/null
+++ b/src/Mod/Ship/Icons/SimStopIco.xpm
@@ -0,0 +1,2217 @@
+/* XPM */
+static char * SimStopIco_xpm[] = {
+"128 128 2086 2",
+" c None",
+". c #7B7B7B",
+"+ c #EAEAEA",
+"@ c #E9EAE9",
+"# c #E9E9E9",
+"$ c #E9E9E8",
+"% c #D9D9D9",
+"& c #EAEAE9",
+"* c #E8E9E8",
+"= c #E9E8E8",
+"- c #E8E8E8",
+"; c #E8E8E7",
+"> c #E7E7E7",
+", c #E7E6E7",
+"' c #E6E6E6",
+") c #5F5F5F",
+"! c #606060",
+"~ c #868686",
+"{ c #AEAEAE",
+"] c #C3C2C2",
+"^ c #D1D1D1",
+"/ c #E4E3E3",
+"( c #E5E6E5",
+"_ c #E6E5E5",
+": c #E5E4E5",
+"< c #6B6B6B",
+"[ c #7B7A7A",
+"} c #888889",
+"| c #ABABAB",
+"1 c #D5D5D5",
+"2 c #E5E6E6",
+"3 c #E5E5E5",
+"4 c #E4E5E4",
+"5 c #E4E4E4",
+"6 c #E3E3E3",
+"7 c #E3E3E2",
+"8 c #E2E2E2",
+"9 c #5E5E5E",
+"0 c #5D5D5D",
+"a c #5C5C5C",
+"b c #5B5B5C",
+"c c #5A5B5B",
+"d c #838484",
+"e c #BABABA",
+"f c #DEDEDE",
+"g c #E2E3E2",
+"h c #E1E2E2",
+"i c #E1E1E2",
+"j c #E0E1E0",
+"k c #E1E1E1",
+"l c #EAE9E9",
+"m c #5E5F5F",
+"n c #5E5D5E",
+"o c #5C5D5C",
+"p c #5B5C5B",
+"q c #5B5A5A",
+"r c #5A5A5A",
+"s c #595959",
+"t c #595858",
+"u c #585857",
+"v c #575757",
+"w c #686868",
+"x c #909090",
+"y c #BEBEBE",
+"z c #D3D2D3",
+"A c #E0E0E0",
+"B c #E0DFE0",
+"C c #E0DFDF",
+"D c #DEDEDF",
+"E c #5F5E5E",
+"F c #5E5D5D",
+"G c #5C5B5B",
+"H c #5B5B5B",
+"I c #5A5A59",
+"J c #595A59",
+"K c #595859",
+"L c #585757",
+"M c #565656",
+"N c #555555",
+"O c #545455",
+"P c #545454",
+"Q c #676666",
+"R c #717272",
+"S c #8B8B8A",
+"T c #B7B7B8",
+"U c #DFDFDF",
+"V c #DDDDDD",
+"W c #DCDDDD",
+"X c #DDDCDC",
+"Y c #E8E9E9",
+"Z c #5D5E5E",
+"` c #5C5B5C",
+" . c #595958",
+".. c #585858",
+"+. c #565657",
+"@. c #555556",
+"#. c #545554",
+"$. c #555454",
+"%. c #535354",
+"&. c #525252",
+"*. c #525251",
+"=. c #515050",
+"-. c #4F5050",
+";. c #4F4F50",
+">. c #4E4F4F",
+",. c #959595",
+"'. c #CAC9C9",
+"). c #D9D9DA",
+"!. c #DADBDA",
+"~. c #DCDCDC",
+"{. c #DDDDDC",
+"]. c #DBDCDB",
+"^. c #DBDBDB",
+"/. c #DADADB",
+"(. c #DADADA",
+"_. c #E8E8E9",
+":. c #5B5A5B",
+"<. c #505151",
+"[. c #505050",
+"}. c #4F4F4F",
+"|. c #4E4D4E",
+"1. c #4D4D4D",
+"2. c #4C4D4D",
+"3. c #4C4C4C",
+"4. c #4B4B4B",
+"5. c #707070",
+"6. c #959596",
+"7. c #AAAAAA",
+"8. c #BFBEBF",
+"9. c #D7D7D6",
+"0. c #DADAD9",
+"a. c #D9DADA",
+"b. c #D8D9D9",
+"c. c #5B5C5C",
+"d. c #5A5B5A",
+"e. c #5A5959",
+"f. c #565757",
+"g. c #535353",
+"h. c #535253",
+"i. c #505150",
+"j. c #4F504F",
+"k. c #4E4E4E",
+"l. c #4C4B4B",
+"m. c #494A49",
+"n. c #494949",
+"o. c #484747",
+"p. c #6C6C6C",
+"q. c #C7C7C7",
+"r. c #DAD9D9",
+"s. c #D9D8D9",
+"t. c #D9D8D8",
+"u. c #D8D8D8",
+"v. c #D8D8D7",
+"w. c #D7D8D8",
+"x. c #D7D7D7",
+"y. c #D6D6D6",
+"z. c #D5D5D6",
+"A. c #5E5E5D",
+"B. c #595A5A",
+"C. c #575656",
+"D. c #545555",
+"E. c #4F4E4E",
+"F. c #4E4E4D",
+"G. c #4C4D4C",
+"H. c #4C4B4C",
+"I. c #4A4A4A",
+"J. c #494A4A",
+"K. c #494848",
+"L. c #484847",
+"M. c #474747",
+"N. c #474646",
+"O. c #454545",
+"P. c #444444",
+"Q. c #434343",
+"R. c #434243",
+"S. c #6D6D6D",
+"T. c #A7A8A7",
+"U. c #D0D0D0",
+"V. c #D4D4D4",
+"W. c #D6D5D5",
+"X. c #E7E8E8",
+"Y. c #59595A",
+"Z. c #535454",
+"`. c #515151",
+" + c #4D4D4C",
+".+ c #464647",
+"++ c #464545",
+"@+ c #444545",
+"#+ c #424242",
+"$+ c #414141",
+"%+ c #404041",
+"&+ c #3F4040",
+"*+ c #787878",
+"=+ c #969696",
+"-+ c #A7A7A7",
+";+ c #C3C3C2",
+">+ c #D5D4D5",
+",+ c #D4D4D5",
+"'+ c #D3D4D4",
+")+ c #D3D3D3",
+"!+ c #D2D3D3",
+"~+ c #E6E7E6",
+"{+ c #5A5A5B",
+"]+ c #575858",
+"^+ c #575657",
+"/+ c #555656",
+"(+ c #565555",
+"_+ c #525352",
+":+ c #515051",
+"<+ c #4D4D4E",
+"[+ c #4D4C4C",
+"}+ c #4A4A49",
+"|+ c #474848",
+"1+ c #464747",
+"2+ c #444544",
+"3+ c #434342",
+"4+ c #434142",
+"5+ c #404141",
+"6+ c #403F3F",
+"7+ c #3F3E3E",
+"8+ c #3E3E3E",
+"9+ c #3D3D3D",
+"0+ c #3C3C3C",
+"a+ c #404040",
+"b+ c #707071",
+"c+ c #A4A5A5",
+"d+ c #D4D3D3",
+"e+ c #D3D2D2",
+"f+ c #D2D2D2",
+"g+ c #D2D2D1",
+"h+ c #D1D0D0",
+"i+ c #D0D1D0",
+"j+ c #CFD0CF",
+"k+ c #525353",
+"l+ c #525152",
+"m+ c #504F4F",
+"n+ c #4B4A4A",
+"o+ c #484848",
+"p+ c #464646",
+"q+ c #454544",
+"r+ c #454444",
+"s+ c #424343",
+"t+ c #414142",
+"u+ c #403F40",
+"v+ c #3F3F3F",
+"w+ c #3C3D3C",
+"x+ c #3B3B3B",
+"y+ c #3A3A3A",
+"z+ c #3A3A39",
+"A+ c #383838",
+"B+ c #373737",
+"C+ c #474847",
+"D+ c #7F7F7F",
+"E+ c #B6B6B6",
+"F+ c #C8C9C8",
+"G+ c #CBCBCB",
+"H+ c #CFD0D0",
+"I+ c #D0D0CF",
+"J+ c #D0CFD0",
+"K+ c #CFCFCF",
+"L+ c #CECECE",
+"M+ c #CECDCE",
+"N+ c #545453",
+"O+ c #525151",
+"P+ c #4F4E4F",
+"Q+ c #4A4B4B",
+"R+ c #4A494A",
+"S+ c #474647",
+"T+ c #454645",
+"U+ c #404140",
+"V+ c #3E3E3F",
+"W+ c #3D3E3E",
+"X+ c #3D3C3C",
+"Y+ c #3C3B3C",
+"Z+ c #3C3B3B",
+"`+ c #3A3939",
+" @ c #383839",
+".@ c #363637",
+"+@ c #353636",
+"@@ c #353535",
+"#@ c #343434",
+"$@ c #333333",
+"%@ c #7B7B7C",
+"&@ c #919190",
+"*@ c #ACACAB",
+"=@ c #C9C9C9",
+"-@ c #CECFCE",
+";@ c #CECECD",
+">@ c #CDCDCD",
+",@ c #CDCDCC",
+"'@ c #CCCCCC",
+")@ c #CCCCCB",
+"!@ c #858585",
+"~@ c #E6E5E6",
+"{@ c #585859",
+"]@ c #565655",
+"^@ c #545354",
+"/@ c #4E4F4E",
+"(@ c #4C4C4D",
+"_@ c #4B4B4A",
+":@ c #484748",
+"<@ c #434344",
+"[@ c #3D3C3D",
+"}@ c #393839",
+"|@ c #373636",
+"1@ c #333334",
+"2@ c #323332",
+"3@ c #323232",
+"4@ c #313131",
+"5@ c #303131",
+"6@ c #383939",
+"7@ c #50504F",
+"8@ c #7E7F7E",
+"9@ c #B6B7B6",
+"0@ c #CBCBCC",
+"a@ c #CBCBCA",
+"b@ c #CACACA",
+"c@ c #CAC9CA",
+"d@ c #575857",
+"e@ c #515150",
+"f@ c #4A4A4B",
+"g@ c #494849",
+"h@ c #474746",
+"i@ c #464547",
+"j@ c #434444",
+"k@ c #424141",
+"l@ c #3D3D3E",
+"m@ c #3B3C3B",
+"n@ c #3B3B3A",
+"o@ c #383737",
+"p@ c #363737",
+"q@ c #363636",
+"r@ c #353635",
+"s@ c #343433",
+"t@ c #333233",
+"u@ c #313132",
+"v@ c #323131",
+"w@ c #303030",
+"x@ c #2F2F2F",
+"y@ c #2F2F2E",
+"z@ c #2E2E2F",
+"A@ c #2D2C2D",
+"B@ c #2C2D2D",
+"C@ c #2C2C2C",
+"D@ c #2C2B2C",
+"E@ c #939393",
+"F@ c #B9BAB9",
+"G@ c #C0C0C0",
+"H@ c #C7C6C7",
+"I@ c #CACAC9",
+"J@ c #C9C9C8",
+"K@ c #C8C8C9",
+"L@ c #C8C8C8",
+"M@ c #585758",
+"N@ c #535152",
+"O@ c #504F50",
+"P@ c #4B4C4A",
+"Q@ c #494948",
+"R@ c #454646",
+"S@ c #434443",
+"T@ c #414241",
+"U@ c #3F3F40",
+"V@ c #3F3E3F",
+"W@ c #3E3E3D",
+"X@ c #3D3C3E",
+"Y@ c #393939",
+"Z@ c #373838",
+"`@ c #363535",
+" # c #343334",
+".# c #313232",
+"+# c #2E2E2E",
+"@# c #2D2D2D",
+"## c #2C2B2B",
+"$# c #2B2B2B",
+"%# c #2A2A2A",
+" c #29292A",
+"*# c #292929",
+"=# c #282828",
+"-# c #383938",
+";# c #5D5E5D",
+"># c #7A797A",
+",# c #919191",
+"'# c #B3B2B3",
+")# c #C8C7C8",
+"!# c #C8C7C7",
+"~# c #C8C8C7",
+"{# c #C7C7C6",
+"]# c #C6C6C7",
+"^# c #C6C6C5",
+"/# c #9D9D9D",
+"(# c #E4E4E5",
+"_# c #4A4B4A",
+":# c #484949",
+"<# c #474748",
+"[# c #444443",
+"}# c #424241",
+"|# c #3C3D3D",
+"1# c #3B3A3B",
+"2# c #383837",
+"3# c #353434",
+"4# c #333434",
+"5# c #313031",
+"6# c #302F2F",
+"7# c #2D2D2E",
+"8# c #2A2B2B",
+"9# c #292A2A",
+"0# c #292828",
+"a# c #282928",
+"b# c #272727",
+"c# c #262626",
+"d# c #242524",
+"e# c #C6C6C6",
+"f# c #C5C5C5",
+"g# c #C5C5C6",
+"h# c #424243",
+"i# c #3B3A3A",
+"j# c #383738",
+"k# c #343534",
+"l# c #343333",
+"m# c #313130",
+"n# c #302F30",
+"o# c #2D2C2C",
+"p# c #2C2C2D",
+"q# c #272626",
+"r# c #252625",
+"s# c #262525",
+"t# c #242424",
+"u# c #232423",
+"v# c #222223",
+"w# c #222222",
+"x# c #212121",
+"y# c #1F1F20",
+"z# c #30302F",
+"A# c #6A696A",
+"B# c #A0A09F",
+"C# c #C5C6C5",
+"D# c #E3E4E4",
+"E# c #555655",
+"F# c #535352",
+"G# c #4E4D4D",
+"H# c #424142",
+"I# c #414040",
+"J# c #3F403F",
+"K# c #3C3C3D",
+"L# c #39393A",
+"M# c #383637",
+"N# c #323233",
+"O# c #323132",
+"P# c #303031",
+"Q# c #2F2E2E",
+"R# c #2E2E2D",
+"S# c #2B2C2C",
+"T# c #2B2A2A",
+"U# c #272627",
+"V# c #252525",
+"W# c #242423",
+"X# c #232222",
+"Y# c #212221",
+"Z# c #202021",
+"`# c #202020",
+" $ c #1F1F1F",
+".$ c #1E1E1F",
+"+$ c #1E1D1D",
+"@$ c #1D1C1D",
+"#$ c #C4C5C5",
+"$$ c #C4C4C4",
+"%$ c #525253",
+"&$ c #515252",
+"*$ c #4E4E4F",
+"=$ c #4D4C4D",
+"-$ c #4B4A4B",
+";$ c #414041",
+">$ c #3C3C3B",
+",$ c #393938",
+"'$ c #363536",
+")$ c #353435",
+"!$ c #333433",
+"~$ c #2B2A2B",
+"{$ c #2A2B2A",
+"]$ c #292829",
+"^$ c #262627",
+"/$ c #252624",
+"($ c #252424",
+"_$ c #222322",
+":$ c #20201F",
+"<$ c #1E1F1E",
+"[$ c #1D1D1D",
+"}$ c #1C1D1D",
+"|$ c #1C1C1C",
+"1$ c #C4C5C4",
+"2$ c #4F4F4E",
+"3$ c #444344",
+"4$ c #3E3F3E",
+"5$ c #3E3D3E",
+"6$ c #393A39",
+"7$ c #393838",
+"8$ c #363736",
+"9$ c #2F302F",
+"0$ c #2D2E2D",
+"a$ c #2E2D2E",
+"b$ c #2D2D2C",
+"c$ c #2B2B2C",
+"d$ c #2B2B2A",
+"e$ c #262526",
+"f$ c #242324",
+"g$ c #232324",
+"h$ c #212222",
+"i$ c #202121",
+"j$ c #1F2020",
+"k$ c #1F1F1E",
+"l$ c #1D1C1C",
+"m$ c #1B1B1C",
+"n$ c #C4C4C3",
+"o$ c #E3E2E3",
+"p$ c #555455",
+"q$ c #515251",
+"r$ c #4B4C4C",
+"s$ c #3D3E3D",
+"t$ c #3B3D3C",
+"u$ c #3A3A3B",
+"v$ c #373837",
+"w$ c #373637",
+"x$ c #2F2E2F",
+"y$ c #232323",
+"z$ c #1E1E1D",
+"A$ c #1B1C1C",
+"B$ c #1C1B1B",
+"C$ c #1B1B1B",
+"D$ c #C3C4C4",
+"E$ c #C3C3C3",
+"F$ c #464546",
+"G$ c #3E3F3F",
+"H$ c #3E3D3D",
+"I$ c #3D3D3C",
+"J$ c #3A3B3B",
+"K$ c #323333",
+"L$ c #313030",
+"M$ c #2F3030",
+"N$ c #2E2F2F",
+"O$ c #2D2D2B",
+"P$ c #2A2B29",
+"Q$ c #292A29",
+"R$ c #282726",
+"S$ c #202120",
+"T$ c #1E1E1E",
+"U$ c #19191A",
+"V$ c #C3C3C4",
+"W$ c #E2E1E1",
+"X$ c #4A4949",
+"Y$ c #484849",
+"Z$ c #3A3B3A",
+"`$ c #373738",
+" % c #373736",
+".% c #252425",
+"+% c #222122",
+"@% c #212122",
+"#% c #1A1B1B",
+"$% c #1B1A1A",
+"%% c #1A1919",
+"&% c #E2E1E2",
+"*% c #E1E0E1",
+"=% c #505051",
+"-% c #49494A",
+";% c #1A1A1A",
+">% c #3A393A",
+",% c #2E2F2E",
+"'% c #282727",
+")% c #242425",
+"!% c #232322",
+"~% c #1E1F1F",
+"{% c #1B1C1B",
+"]% c #1A191A",
+"^% c #191A19",
+"/% c #191918",
+"(% c #C2C2C2",
+"_% c #E0E1E1",
+":% c #E1E1E0",
+"<% c #4B4B4C",
+"[% c #454445",
+"}% c #161515",
+"|% c #8B8B8B",
+"1% c #2C2C2B",
+"2% c #282827",
+"3% c #272728",
+"4% c #262727",
+"5% c #1F1E1F",
+"6% c #1A1A19",
+"7% c #181818",
+"8% c #C1C1C2",
+"9% c #E1E0E0",
+"0% c #464746",
+"a% c #111111",
+"b% c #7C7C7C",
+"c% c #BBBBBB",
+"d% c #969697",
+"e% c #5F5F5C",
+"f% c #33332F",
+"g% c #28292A",
+"h% c #262726",
+"i% c #201F20",
+"j% c #1F201F",
+"k% c #191919",
+"l% c #171717",
+"m% c #4C4C4B",
+"n% c #444445",
+"o% c #444343",
+"p% c #1A1717",
+"q% c #211515",
+"r% c #2D2B2B",
+"s% c #999999",
+"t% c #B3B3B5",
+"u% c #8B8BB2",
+"v% c #6F6F89",
+"w% c #4A4A4F",
+"x% c #2A2929",
+"y% c #2B2C2B",
+"z% c #2A292A",
+"A% c #232424",
+"B% c #212120",
+"C% c #181718",
+"D% c #171818",
+"E% c #171716",
+"F% c #C1C1C1",
+"G% c #C0C1C1",
+"H% c #DFE0E0",
+"I% c #484948",
+"J% c #422121",
+"K% c #552D2D",
+"L% c #363232",
+"M% c #A0A0A0",
+"N% c #646464",
+"O% c #ABABAE",
+"P% c #7575C7",
+"Q% c #5C5CD5",
+"R% c #7878BD",
+"S% c #7B7B8E",
+"T% c #585855",
+"U% c #30302E",
+"V% c #2A2A29",
+"W% c #212020",
+"X% c #201E1F",
+"Y% c #1E1D1E",
+"Z% c #1C1C1D",
+"`% c #1A1B1A",
+" & c #191A1A",
+".& c #171616",
+"+& c #161616",
+"@& c #C0C0C1",
+"#& c #414242",
+"$& c #1F1C1C",
+"%& c #542424",
+"&& c #4C2625",
+"*& c #585756",
+"=& c #A8A8A8",
+"-& c #767677",
+";& c #9D9D9E",
+">& c #8A8AAD",
+",& c #5A5AC4",
+"'& c #3838D7",
+")& c #3434D9",
+"!& c #4848BD",
+"~& c #535372",
+"{& c #878888",
+"]& c #A4A4A4",
+"^& c #A7A6A6",
+"/& c #B0B0B0",
+"(& c #B1B1B1",
+"_& c #A1A1A1",
+":& c #808080",
+"<& c #151515",
+"[& c #242525",
+"}& c #1D1E1E",
+"|& c #1A1A1B",
+"1& c #191819",
+"2& c #181817",
+"3& c #161717",
+"4& c #151516",
+"5& c #C1C0C0",
+"6& c #DFDEDE",
+"7& c #5B2020",
+"8& c #391A19",
+"9& c #A4A4A5",
+"0& c #878687",
+"a& c #8E8E8E",
+"b& c #9B9B98",
+"c& c #999994",
+"d& c #888898",
+"e& c #6C6BA8",
+"f& c #4F4FBD",
+"g& c #50508B",
+"h& c #CECDCD",
+"i& c #6A6A6A",
+"j& c #242323",
+"k& c #222121",
+"l& c #1F1E1E",
+"m& c #1C1D1C",
+"n& c #151514",
+"o& c #BFC0BF",
+"p& c #DFDFDE",
+"q& c #434445",
+"r& c #3F3E40",
+"s& c #1B1212",
+"t& c #611717",
+"u& c #301414",
+"v& c #797878",
+"w& c #9C9C9D",
+"x& c #888888",
+"y& c #8A8A89",
+"z& c #868688",
+"A& c #7C7C8F",
+"B& c #45455C",
+"C& c #B8B8B8",
+"D& c #C5C4C4",
+"E& c #AAA9A9",
+"F& c #252523",
+"G& c #222323",
+"H& c #171817",
+"I& c #161516",
+"J& c #141514",
+"K& c #141313",
+"L& c #C0BFBF",
+"M& c #4D4E4E",
+"N& c #464645",
+"O& c #1B0F0F",
+"P& c #570D0D",
+"Q& c #270D0D",
+"R& c #706F6F",
+"S& c #838383",
+"T& c #757474",
+"U& c #878787",
+"V& c #6F6F6F",
+"W& c #5C5C5A",
+"X& c #353533",
+"Y& c #656565",
+"Z& c #BCBCBC",
+"`& c #BFBFBF",
+" * c #C1C2C1",
+".* c #696969",
+"+* c #1D1D1E",
+"@* c #191818",
+"#* c #131313",
+"$* c #DDDEDD",
+"%* c #110F0F",
+"&* c #220B0B",
+"** c #201B1B",
+"=* c #7D7D7C",
+"-* c #727272",
+";* c #898989",
+">* c #BBBBBA",
+",* c #BCBCBB",
+"'* c #BDBDBD",
+")* c #676868",
+"!* c #7A7A7A",
+"~* c #1D1D1C",
+"{* c #181918",
+"]* c #141414",
+"^* c #131314",
+"/* c #131312",
+"(* c #BEBFBF",
+"_* c #454546",
+":* c #3B3B3C",
+"<* c #181919",
+"[* c #818181",
+"}* c #656465",
+"|* c #888787",
+"1* c #9B9B9B",
+"2* c #ADADAD",
+"3* c #B4B4B4",
+"4* c #B5B5B5",
+"5* c #B5B5B4",
+"6* c #B6B6B5",
+"7* c #B6B6B7",
+"8* c #B7B7B7",
+"9* c #B7B8B8",
+"0* c #767676",
+"a* c #121213",
+"b* c #212021",
+"c* c #141413",
+"d* c #111212",
+"e* c #9A9A9A",
+"f* c #515152",
+"g* c #616162",
+"h* c #949495",
+"i* c #A6A6A6",
+"j* c #AFAFAF",
+"k* c #ACADAD",
+"l* c #B2B2B2",
+"m* c #B0B0AF",
+"n* c #AFAFB0",
+"o* c #B3B3B3",
+"p* c #B5B4B4",
+"q* c #1C1B1C",
+"r* c #131414",
+"s* c #121313",
+"t* c #121212",
+"u* c #BEBDBD",
+"v* c #DCDCDD",
+"w* c #6E6E6E",
+"x* c #A5A5A5",
+"y* c #A9A9A9",
+"z* c #ABABAA",
+"A* c #AAAAA9",
+"B* c #ABA9A9",
+"C* c #ABAAAB",
+"D* c #ABABAC",
+"E* c #ACACAC",
+"F* c #666766",
+"G* c #141314",
+"H* c #1D1E1D",
+"I* c #1B1A1B",
+"J* c #131213",
+"K* c #101111",
+"L* c #586362",
+"M* c #5D6F74",
+"N* c #596767",
+"O* c #555A58",
+"P* c #A2A2A3",
+"Q* c #A2A2A2",
+"R* c #A3A3A3",
+"S* c #A5A5A3",
+"T* c #A6A7A7",
+"U* c #A5A4A5",
+"V* c #A8A7A7",
+"W* c #A9A8A9",
+"X* c #9C9C9C",
+"Y* c #424342",
+"Z* c #6C6D6C",
+"`* c #101010",
+" = c #151616",
+".= c #131412",
+"+= c #101110",
+"@= c #0F0F0F",
+"#= c #BDBCBD",
+"$= c #DBDCDC",
+"%= c #7FA3AE",
+"&= c #79A5EC",
+"*= c #5F80EB",
+"== c #485FD4",
+"-= c #4758B4",
+";= c #516392",
+">= c #586874",
+",= c #55605F",
+"'= c #393A3A",
+")= c #2D2E2F",
+"!= c #9E9E9E",
+"~= c #979897",
+"{= c #9A9B9B",
+"]= c #929493",
+"^= c #8C8D8D",
+"/= c #979797",
+"(= c #989999",
+"_= c #969898",
+":= c #979898",
+"<= c #9B9C9C",
+"[= c #A2A1A2",
+"}= c #737272",
+"|= c #A6A5A6",
+"1= c #616161",
+"2= c #1B1B1A",
+"3= c #181717",
+"4= c #161615",
+"5= c #151414",
+"6= c #121112",
+"7= c #111110",
+"8= c #7A9DAE",
+"9= c #597AF5",
+"0= c #5373F9",
+"a= c #668CFC",
+"b= c #5D80FC",
+"c= c #5271FB",
+"d= c #5576F5",
+"e= c #739AE6",
+"f= c #7495A5",
+"g= c #607578",
+"h= c #54646B",
+"i= c #58686B",
+"j= c #505A59",
+"k= c #484B4B",
+"l= c #323432",
+"m= c #919292",
+"n= c #959494",
+"o= c #878686",
+"p= c #7A7979",
+"q= c #7C7777",
+"r= c #807778",
+"s= c #776F6F",
+"t= c #706565",
+"u= c #7B6C6B",
+"v= c #847171",
+"w= c #7C6B6B",
+"x= c #746464",
+"y= c #736262",
+"z= c #7A6969",
+"A= c #807070",
+"B= c #807676",
+"C= c #807C7C",
+"D= c #949696",
+"E= c #9E9F9F",
+"F= c #757575",
+"G= c #171617",
+"H= c #151615",
+"I= c #141415",
+"J= c #121111",
+"K= c #0F1010",
+"L= c #0F0F10",
+"M= c #0E0F0E",
+"N= c #BDBDBC",
+"O= c #5B6766",
+"P= c #799CA3",
+"Q= c #76979D",
+"R= c #6F8D9F",
+"S= c #97CEEF",
+"T= c #76A2FB",
+"U= c #4C69FC",
+"V= c #1B27FD",
+"W= c #3549F4",
+"X= c #5979E3",
+"Y= c #698DE4",
+"Z= c #77A2F2",
+"`= c #688EE1",
+" - c #5C78C4",
+".- c #576FA2",
+"+- c #55697C",
+"@- c #4D5C5F",
+"#- c #333E39",
+"$- c #3D3B37",
+"%- c #6F6766",
+"&- c #786868",
+"*- c #7D6666",
+"=- c #947676",
+"-- c #9C7979",
+";- c #9D7676",
+">- c #AB7E7E",
+",- c #BA8888",
+"'- c #B88585",
+")- c #B17E7E",
+"!- c #B57E7E",
+"~- c #BD8383",
+"{- c #BD8181",
+"]- c #B07777",
+"^- c #A06A6A",
+"/- c #956161",
+"(- c #8A5B5B",
+"_- c #7D5858",
+":- c #755F5F",
+"<- c #807878",
+"[- c #7D7D7D",
+"}- c #797979",
+"|- c #131212",
+"1- c #0F0F0E",
+"2- c #0D0E0E",
+"3- c #BCBBBC",
+"4- c #DBDADB",
+"5- c #424545",
+"6- c #4F5756",
+"7- c #9BD0D5",
+"8- c #6D96FC",
+"9- c #435DFC",
+"0- c #3E55FC",
+"a- c #5270FC",
+"b- c #5878F8",
+"c- c #4862F2",
+"d- c #435DF8",
+"e- c #4D6BF8",
+"f- c #597BFC",
+"g- c #5B7DFB",
+"h- c #5E81FB",
+"i- c #678DEF",
+"j- c #7198D3",
+"k- c #354658",
+"l- c #5B4442",
+"m- c #B6817F",
+"n- c #C68B8B",
+"o- c #C38787",
+"p- c #C78888",
+"q- c #CE8C8C",
+"r- c #CA8686",
+"s- c #C68181",
+"t- c #C78080",
+"u- c #C87F7F",
+"v- c #C57B7B",
+"w- c #C37777",
+"x- c #C07373",
+"y- c #C17271",
+"z- c #C17070",
+"A- c #BF6B6B",
+"B- c #BB6767",
+"C- c #B15F5F",
+"D- c #9E5453",
+"E- c #744343",
+"F- c #302929",
+"G- c #161617",
+"H- c #141515",
+"I- c #131413",
+"J- c #100F10",
+"K- c #0F0E0E",
+"L- c #0E0E0E",
+"M- c #0D0D0D",
+"N- c #BBBCBB",
+"O- c #DAD9DA",
+"P- c #40403F",
+"Q- c #739297",
+"R- c #78A2E4",
+"S- c #7AA6E2",
+"T- c #86B1C5",
+"U- c #6A879E",
+"V- c #6A879A",
+"W- c #708F95",
+"X- c #7C9FA0",
+"Y- c #5F7788",
+"Z- c #576C96",
+"`- c #5974B8",
+" ; c #5774D8",
+".; c #4B67F1",
+"+; c #4661FD",
+"@; c #3549D3",
+"#; c #2F236D",
+"$; c #A86F81",
+"%; c #C17777",
+"&; c #C27472",
+"*; c #C17272",
+"=; c #BE6F6F",
+"-; c #BC6C6C",
+";; c #BC6969",
+">; c #BA6766",
+",; c #B96363",
+"'; c #B86060",
+"); c #B75D5D",
+"!; c #B55B5B",
+"~; c #B35757",
+"{; c #B25554",
+"]; c #B15251",
+"^; c #B04F4F",
+"/; c #AF4C4C",
+"(; c #AF4A49",
+"_; c #763030",
+":; c #291313",
+"<; c #0C0C0C",
+"[; c #BBBBBC",
+"}; c #434241",
+"|; c #49504F",
+"1; c #697F7E",
+"2; c #607270",
+"3; c #464C4B",
+"4; c #454748",
+"5; c #3B3D3D",
+"6; c #454848",
+"7; c #4D5353",
+"8; c #637D7F",
+"9; c #7BA3C0",
+"0; c #688EE9",
+"a; c #364CD9",
+"b; c #564EC6",
+"c; c #8F639C",
+"d; c #B06D77",
+"e; c #B75A55",
+"f; c #B55753",
+"g; c #B25352",
+"h; c #B15050",
+"i; c #B04E4D",
+"j; c #AE4A4A",
+"k; c #AD4747",
+"l; c #AC4444",
+"m; c #AA4242",
+"n; c #A93F3F",
+"o; c #A83C3C",
+"p; c #A63939",
+"q; c #A53636",
+"r; c #A43333",
+"s; c #8F2C2C",
+"t; c #451616",
+"u; c #541A1A",
+"v; c #663B3B",
+"w; c #848383",
+"x; c #1C1A1C",
+"y; c #0E0F0F",
+"z; c #0E0D0D",
+"A; c #0D0D0C",
+"B; c #BBBABB",
+"C; c #BABBBA",
+"D; c #D9DAD9",
+"E; c #3E4645",
+"F; c #5A6F74",
+"G; c #7094BE",
+"H; c #5A7EF1",
+"I; c #3F52F7",
+"J; c #4A49DD",
+"K; c #6E3D9B",
+"L; c #914B73",
+"M; c #A13B45",
+"N; c #A73735",
+"O; c #A6332F",
+"P; c #A42F2C",
+"Q; c #A22C2B",
+"R; c #A02B2C",
+"S; c #9F2929",
+"T; c #9E2626",
+"U; c #9D2323",
+"V; c #9B2020",
+"W; c #9A1E1D",
+"X; c #951919",
+"Y; c #581010",
+"Z; c #3B0909",
+"`; c #7E1C1C",
+" > c #671B1B",
+".> c #2F2929",
+"+> c #101011",
+"@> c #0B0B0B",
+"#> c #D8D9D8",
+"$> c #3B3C3C",
+"%> c #353534",
+"&> c #353334",
+"*> c #454949",
+"=> c #6B8382",
+"-> c #779FB5",
+";> c #76A2EF",
+">> c #5B72EE",
+",> c #555CDE",
+"'> c #623AA0",
+")> c #762969",
+"!> c #872F51",
+"~> c #922C3C",
+"{> c #952129",
+"]> c #941619",
+"^> c #950D0B",
+"/> c #960B07",
+"(> c #950B06",
+"_> c #930907",
+":> c #8F0707",
+"<> c #680504",
+"[> c #350200",
+"}> c #4D0301",
+"|> c #680D0E",
+"1> c #391213",
+"2> c #252E29",
+"3> c #242B25",
+"4> c #252A26",
+"5> c #151415",
+"6> c #121312",
+"7> c #111211",
+"8> c #10100F",
+"9> c #0E0E0F",
+"0> c #0D0C0D",
+"a> c #0C0C0B",
+"b> c #0A0A0B",
+"c> c #B9BABA",
+"d> c #2F2F30",
+"e> c #313333",
+"f> c #51656B",
+"g> c #587293",
+"h> c #5574C3",
+"i> c #5170F4",
+"j> c #4658F3",
+"k> c #4A4BDB",
+"l> c #5943B8",
+"m> c #6B3E8F",
+"n> c #793468",
+"o> c #7F264C",
+"p> c #7E1435",
+"q> c #7E0320",
+"r> c #82051B",
+"s> c #70030D",
+"t> c #2B0003",
+"u> c #170002",
+"v> c #3A0B12",
+"w> c #35272C",
+"x> c #3F5785",
+"y> c #455FC7",
+"z> c #4961B0",
+"A> c #495E89",
+"B> c #445664",
+"C> c #3C4A49",
+"D> c #0A0B0B",
+"E> c #0A0A09",
+"F> c #BAB9BA",
+"G> c #2D2E2E",
+"H> c #2E3030",
+"I> c #323231",
+"J> c #464C4C",
+"K> c #6B8887",
+"L> c #6C8FA1",
+"M> c #6183BB",
+"N> c #5071D2",
+"O> c #4463E8",
+"P> c #3E55F8",
+"Q> c #414EED",
+"R> c #4B45CF",
+"S> c #5131AA",
+"T> c #502EA3",
+"U> c #2E1FA3",
+"V> c #09089D",
+"W> c #0A0B8D",
+"X> c #202788",
+"Y> c #5476B4",
+"Z> c #7BAAF4",
+"`> c #5879FB",
+" , c #5D7FFD",
+"., c #5C7FFB",
+"+, c #658AF7",
+"@, c #749FE8",
+"#, c #6383A7",
+"$, c #4B616A",
+"%, c #394443",
+"&, c #1C1F1F",
+"*, c #100F0F",
+"=, c #0B0B0C",
+"-, c #0B0B0A",
+";, c #0A0A0A",
+">, c #090909",
+",, c #B9B9B9",
+"', c #333332",
+"), c #303130",
+"!, c #2E2D2D",
+"~, c #2A2A2B",
+"{, c #2B2D2D",
+"], c #363F40",
+"^, c #445358",
+"/, c #526873",
+"(, c #5C778D",
+"_, c #607FA4",
+":, c #5D7FBE",
+"<, c #597ED6",
+"[, c #577BE9",
+"}, c #3E56B9",
+"|, c #5E81D3",
+"1, c #5574D4",
+"2, c #425AD8",
+"3, c #425BF1",
+"4, c #3C54FB",
+"5, c #3B52FC",
+"6, c #4660FC",
+"7, c #5574FC",
+"8, c #5473FC",
+"9, c #455FFC",
+"0, c #4059F5",
+"a, c #516EE2",
+"b, c #6A91CA",
+"c, c #587480",
+"d, c #2E3636",
+"e, c #0D0C0C",
+"f, c #0C0B0C",
+"g, c #0A090A",
+"h, c #B8B9B8",
+"i, c #D8D7D7",
+"j, c #D7D7D8",
+"k, c #333232",
+"l, c #282B2C",
+"m, c #363F41",
+"n, c #4B5B5B",
+"o, c #5B6F6D",
+"p, c #3C4747",
+"q, c #404D54",
+"r, c #465861",
+"s, c #495C67",
+"t, c #577285",
+"u, c #5E7EA0",
+"v, c #5B7ABA",
+"w, c #6084ED",
+"x, c #5677FB",
+"y, c #6388FC",
+"z, c #82B3FB",
+"A, c #86B8FB",
+"B, c #5575FB",
+"C, c #354AFC",
+"D, c #4F6EF8",
+"E, c #719BD3",
+"F, c #62838E",
+"G, c #4B6466",
+"H, c #32403F",
+"I, c #171919",
+"J, c #0A0A0C",
+"K, c #080908",
+"L, c #070708",
+"M, c #B9B8B9",
+"N, c #B9B9B8",
+"O, c #383937",
+"P, c #2C2D2C",
+"Q, c #252626",
+"R, c #272C30",
+"S, c #4E6676",
+"T, c #5C7CB0",
+"U, c #5A7CEB",
+"V, c #4159FC",
+"W, c #435CFC",
+"X, c #374CFC",
+"Y, c #3347FC",
+"Z, c #1C27FD",
+"`, c #222FFD",
+" ' c #4864F7",
+".' c #5C7EE9",
+"+' c #7098D4",
+"@' c #5A798B",
+"#' c #394948",
+"$' c #252A2A",
+"%' c #0B0A0B",
+"&' c #0B0A09",
+"*' c #090808",
+"=' c #070808",
+"-' c #070707",
+";' c #B8B7B8",
+">' c #D6D7D7",
+",' c #D7D6D7",
+"'' c #343435",
+")' c #2D2D2F",
+"!' c #282929",
+"~' c #2C2F2E",
+"{' c #576E6D",
+"]' c #6B90A6",
+"^' c #658AE8",
+"/' c #3245FD",
+"(' c #3F56FC",
+"_' c #84B6FB",
+":' c #76A1DB",
+"<' c #5370C0",
+"[' c #4A65D9",
+"}' c #455FF7",
+"|' c #4661FA",
+"1' c #5D7FE7",
+"2' c #6D94B7",
+"3' c #3C4D4D",
+"4' c #0B0C0C",
+"5' c #080809",
+"6' c #060606",
+"7' c #B7B8B7",
+"8' c #D7D6D6",
+"9' c #3F3F3E",
+"0' c #363635",
+"a' c #282829",
+"b' c #1A1C1C",
+"c' c #495F68",
+"d' c #6B92CC",
+"e' c #5474FC",
+"f' c #75A0FB",
+"g' c #769FA3",
+"h' c #283137",
+"i' c #364651",
+"j' c #5B7A97",
+"k' c #6C93DA",
+"l' c #5979FB",
+"m' c #4D6AFC",
+"n' c #6283CF",
+"o' c #4D676B",
+"p' c #0D0D0E",
+"q' c #0A0909",
+"r' c #080808",
+"s' c #070706",
+"t' c #060605",
+"u' c #D6D5D6",
+"v' c #606061",
+"w' c #272726",
+"x' c #232223",
+"y' c #212220",
+"z' c #1C1C1B",
+"A' c #3E4C4A",
+"B' c #77A2C3",
+"C' c #82B1EC",
+"D' c #6A8F90",
+"E' c #2B3332",
+"F' c #55727E",
+"G' c #6D95E0",
+"H' c #658AFB",
+"I' c #8EC3D8",
+"J' c #283432",
+"K' c #050505",
+"L' c #B8B7B7",
+"M' c #D6D6D5",
+"N' c #C5C5C4",
+"O' c #848484",
+"P' c #252526",
+"Q' c #181819",
+"R' c #353E3D",
+"S' c #4F6664",
+"T' c #313D3D",
+"U' c #111010",
+"V' c #3F5255",
+"W' c #53718E",
+"X' c #688C93",
+"Y' c #1D2425",
+"Z' c #080707",
+"`' c #050606",
+" ) c #050406",
+".) c #040404",
+"+) c #B7B7B6",
+"@) c #D3D3D2",
+"#) c #292928",
+"$) c #111312",
+"%) c #0B0A0A",
+"&) c #080807",
+"*) c #080607",
+"=) c #060505",
+"-) c #050504",
+";) c #D1D1D2",
+">) c #858484",
+",) c #272827",
+"') c #0F100F",
+")) c #0E0D0E",
+"!) c #0C0D0C",
+"~) c #080A09",
+"{) c #090809",
+"]) c #060707",
+"^) c #060506",
+"/) c #040505",
+"() c #030303",
+"_) c #B6B5B5",
+":) c #CFCECF",
+"<) c #CFCECE",
+"[) c #BDBEBE",
+"}) c #0E0D0F",
+"|) c #0C0D0D",
+"1) c #0C0B0B",
+"2) c #0A0B0A",
+"3) c #090A0A",
+"4) c #070807",
+"5) c #050506",
+"6) c #040303",
+"7) c #030403",
+"8) c #020202",
+"9) c #CFCFCE",
+"0) c #CDCCCC",
+"a) c #828282",
+"b) c #252524",
+"c) c #121011",
+"d) c #0C0C0D",
+"e) c #060706",
+"f) c #020203",
+"g) c #010202",
+"h) c #B4B4B5",
+"i) c #555554",
+"j) c #CCCCCD",
+"k) c #CBCCCB",
+"l) c #CACBCA",
+"m) c #0E0E0D",
+"n) c #030404",
+"o) c #010101",
+"p) c #B5B4B5",
+"q) c #B4B5B4",
+"r) c #C9CACA",
+"s) c #C8C9C9",
+"t) c #C9C8C9",
+"u) c #777877",
+"v) c #121311",
+"w) c #050405",
+"x) c #040403",
+"y) c #020201",
+"z) c #000000",
+"A) c #4F504E",
+"B) c #C9C8C8",
+"C) c #C7C7C8",
+"D) c #C6C7C6",
+"E) c #60605F",
+"F) c #050404",
+"G) c #000001",
+"H) c #B3B4B4",
+"I) c #C7C6C6",
+"J) c #C5C6C6",
+"K) c #C6C5C6",
+"L) c #B2B3B3",
+"M) c #949494",
+"N) c #7E7E7E",
+"O) c #171718",
+"P) c #0D0E0D",
+"Q) c #09090A",
+"R) c #080909",
+"S) c #070607",
+"T) c #060504",
+"U) c #020303",
+"V) c #B3B3B4",
+"W) c #666666",
+"X) c #9F9F9F",
+"Y) c #C4C3C4",
+"Z) c #C2C2C3",
+"`) c #C0C0BF",
+" ! c #BCBBBB",
+".! c #909191",
+"+! c #141516",
+"@! c #121211",
+"#! c #0F0E0F",
+"$! c #090908",
+"%! c #070606",
+"&! c #050605",
+"*! c #020101",
+"=! c #B2B3B2",
+"-! c #4D4E4D",
+";! c #929292",
+">! c #C2C3C2",
+",! c #C1C2C2",
+"'! c #C2C1C2",
+")! c #0B0C0B",
+"!! c #030202",
+"~! c #000100",
+"{! c #B3B2B2",
+"]! c #4B4C4B",
+"^! c #464745",
+"/! c #AFB0AF",
+"(! c #ADAEAE",
+"_! c #ABAAAA",
+":! c #BFBFBE",
+"~ c #565756",
+",~ c #989998",
+"'~ c #A0A1A0",
+")~ c #A4A3A4",
+"!~ c #B0B1B1",
+"~~ c #B1B0B1",
+"{~ c #B6B7B7",
+"]~ c #787877",
+"^~ c #757676",
+"/~ c #747474",
+"(~ c #8C8D8C",
+"_~ c #9D9C9D",
+":~ c #A8A8A7",
+"<~ c #545353",
+"[~ c #989797",
+"}~ c #9F9F9E",
+"|~ c #A0A1A1",
+"1~ c #8C8C8B",
+"2~ c #706F70",
+"3~ c #B1B1B0",
+"4~ c #B4B5B5",
+"5~ c #777677",
+"6~ c #727172",
+"7~ c #6B6C6C",
+"8~ c #80807F",
+"9~ c #919090",
+"0~ c #9E9E9F",
+"a~ c #A4A5A4",
+"b~ c #A6A7A6",
+"c~ c #898888",
+"d~ c #6E6E6D",
+"e~ c #5F5F60",
+"f~ c #797A7A",
+"g~ c #7E7F7F",
+"h~ c #777777",
+"i~ c #616060",
+"j~ c #663737",
+"k~ c #FF0000",
+"l~ c #932626",
+"m~ c #4A4141",
+"n~ c #626263",
+"o~ c #767777",
+"p~ c #767675",
+"q~ c #717171",
+"r~ c #6E6E6F",
+"s~ c #6C6D6D",
+"t~ c #6A6969",
+"u~ c #676767",
+"v~ c #656665",
+"w~ c #676766",
+"x~ c #727373",
+"y~ c #5C5C5B",
+"z~ c #6A6A6B",
+"A~ c #7B7A7B",
+"B~ c #626262",
+"C~ c #C31515",
+"D~ c #EA0707",
+"E~ c #6B6A6B",
+"F~ c #6C6B6B",
+"G~ c #B1B1B2",
+"H~ c #777676",
+"I~ c #747575",
+"J~ c #717271",
+"K~ c #6D6E6D",
+"L~ c #6B6B6A",
+"M~ c #686767",
+"N~ c #646363",
+"O~ c #5D5D5C",
+"P~ c #777776",
+"Q~ c #878788",
+"R~ c #969596",
+"S~ c #9A9898",
+"T~ c #9A9A99",
+"U~ c #646463",
+"V~ c #7B7C7C",
+"W~ c #7B7C7B",
+"X~ c #707170",
+"Y~ c #575756",
+"Z~ c #FFFFFF",
+"`~ c #696968",
+" { c #B0B0B1",
+".{ c #ABACAB",
+"+{ c #787777",
+"@{ c #717170",
+"#{ c #696869",
+"${ c #666565",
+"%{ c #646465",
+"&{ c #636363",
+"*{ c #605F5F",
+"={ c #575758",
+"-{ c #8B8A8B",
+";{ c #949393",
+">{ c #454343",
+",{ c #D31010",
+"'{ c #FE0100",
+"){ c #FB0001",
+"!{ c #F80101",
+"~{ c #F40201",
+"{{ c #F10102",
+"]{ c #EE0202",
+"^{ c #EB0303",
+"/{ c #E70303",
+"({ c #E40303",
+"_{ c #E10403",
+":{ c #DE0404",
+"<{ c #932B2B",
+"[{ c #666566",
+"}{ c #A5A4A4",
+"|{ c #969797",
+"1{ c #787778",
+"2{ c #636364",
+"3{ c #606161",
+"4{ c #5D5C5C",
+"5{ c #585958",
+"6{ c #5C5C5D",
+"7{ c #868787",
+"8{ c #7F807F",
+"9{ c #FB0101",
+"0{ c #F70101",
+"a{ c #F40101",
+"b{ c #F10101",
+"c{ c #EA0302",
+"d{ c #E80303",
+"e{ c #E10404",
+"f{ c #DD0404",
+"g{ c #DA0404",
+"h{ c #D70505",
+"i{ c #A23A3A",
+"j{ c #606160",
+"k{ c #616261",
+"l{ c #656566",
+"m{ c #666767",
+"n{ c #ADADAC",
+"o{ c #A8A9A8",
+"p{ c #9A9999",
+"q{ c #6A6A69",
+"r{ c #626261",
+"s{ c #5F605F",
+"t{ c #818081",
+"u{ c #868685",
+"v{ c #FE0001",
+"w{ c #FA0000",
+"x{ c #F40202",
+"y{ c #F10202",
+"z{ c #EA0303",
+"A{ c #E10304",
+"B{ c #DB0504",
+"C{ c #D70405",
+"D{ c #D40506",
+"E{ c #D00506",
+"F{ c #ED0A0A",
+"G{ c #A33636",
+"H{ c #655C5C",
+"I{ c #636362",
+"J{ c #7C7B7B",
+"K{ c #939292",
+"L{ c #8A8B8A",
+"M{ c #676768",
+"N{ c #848485",
+"O{ c #818281",
+"P{ c #7F7E7E",
+"Q{ c #7B7B7A",
+"R{ c #FD0000",
+"S{ c #F40102",
+"T{ c #F00202",
+"U{ c #ED0202",
+"V{ c #EB0203",
+"W{ c #E40304",
+"X{ c #DA0504",
+"Y{ c #D10506",
+"Z{ c #CD0606",
+"`{ c #CA0607",
+" ] c #A33535",
+".] c #A5A6A6",
+"+] c #9F9FA0",
+"@] c #8B8C8B",
+"#] c #818180",
+"$] c #7E7D7E",
+"%] c #7C7C7D",
+"&] c #787978",
+"*] c #636463",
+"=] c #FD0001",
+"-] c #FA0100",
+";] c #E70203",
+">] c #E30303",
+",] c #D40505",
+"'] c #D00605",
+")] c #C70707",
+"!] c #C40707",
+"~] c #A23535",
+"{] c #645B5B",
+"]] c #616160",
+"^] c #626161",
+"/] c #7C7D7C",
+"(] c #9B9A9A",
+"_] c #666667",
+":] c #818182",
+"<] c #7D7E7D",
+"[] c #757475",
+"}] c #ED0203",
+"|] c #E00404",
+"1] c #DA0505",
+"2] c #D60505",
+"3] c #D40605",
+"4] c #D00505",
+"5] c #CA0706",
+"6] c #C30707",
+"7] c #C00707",
+"8] c #BD0808",
+"9] c #9F3737",
+"0] c #5F6060",
+"a] c #707171",
+"b] c #807F80",
+"c] c #8E8E8F",
+"d] c #979696",
+"e] c #959594",
+"f] c #686869",
+"g] c #7F8080",
+"h] c #7E7E7F",
+"i] c #7C7D7D",
+"j] c #737374",
+"k] c #F60101",
+"l] c #F30101",
+"m] c #E90302",
+"n] c #E10303",
+"o] c #DC0404",
+"p] c #D90405",
+"q] c #D00606",
+"r] c #C60607",
+"s] c #C00808",
+"t] c #B90908",
+"u] c #B60809",
+"v] c #5F5F5E",
+"w] c #747473",
+"x] c #838384",
+"y] c #908F90",
+"z] c #919192",
+"A] c #7D7C7D",
+"B] c #818282",
+"C] c #808081",
+"D] c #7F7F80",
+"E] c #FA0001",
+"F] c #F00102",
+"G] c #E60303",
+"H] c #DA0405",
+"I] c #D30605",
+"J] c #C90607",
+"K] c #C70706",
+"L] c #BF0808",
+"M] c #BA0908",
+"N] c #B60909",
+"O] c #B30909",
+"P] c #B00A0A",
+"Q] c #5B5A5C",
+"R] c #5C5D5D",
+"S] c #828181",
+"T] c #5A595A",
+"U] c #676667",
+"V] c #8A8A8A",
+"W] c #7A7A7B",
+"X] c #F90101",
+"Y] c #F30102",
+"Z] c #E90203",
+"`] c #E30403",
+" ^ c #E00403",
+".^ c #D90504",
+"+^ c #D60405",
+"@^ c #D30505",
+"#^ c #CF0606",
+"$^ c #CC0606",
+"%^ c #C00807",
+"&^ c #B90909",
+"*^ c #B20909",
+"=^ c #B0090A",
+"-^ c #AC0A0A",
+";^ c #9E9E9D",
+">^ c #838282",
+",^ c #767576",
+"'^ c #868585",
+")^ c #797A79",
+"!^ c #737273",
+"~^ c #FC0101",
+"{^ c #EF0202",
+"]^ c #C90707",
+"^^ c #C60707",
+"/^ c #C20807",
+"(^ c #BC0808",
+"_^ c #B90808",
+":^ c #B3090A",
+"<^ c #B00909",
+"[^ c #A90A0A",
+"}^ c #7F7E7F",
+"|^ c #989897",
+"1^ c #9C9D9C",
+"2^ c #F90001",
+"3^ c #EC0202",
+"4^ c #E90303",
+"5^ c #DF0404",
+"6^ c #D50505",
+"7^ c #CF0605",
+"8^ c #C90706",
+"9^ c #BF0708",
+"0^ c #B60908",
+"a^ c #AF0909",
+"b^ c #A90B0A",
+"c^ c #A60B0A",
+"d^ c #9C9B9C",
+"e^ c #9B9B9A",
+"f^ c #F60102",
+"g^ c #F20101",
+"h^ c #E30304",
+"i^ c #DC0504",
+"j^ c #D90505",
+"k^ c #C90606",
+"l^ c #C30708",
+"m^ c #B50908",
+"n^ c #A90A0B",
+"o^ c #A50B0B",
+"p^ c #A30B0B",
+"q^ c #838483",
+"r^ c #8D8D8C",
+"s^ c #959696",
+"t^ c #959795",
+"u^ c #757574",
+"v^ c #656666",
+"w^ c #7D7E7E",
+"x^ c #737372",
+"y^ c #D20505",
+"z^ c #C20707",
+"A^ c #B80808",
+"B^ c #A80B0B",
+"C^ c #A20B0B",
+"D^ c #9F0B0B",
+"E^ c #747374",
+"F^ c #979796",
+"G^ c #939392",
+"H^ c #7D7D7E",
+"I^ c #777878",
+"J^ c #747373",
+"K^ c #EC0203",
+"L^ c #E50303",
+"M^ c #E20404",
+"N^ c #CB0606",
+"O^ c #C80607",
+"P^ c #C50707",
+"Q^ c #B50909",
+"R^ c #B20A0A",
+"S^ c #AF0A09",
+"T^ c #A50B0A",
+"U^ c #9B0C0C",
+"V^ c #7A7B7B",
+"W^ c #929393",
+"X^ c #7C7C7B",
+"Y^ c #EB0302",
+"Z^ c #E20403",
+"`^ c #D80504",
+" / c #CB0706",
+"./ c #C80706",
+"+/ c #C20708",
+"@/ c #BB0808",
+"#/ c #B90809",
+"$/ c #B2090A",
+"%/ c #AB0A0A",
+"&/ c #A90B0B",
+"*/ c #A50A0A",
+"=/ c #A20C0C",
+"-/ c #9E0C0C",
+";/ c #980D0C",
+">/ c #7A7B7A",
+",/ c #929293",
+"'/ c #898A8A",
+")/ c #666665",
+"!/ c #E50403",
+"~/ c #E20304",
+"{/ c #DF0304",
+"]/ c #DB0505",
+"^/ c #D20605",
+"// c #CF0506",
+"(/ c #CC0607",
+"_/ c #BF0807",
+":/ c #BB0908",
+" c #AF0A0A",
+"[/ c #AB0B0A",
+"}/ c #A80B0A",
+"|/ c #9F0C0C",
+"1/ c #9C0C0C",
+"2/ c #950C0D",
+"3/ c #898988",
+"4/ c #787879",
+"5/ c #797978",
+"6/ c #757675",
+"7/ c #DB0404",
+"8/ c #D90404",
+"9/ c #D20606",
+"0/ c #BE0808",
+"a/ c #BC0908",
+"b/ c #B10909",
+"c/ c #AE0909",
+"d/ c #A80A0A",
+"e/ c #A40B0B",
+"f/ c #A10B0B",
+"g/ c #9E0B0C",
+"h/ c #980C0C",
+"i/ c #950D0D",
+"j/ c #920E0D",
+"k/ c #89898A",
+"l/ c #858685",
+"m/ c #848384",
+"n/ c #808180",
+"o/ c #757576",
+"p/ c #747475",
+"q/ c #6A6B6B",
+"r/ c #D80505",
+"s/ c #D50506",
+"t/ c #D10505",
+"u/ c #CB0607",
+"v/ c #B80809",
+"w/ c #B1090A",
+"x/ c #AE0A0A",
+"y/ c #A40A0B",
+"z/ c #9E0C0B",
+"A/ c #940D0C",
+"B/ c #910E0D",
+"C/ c #8E0D0E",
+"D/ c #838382",
+"E/ c #747576",
+"F/ c #737473",
+"G/ c #CE0506",
+"H/ c #C10807",
+"I/ c #B80909",
+"J/ c #B40909",
+"K/ c #B10A09",
+"L/ c #AE0A09",
+"M/ c #940D0D",
+"N/ c #8B0E0E",
+"O/ c #79797A",
+"P/ c #7A7A79",
+"Q/ c #767776",
+"R/ c #D10605",
+"S/ c #CE0606",
+"T/ c #BB0809",
+"U/ c #B70909",
+"V/ c #A80A0B",
+"W/ c #A40B0A",
+"X/ c #970D0D",
+"Y/ c #910D0D",
+"Z/ c #8E0D0D",
+"`/ c #870F0E",
+" ( c #6B6A6A",
+".( c #747574",
+"+( c #CE0605",
+"@( c #C10707",
+"#( c #A70A0B",
+"$( c #9A0C0C",
+"%( c #980D0D",
+"&( c #8D0E0D",
+"*( c #8A0E0E",
+"=( c #880E0F",
+"-( c #C80707",
+";( c #C10808",
+">( c #BA0808",
+",( c #B70808",
+"'( c #A70B0B",
+")( c #9D0C0C",
+"!( c #970C0C",
+"~( c #870F0F",
+"{( c #AB4343",
+"]( c #BD0708",
+"^( c #B00A09",
+"/( c #AD0A09",
+"(( c #AA0A0B",
+"_( c #A00B0B",
+":( c #9D0C0B",
+"<( c #960C0C",
+"[( c #940C0D",
+"}( c #900D0D",
+"|( c #870E0F",
+"1( c #766D6D",
+"2( c #AE4141",
+"3( c #EF0C0C",
+"4( c #C10708",
+"5( c #AD0A0A",
+"6( c #AA0B0B",
+"7( c #A10C0B",
+"8( c #930D0D",
+"9( c #900D0E",
+"0( c #8D0D0E",
+"a( c #8A0F0E",
+"b( c #B70908",
+"c( c #A00B0C",
+"d( c #8D0E0E",
+"e( c #890E0E",
+"f( c #AA0A0A",
+"g( c #A70B0A",
+"h( c #930C0D",
+"i( c #8C0E0E",
+"j( c #870E0E",
+"k( c #A60B0B",
+"l( c #A00C0C",
+"m( c #990C0D",
+"n( c #900E0D",
+"o( c #860F0E",
+"p( c #990C0C",
+"q( c #8F0D0E",
+"r( c #890E0F",
+"s( c #860E0F",
+"t( c #AF4242",
+"u( c #EB0808",
+"v( c #776E6E",
+"w( c #962929",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" . . . ",
+" + + + . . . . . . . ",
+" + + + + + @ # # $ . . . . . . ",
+" + + % + & # * = - ; > , ' . . . . . ",
+" + + ) ! ~ { ] ^ / > ' ' ' ( _ : . . . . . . . . ",
+" + + ) ) ) ) ) < [ } | 1 2 3 3 4 5 5 6 7 8 8 . . . . . ",
+" + # ) ) ) ) ) 9 0 a b c 0 d e f 8 8 7 g 8 h i j k . . . . . . ",
+" l # ) ) ) m n 0 o p q r s t u v w x { y z k k A A B C D f . . . . . . . ",
+" # # ) ) E F 0 a G H I J K L v M N O P u Q R S T A U U f f f V V W X . . . . . . ",
+" Y $ ) ) Z 9 0 ` H r J ...+.+.@.#.$.%.&.*.=.-.;.>.! ,.'.).!.~.{.~.].^.^./.(.. . . . . ",
+" _.- ) 9 0 0 H p :.s t ..v M M N P %.&.*.<.[.}.}.|.1.2.3.4.5.6.7.8.9.^.(./.0.a.% b.. . . . . . . . ",
+" - ; 9 n a c.H d.e. .u v f.N N P g.h.&.[.i.j.k.k.1.3.l.4.m.n.n.o.&.) p.,.q.r.s.t.u.v.w.x.y.y.z.. . . . . ",
+" ; > A.0 a H q B.s ..v C.M D.N g.&.&.<.i.[.E.F.|.G.3.H.I.J.K.L.M.N.O.O.P.Q.R.S.T.U.^ V.y.y.W.z.1 1 V.. . . . . . ",
+" X.> 0 a b H Y.s s L f.C.N P Z.h.&.&.`.[.j.k.1. +3.4.J.n.n.L.M..+++@+P.Q.R.#+$+%+&+i.*+=+-+;+>+,+V.'+)+)+)+!+. . . . . . . ",
+" > ~+a c.{+B.e.u ]+^+/+(+P %.h._+:+:+[.k.k.<+[+4.4.I.}+n.|+M.1+O.O.2+Q.3+4+5+%+6+7+8+9+0+a+4.N b+c+d+)+e+f+g+^ ^ h+i+j+. . . . . . ",
+" , ' c.H r s t u v M N N P k+_+l+[.[.m+k.k.[+3.4.n+I.}+o+M.M.p+q+r+Q.s+#+t+a+u+v+8+9+w+0+x+y+z+A+A+B+C+D+E+F+G+H+U.I+J+K+K+L+M+. . . . . . . ",
+" ' ' :.r Y.s L v v N N N+g.&.O+<.[.-.P+k.1.3.4.Q+R+n.o+M.S+T+O.2+Q.Q.#+5+U+a+v+V+W+X+Y+Z+y+`+ @A+B+.@+@@@#@$@..%@&@*@=@-@L+;@>@>@,@'@)@!@. . . . . . ",
+" ~@3 r s {@..v /+]@D.^@g.k+`.<.[.}./@k.2.(@l._@I.n.o+:@M.p+O.P.<@#+3+$+$+&+v+8+9+[@0+x+y+`+}@A+B+|@+@@@#@1@2@3@4@5@6@R.7@8@9@>@,@'@'@0@G+a@b@b@c@. . . . . ",
+" 3 3 r s ..d@+.@.N D.g.g.`.e@=.;.E.k.2.3.H.f@}+J.g@o.h@i@O.@+j@Q.#+k@$+a+v+V+l@9+0+m@n@y+6@A+o@p@q@r@#@s@t@u@v@w@x@y@z@A@B@C@D@M E@F@G@H@b@I@b@=@J@K@L@. . . . . . ",
+" 3 4 .]+M@M N N $.Z.&.N@`.[.O@>.k.1. +3.P@I.n.Q@:@M.N.R@2+P.S@4+T@$+a+U@V@W@X@w+0+y+y+Y@A+Z@|@q@`@#@ #$@.#4@w@w@x@+#@#B@##$#%#*#=#-#;#>#,#'#F+L@)#!#~#{#]#^#. /#/# ",
+" (#5 ..v ^+M N P Z.g.l+`.<.}.}.k.1.1.3._#_@R+:#<#M.p+O.O.[#Q.s+}#$+a+v+8+8+|#0+Y+1#y+Y@-#2#.@q@@@3#4#$@3@u@5#6#x@+#7#B@C@8#$#9#0#a#b#c#c#d#b#w@.@u ,#q.{#{#e#f#g#/#/# ",
+" 5 6 ..v ]@N $.P g.&.`.:+j.>./@|.3.3.Q+I.I.o+o+M.p+++O.[#Q.h#t+$+a+v+8+W@9+w+0+i#y+Y@ @j#B+.@@@k#s@l#3@3@m#n#6#x@7#o#p#$#%#%#*#=#=#q#r#s#t#u#v#w#x#x#y#z#A#B#C#f#/#/# ",
+" D#6 M M E#P g.F#&.`.e@}.}.k.G#1.3.4.n+}+g@o+1+M.p+@+r+<@s+H#t+I#J#v+8+|#K#Y+i#y+L# @A+M#q@q@k# # #N#O#4@P#x@Q#R#p#C@S#T#9#*#0#=#U#c#V#d#W#X#v#Y#Z#`# $.$+$@$#$$$/#/# ",
+" 5 6 M @.D.P g.%$&$:+;.m+*$1.=$3.4.-$J.o+g@M.N.R@O.P.S@Q.H#$+;$J#V@W+9+w+>$x+y+Y@,$A+B+q@'$)$#@!$3@v@4@w@6#y@+#@#p#$#~${$]$a#=#q#^$/$($t#_$w#x#`#:$y#<$[$}$|$1$$$/#/# ",
+" 6 6 (+D.N+g.F#O+:+[.2$*$F.=$2.l.4.I.:#o+o+1+p+R@P.3$Q.#+$+;$J#v+4$5$|#Y+x+y+6$7$A+B+8$@@k##@l#N#3@4@w@9$y@0$a$b$c$d${$*#=#=#b#c#e$t#f$g$w#h$i$j$ $k$+$}$l$m$$$n$/#/# ",
+" o$8 p$P g.&.q$<.[.}.k.G#1.3.r$n+R+n.Q@L.M.p+@+O.3$Q.#+H#$+U@v+4$s$9+t$n@u$`+Y@A+v$w$q@r@#@#@2@O#4@w@z#x$+#@#p#C@~$%#*#a#=#b#c#V#V#t#y$w#x#Z#Z# $.$z$[$A$B$C$D$E$/#/# ",
+" 8 h P g.%$&.`.[.7@}.G#1.G.4.Q+I.n.n.o+p+p+F$P.<@S@#+a+9+8+v+G$H$I$K#x+J$L# @A+o@|@q@@@)$s@K$3@4@L$M$N$+#7#O$S#c$P$Q$*#a#R$q#c#t#($u#v#h$S$`#`#T$z$+$|$C$C$U$V$E$/#/# ",
+" W$i ^@k+*.q$=.}.}.k.G#G.H._#f@X$Y$o+M.p+++2+P.<@#+8+y$[$Q$8$5$9+w+>$Z$y+Y@7$`$ %q@@@)$4#t@3@4@w@w@x@+#+#@#S#c$$##0#b#c#c#.%t#t#X#+%@%`# $T$T$[$|$|$#%$%%%] ] /#/# ",
+" &%*%F#&.q$=%j.j.k.<+3.r$4._#-%g@|+M.1+O.O.P.<@s+H#u$;%V#@@o#y$K$y+x+>%Y@7$Z@.@q@@@#@#@$@3@v@P#z#N$,%a$o#S###{$*#=#'%c#r#V#)%y$!%w#`#`# $~%T$+$l${%C$]%^%/%] (%/#/# ",
+" _%:%&.l+i.[.}.|.1.1.r$<%I.n.n.Y$M.S+p+[%[%j@#+H#t+0+}%4@g.|%s @#w#6#q@-#Z@w$q@@@k#s@$@t@O#m#w@6#y@+#@#C@1%T#%#*#2%3%4%s#V#t#g$y$w#+%`#`#5%T$T$|$A$C$;%6%/%7%(%8%/#/# ",
+" 9%A *.:+[.}.*$|.1.3.-$-$I.:#Y$1+1+0%[%P.j@s+#+H#9+8$a%Y@4.b%c%d%e%f%V#y@B+|@r@@@#@$@2@w@6#P#x@+#+#7#S#C@$#%#g%=#b#h%c#V#d#t#y$w#w#Z#i%j%T$[$[$|$C$$%6%k%7%l%(%8%/#/# ",
+" A A :+[.j.E.F.1.m%4.f@I.Q@L.<#M.T+O.n%o%s+#+$+a+7#p%q%r%D+0+s%t%u%v%w%W#k%]$4@u@$#t#w#f$b#x%$#@#@#C@y%d$z%*#=#2%q#c#r#)%A%y$w#x#B%`#k$5%+$@$|$C$;%6%k%C%D%E%F%G%/#/# ",
+" A H%[.;.>.F.1.H.4.-$J.m.I%M.M.p+O.2+P.R.h#k@a+V@X#J%K%L%M%g.N%O%P%Q%R%S%T%U%C$C$;%B+$+A+=# $C$l$t#$#d$T#V%*#=#b#^$s#V#t#y$X#Y#W%`#X%T$Y%Z%|$B$`% &k%7%C%.&+&G%@&/#/# ",
+" U U m+/@|.F.H.<%4.I.J.Q@o.M.N.O.n%P.Q.#+#&%+a+V+$&%&&&*&=&-&Q.;&>&,&'&)&!&~&+&p+{&]&^&/&(&_&:&g.=#<&Y%b#]$3%4%c#r#[&)%y$X#w#x#`#i%.$}&z$|${%|&6%k%1&2&3&+&4&5&G@/#/# ",
+" U 6&>.<+1.2.<%<%J.n.K.:@M.T+++O.[#Q.#+$+$+a+V@K#p%7&8&5.9&0&$@a&b&c&d&e&f&g&A+M%1$b@h&>@G+J@g#e /#i&3#7%C$w#U#V#)%A%j&_$k&x#W% $l&T$m&l$B$;%;%k%7%7%l%+&<&n&G@o&/#/# ",
+" p&D k.1.3.<%4.R+m.n.|+o.S+O.q+q&R.s+H#$+a+r&G$,$s&t&u&v&w&x&@#:&x a&y&z&A&B&I.C&$$$$D&f#f#^#q.=@a@f#E&`.k%7%`%V#F&y$G&Y#B%S$i%T$T$@$|$|$#%;% &7%l%H&+&I&J&K&L&o&/#/# ",
+" p&f M&=$3.<%R+X$n.o+M.S+N&n%P.Q.#+#+5+a+u+4$8+q@O&P&Q&R&,.S&+#T&U&. *+V&W&X&Y&Z&`&`&G@G@G@F%F%F% *(%] b%P..*+*;%f$G&w#x#W%`# $z$T$m&|$C$;%U$@*C%l%+&+&n&n*o&`&/#/# ",
+" f $*(@<%-$I.m.n.o+o.p+R@[%[#P.#+H#$+5+v+v+8+K#3#%*&***Q.=*-*4@@+1.3.8+3@#+&.;*e e e >*c%,*Z&Z&Z&'*'*F@)*0 '*!*7%T$+%@%`# $ $T$[$~*|$;%;%k%{*@*l%+&<&<&]*^*/*8.(*/#/# ",
+" V V 3.4.n+-%n.:@|+S+_*O.n%Q.Q.#&$+;$J#7+W@H$:*1%<*[.[*x+h#$+w#y+*$N }*|*E@1*2*3*4*5*6*E+7*8*8*9*C&C&2*J.0*e 4*`.a*b*x#i%<$5%z$Z%|$$%;%;%{*2&D%+&}%4&c*#*/*d*`&y /#/# ",
+" V W r$_#J.n.o+o+S+p+O.2+Q.#+h#$+a+%+4$8+W@K#2#;%o+e*-+D+f*g*[*,#h*i*j*k*j*l*/&j*m*n*(&(&(&l*l*l*o*o*&@x+,#p*4*x |$C$W% $.$z$|$q*B$#%;%%%7%l%.&+&<&J&r*s*t*a%y u*/#/# ",
+" v*{.-$J.n.o+C+.+p+_*M.P.R.H#T@I#v+v+8+9+9+0+4#<&w*x*x*x*_&y*^&-+z*A*=&=&7.y*B*C*| D*E*E*E*2*2*2*{ E*F*M.]&j*/&z*S@G* $k$H*[$|$I*;%;%1&<*l%.&+&<&]*r*J*t*a%K*u*'*/#/# ",
+" W ~.I.n.o+C+M.p+T+L*M*N*O*2$C+#&v+4$8+K#0+m@o@]%`./#P*Q*R*P*Q*Q*R*S*]&R*i*T*i*U*i*=&=&V*=&=&=&W*y*X*Y*w y*7.| E*Z*`*H*+*[$~*C$`%`%k%7%7%.&I& =]*#*.=t*a%+=@=u*#=/#/# ",
+" ~.$=R+o+|+M.p+F$2+%=&=*===-=;=>=,=8+[@0+I$y+'=)=U$k.,#R*_&M%M%Q*!=~=1*{=]=^=,#/=(=_=:=<=[=]&]&]&R*}=B+|%|=|=i*9&1=`*C$}$|$A$2=6%k%{*C%3=+&4=5=r*#*t*6=7=`*@='*'*/#/# ",
+" ].^.Q@o+h@N.++q+3$8=9=0=a=b=c=d=e=f=g=h=i=j=k=v+l=+&`+U&m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C={&D=E==+M.&.X*[=Q*_&F=$#`*|$m&C$C$;%k%<*2&G=3&H=I=r*#*t*J=a%K=L=M='*N=/#/# ",
+" ^.^.o+o.p+F$O.<@<@O=P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-,-'-)-!-~-{-]-^-/-(-_-:-<-R&3@[-M%_&X*}-w@`*k%~*q*C$#%k%<*7%G=+&+&5=]*^*|-J=J=`*@=1-2-Z&3-/#/# ",
+" 4-(.:@p+p+O.P.j@Q.#+;$5-6-7-8-9-0-a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-3.s%_&1*}-$@a%7%Z%A$C$;%%%1&7%l%G-}%H-]*I-J*t*a%`*J-K-L-M-3-N-/#/# ",
+" (.O-N.R@O.q+S@Q.#+t+%+6+P-Q-R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;';);!;~;{;];^;/;(;_;:;t M%e*w*+#M-<*~*|$C$;%U$k%<*l%G=H=<&]*c*t*d*a%`*@=1-2-M-<;[;c%/#/# ",
+" (.).p+O.2+j@R.};}#5+J#v+8+|;1;2;3;4;v+Y@A+5;J#6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;! b#L-;%|$m&x;C$]%1&7%l%3&+&<&]*c*a*t*a%`*`*y;L-z;A;<;B;C;/#/# ",
+" O-D;O.n%[#P.#+$+%+&+v+v+W@X+0+x+y+y+ @A+o@|@q@@@3#$@E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;`; >.>%%a%I*}$Z%B$;%;%k%7%l%G-+& =I=G*s*t*J=+>`*@=L-M-M-<;@>C;e /#/# ",
+" % #>[%P.Q.#+#&;$u+v+8+9+9+$>x+i#Y@Y@ @ %p@q@%>&>l#2@.#4@*>=>->;>>>,>'>)>!>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4> $Z%B$C$U$%%<*l%l%I&<&5>G*6>t*7>`*8>9>L-2-0>a>@>b>e c>/#/# ",
+" % b.P.o%h#H#$+a+6+G$W@9+$>x+x+`+Y@6@o@w$'$r@#@l#K$O#O#4@d>x@e>f>g>h>i>j>k>l>m>n>o>p>q>r>s>t>u>v>w>x>y>z>A>B>C>x#|&/%k%D%3&E%<&]*]*/*t*6=7=J-@=L-2-M-<;@>D>E>F>F@/#/# ",
+" u.u.S@#+#&$+a+6+G$W@|#w+x+y+>%Y@7$j#w$q@@@@@#@$@3@v@m#w@x@z@G>H>I>J>K>L>M>N>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,&,l%+&H=n&]*#*t*t*a%`**,y;2-M-<;=,-,;,>,,,,,/#/# ",
+" u.w.s+t+;$a+a+7+8+9+0+>$x+'=Y@,$B+B+q@@@@@#@',N#O#),M$x@+#@#!,C@$#~,x%{,],^,/,(,_,:,<,[,},|,1,2,3,4,5,6,7,8,9,0,a,b,c,d,<&<&r*#*/*t*K*+>@=1-L-e,<;f,D>g,>,>,,,h,/#/# ",
+" i,j,#&$+U+6+v+W+s$X+$>x+'=6$}@o@p@q@'$k#4#$@k,3@5#M$x@z@+#@#C@S#~$%#*#]$3%b#c#V#l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,t*a%`*`*K-L-M-<;a>J,;,>,K,L,M,N,/#/# ",
+" j,9.H#a+u+v+8+l@9+0+n@Z$L# @O,B+.@'$%>#@$@N#I>4@),d>N$a$A@P,##$#V%*#0#2%b#Q,V#V#t#y$X#Y#S$v#5%T$T$T$R,S,T,U,V,W,X,Y,Z,`, '.'+'@'#'$'`*y;L-M-M-<;%'&'>,*'='-'C&;'/#/# ",
+" >','a+&+v+8+l@K#$>x+y+Y@Y@j#v$.@@@@@''$@K$3@L$L$M$,%)'@#C@$#$#9#*#!'2%4%c#V#V#t#y$w#Y#x#`# $.$T$[$|$C$y#~'{']'^'/'('_':'<'['}'|'1'2'3'3&0><;4'D>;,g,5'='L,6';'7'/#/# ",
+" 8'y.a+7+9'8+9+>$Z+J$`+Y@A+B+B+0'@@)$l#k,3@4@w@M$x@+#@#p#C@$#%#*#a'2%b#c#V#.%t#y$v#h$x#W%y#<$}&l$|$q*2=;%]%7%b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'a>4';,g,q'r'-'s't'T T /#/# ",
+" y.u'E@D+v'$+0+x+y+6$`+A+v$|@+@@@#@$@t@3@4@w@x@x@,%7#p#C@$#%#z%a#2%b#w's#V#W#y$x'k&y'`#y#.$T$+$|$z'I*6%%%7%3=l%}$A'B'C'D't*a%+&E'F'G'H'I'J'J,b>E>K,K,-'-'6'K'L'8*/#/# ",
+" M'1 1 1 '@N'8*O'=$Y@A+A+B++@r@k#l#$@N#4@4@M$x$z@+#C@p#1%%#*#]$'%b#w'P'V#)%W#w#+%x#`# $l&T$[$l$q*C$;%%%Q'7%l%+& =<&R'S'T'a%a%U'@=H-V'W'X'Y';,E>>,r'Z's'`' ).)+)E+/#/# ",
+" 1 V.V.'+)+)+@)f+f+i*S.-%#+Y@$@k,t@u@m#w@x@+#+#@#1%y%8#z%#)=#3%q#c#V#t#W#y$h$k&i$:$ $T$[$l$|$C$;%^%7%7%C%+&+&<&G*I-a*/*+>`*@=L-L-L-a%$)%);,q'r'&)*)6'=)-).)9@E+/#/# ",
+" d+@)e+f+;)^ ^ i+U.y /#>)< p+4@w@x@+#G>@#C@$#~$%#*#=#,)w'e$V#V#j&y$w#x#x#j$ $T$+*~*|$C$;%^%<*7%l%+&4=<&]*^*6>t*a%`*')y;))p'!)@>@>;,~){)&)])`'^)/).)()_)4*/#/# ",
+" &.^ i+U.H+K+:)<)b@D$[)1*! +#@#C@c$T#9#*#=#'%b#r#V#.%u#y$w#k&B%i% $T$H*~*|$C$I*6%7%7%3&.&+&<&J&c*a*6=7>+=@=@=})M-|)1)2)2)3)r'4)-'^)5).)6)7)8)_)4*/#/# ",
+" *.P N $.P ^@K+9)<)L+L+>@>@0)'@'@,,a)j.v+1@a#=#b#c#V#b)A%y$w#@%x#j$y#T$T$[$|${%I*]%<*{*7%.&+&<&]*G*J*6>c)7=@=L-1-M-d)<;@>;,E>*'r'-'e)5)/).)6)f)g)4*h)/#/# ",
+" `.i)i)P P g.F#&.&$`.:+[.7@>@j)'@)@k)a@l)b@g#=&|%F==%9#V#A%y$w#Y#i$i% $<$T$[$l$C$#%;%k%7%2&E%+&4=I=c*s*t*a%K=J-@=m)))e,a>@>;,g,>,r'*)6'K'K'n)()8)8)o)p)q)/#/# ",
+" j.i.k+N+g.g.g.g.&.l+q$`.[.}.}.M&F.3.3.4.G+b@b@r)=@s)t)q.(%y { u)Y@w#B%`# $<$z$[$|$C$C$ &k%7%7%E%+&<&5=]*J*v)J=a%`*@=9>M-M-<;@>b>q'K,&)Z'6'6'w).)x)8)g)y)z)q)3*/#/# ",
+" A)-.`._+*.O+f*`.f*`.e@[.[.-.}.}.F.1.3.<%4.I.-%o+L.h@=@B)L@L@C)q.{#D)^#C#s%E)K#4@_$|$z'$%;%k%k%D%l%+& =I=]*c*t*J=a%@=J-1-M-M-<;@>;,;,{)r'&)e)`'K'F)x)()y)o)G)z)H)o*/#/# ",
+" 1.}.-.i.[.=.[.[.=%[.7@7@j.}.>.k.M&1.G.3.4.f@I.m.o+o.M.R@<#.*e*e*/#q.I)J)K)f#$$$$$$L)M)N)) 3@%%Q'O)E%+&}%n&^*^*t*6=a%`**,M=P)M-!)f,%'Q)>,R)-'S)6'T)F)7)U)8)o)G)z)z)V)V)/#/# ",
+" -%3.G#M&k.k.}.}.}.}.2$2$/@}.P+*$|.<+1.G.3.<%Q+I.R+Q@o+o.h@_*[%W)/#/#/#/#/#X)Q*x*N'D&Y)D$E$E$Z)`) !C&.!}.@*+!5=]*I-t*@!a%K=8>#!z;M-0>@>%'q'$!K,Z'])%!&!.)n)f)8)*!z)z)z)z)V)=!/#/# ",
+" o+I.4.m%[+ +=$G#|.-!|.k.M&|.F.k.<+-!(@G.H.4._#_#I.n.:#o+C+.+++2+P.;!/#/#/#/#/#B#R*i*y*D*{ E$>!(%,!'!F%5&G@G@`)j*F=S@w@`#7>`*K=@=L-z;<;)!-,%)Q)r'r'-'6'=)w).)()!!g)~!z)z)z)z){!L)/#/# ",
+" p+M.:#I.n+4.4.]!H.3. +G.1. +2.=$G.3.(@3.r$4.4.I.I.m.n.o+o.M.^!++2+P.P.1*/#/#/#/#/#M%R*^&A*2*/!l*3*l*/&(!_!@&G@o&`&:!>,>,f!S)%!K'/).)()g!8)h!z)z)z)z)z)z)l*(&/#/# ",
+" P.3.&+U+[#O.M.o+:#n.m.J.}+I.I.I.I._@_#I.I.I.n.g@n.o+o+<#C+M.p+T+O.P.P.P.P.P.N s%/#/#/#/#i!j!k!l!E*j*m!3*V)(&{ | =&x*[=n!/#/#/#o!Z&Z&Z&c%c%e F>p!,,q!p$3@@%M-K'.)n)f)8)*!z)z)z)z)z)z)z)l*(&/#/# ",
+" P./=r!s!G O.8+5+j@p+C+K.Q@n.K.:#n.X$n.:#Q@o+o+o+o+M.M.M..+++r+P.P.P.P.P.P.P.M ! /#/#/#/#!=t!9&u!7.2*v!w!(&j*x!y!z!x*Q*!=/#/#/#/#/#/#A!P.[!c>e ,,M,B!C&;'T.C!D!g. $8)E!E!z)z)z)z)z)z)z)(&(&/#/# ",
+" P.G%[;o*k!F!A!s!M v+8+$+n%p+M.o+|+o.M.M.M.M.M.S+0%p+++O.O.P.P.P.P.P.P.P.P.P.P.P.`.A!/#/#/#M%G!x*=&7.E*2*{ H!| y*^&I!J!K!/#/#/#/#/#/#1*P.P.P.P.P.B!;'9*8*8*9@E+q)=!8!|!v+6'z)z)z)z)z)z)(&/&/#/# ",
+" P.c%E+E+E++)4*L!u!B#M!w*k.9+v+#+P.O.p+p+p+p+T+T+O.O.r+P.P.P.P.P.P.P.P.P.P.P.P.P.P.k.p.M!/#!=_&R*i*V*E&7.| 7.N!-+x*O!B#/#/#/#/#/#/#/#a&P.P.P.P.P.P.P.P.P!+)E+6*4*4*h)3*o*Q!Q*p.x+b##*z)/&/&/#/#P. ",
+" P.R!p)3*R*/&S!T!U!w!j*V!W!j!X!Y&M.a+#+Q.P.P.n%P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.) D+M)Y!Z!`!x*i*T* ~-+^&x*R*_&X)/#/#/#/#/#/#e*! P.P.P.P.P.P.P.P.P.P.P.P.P.P..~.~o*L){!l*+~@~#~b%/&/&/#/#P.P.P.P.P. ",
+" P.B!Q!o*%@!*$~;*%~T*j*{ &~*~=~| E*-~;~a p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o+@.>~-*} ,~'~R*)~9&]&`!j!_&E=/#/#/#/#/#/=x 1=O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.o*l*(&+~!~~~/&/&/&/#P.P.P.P.P.P.P.P.P.P.P. ",
+" P.{~l*(&!*}-]~0*^~/~s![-(~_~=&E&=&=&=&y*:~E@F=..4.n.p+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2+n.*$<~s !*. a)C![~}~|~|~/#/#e*1*/#e*1~. 2~K.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3~/&/&/&P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O. ",
+" P.4~/&/&}-*+5~F=F=s!6~5.V&S.7~-*8~9~0~9&R*R*a~b~X)c~d~s &.3.p+#+Q.Q.P.P.P.P.P.P.P.P.R@4.}.p$r e~}*i&V&/~f~g~N):&[*D+h~W)i~) P+J.P.P.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~k~k~k~k~k~k~k~k~k~k~k~k~k~k~k~l~m~P.P.P.P.P.P.P.$+0 n~ ",
+" P.Q!L!L!*+o~p~/~/~}=q~2~r~s~p.t~w u~v~w~x~S&M)}~Y!}~i!_&,.:&< 9 M 3.Q.$+#+Q.P.P.P.P.P.P.P.M y~! W)z~5.^~A~[-h~-*S.)*B~0 ..F#M&Y$o+P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~C~k~k~k~k~k~k~k~k~k~k~k~k~k~k~k~D~l~m~P.P.P.O.P...i&E~F~ ",
+" P.G~2*H!H~^~I~s!s!J~5.r~K~p.L~.*M~W)}*N~g*! m O~Q P~Q~R~F!S~T~F!|%. S.U~v I.a+$+#+Q.P.P.P.P.P.P.P.p.q~P~V~W~0*X~p.W)1=a Y~*.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~C~k~k~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~k~D~l~m~P.M.g.W).*u~`~i& ",
+" P. {.{| !@+{s!-*-*@{V&d~S.< i{w~${%{&{1=*{9 a H I ={M :.#{. -{E@;{;{M!>)}-q~Y&N p+v+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.>{,{k~k~Z~Z~k~'{){!{~{{{]{^{/{({_{:{Z~Z~k~k~<{`.! W)N%Y&[{u~w ",
+" P.j*7.N!A*A*}{|{U&1{w*S.p.< .*w W)Y&2{B~3{) A.4{H 5{M@M P g.`.}.7@6{1!D+|%C!A!7{8{}-s!&{[.Q.a+#+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.>{,{k~k~Z~Z~k~'{9{0{a{b{]{c{d{({e{f{g{h{Z~Z~k~k~i{j{k{B~2{}*l{m{ ",
+" P.n{o{l!e*}{=&T.V*V*x*p{;*h~q{u~W)}*&{r{! ) 0 y~r .v ]@N+&.`.-.1.3.4.n.<#}.s{6~t{u{>)[*[-p=R&9 3.$+$+Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~C~k~k~Z~Z~k~v{w{!{x{y{]{z{/{({A{f{B{C{D{E{Z~Z~k~F{G{H{1=I{&{N%${ ",
+" P.0!-+-+%@!*J{!@K{!=x*x*c+`!Q*e*L{*+M{1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+N{S&O{:&P{=*Q{]~< ..n.#+Q.Q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~C~k~k~Z~Z~k~R{w{0{S{T{U{V{/{W{e{f{X{h{D{Y{Z{`{Z~Z~k~F{ ]H{1=1=n~N~ ",
+" P.7.i*.]!*}-]~0*^~/~-*. x&,.X)_&'~+]n!e*@]}-M{c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.S&a)#]D+$]%]. f~*+&]h~-**]g.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.j~C~k~k~Z~Z~k~=]-]0{a{y{U{c{;]>]_{f{X{C{,]']Z{`{)]!]Z~Z~k~F{~]{]! ]]^] ",
+" P.=&]&]&}-*+5~F=F=s!6~5.V&S.7~5./]@]/=/#X*(]e*s%1~!*_]v h.`.[.k. +4.J.o+p+P.P.P.P.P.S&:]:&;~<]V~Q{p=*+P~0*[]s!/~F=S.! `.n.M.O.P.P.P.P.P.P.P.P.P.P.P.P.>{,{k~k~Z~Z~k~R{w{0{a{y{}]c{/{W{|]f{1]2]3]4]Z{5])]6]7]8]Z~Z~k~k~9]) e~0] ",
+" P.b~Q*Q**+o~p~/~/~}=q~2~r~s~p.t~w u~v~w~a]b]c]%~/=d]6.e]A!b%f]M [+4.Q@C+p+2+P.P.P.P.a)[*g]h]i]b%!*}-*+P~F=j]-*-*-*s!/~F=F=< 9 &.3.n.p+P.Q.P.P.P.P.P.P.C~k~k~Z~Z~k~R{w{k]l]y{U{m]/{W{n]o]p]h{D{q]Z{5]r]6]s]8]t]u]Z~Z~k~k~0 n v] ",
+" P.c+_&_&H~^~I~s!s!J~5.r~K~p.L~.*M~W)}*N~g*! m O~${w]x]y]z].!&@M!|%A].*N 0%P.P.P.P.P.B]C]D]h][-. !*}-+{-&F=s!-*-*-*-*-*-*-*s!/~F=-*.*0 P }.I.O.Q.Q.Q.P.k~k~Z~Z~k~R{E]k]~{F]U{c{G]({|]f{H]h{I]q]Z{J]K]6]L]8]M]N]O]P]Z~k~k~Q]6{R] ",
+" P.R*i!X)S]H~s!-*-*@{V&d~S.< i{w~${%{&{1=*{9 a H I ={M T]U]+{!@C!A!|%V]x&N)< ..n.P.O{:&D+N)b%W]f~&]h~0*/~s!-*-*-*-*-*-*-*-*-*-*-*s!/~F=5.u~9 ..&.I.P.k~k~Z~k~=]X]k]Y]T{U{Z]G]`] ^o].^+^@^#^$^5]r]6]%^8]&^N]*^=^-^Z~k~k~Y.r H ",
+" P.[=!=;^!=!=T~M!>^,^w*S.p.< .*w W)Y&2{B~3{) A.4{H 5{M@M P g.`.}.}.{+< [ ~ 7{'^O'S&[-#]D]N)[-%@!*)^D!0*F=/~!^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*s!/~/~V&u~1=k~k~Z~~^E]k]l]{^U{m]G]>]|]o].^2]I]#^$^]^^^/^%^(^_^N]:^<^-^[^Z~k~k~.. .s ",
+" P.}^;{|^T~1^_~X*X*X*(],#S&F=q{u~W)}*&{r{! ) 0 y~r .v ]@N+&.`.-.1.3.4.n.<#2$Z w*b%B]:&D+N)%]. !**+h~0*F=s!}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*s!s!k~k~Z~2^k]Y]T{3^4^G]>]5^o]H]6^I]7^$^8^^^6]9^8]_^0^:^a^-^b^c^Z~k~k~M Y~]+ ",
+" P.8+v+1.W)D+A!,#/=1*d^e^e*s%s%,#O'F=M{1=) n 0 H s .v (+^@&.=%}.G#3._@Q@M.O.P.P.P.o+D+;~[-. !*v&*+o~F=/~s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*k~k~Z~f^g^T{U{Z]G]h^5^i^j^2]@^#^Z{k^^^l^L](^_^m^*^a^-^n^o^p^Z~k~k~O N M ",
+" P.#+8+9+#+_+w b%q^r^=+e*s%%~|{s^t^;!!@u^v^c s M@M D.%.&.=%P+1.l.J.o+S+O.P.P.P.P.D+w^%]. !*v&+{0*F=/~x^-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*k~k~Z~Y]{^3^4^G]h^5^i^.^2]y^#^$^k^^^z^L](^A^m^*^a^-^B^o^C^D^Z~k~k~g.<~P ",
+" Q.a+ v+p+M W)E^$]|%=+:=F^,.G^G^;!,#~ ,^%{v h.`.[.k. +4.J.o+p+P.P.P.P.P.H^i]V~A~p=I^h~,^/~J^}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*k~k~Z~{^K^4^L^M^5^o]j^6^I]#^N^O^P^6]L](^A^Q^R^S^-^[^T^C^D^U^Z~k~k~:+f*&. ",
+" 8+#+R+N 1=7~V^|%=+,.W^&@M!a&a&^=~ H~[{N [+4.Q@C+p+2+P.P.P.P.[-X^. f~}-h~0*F=/~x~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*q~w*k~k~Z~Y^d{L^Z^5^o]`^6^y^#^ /./P^+/9^@/#/Q^$/a^%/&/*/=/-/U^;/Z~k~k~}.[.<. ",
+" $+P.4.g.H u~>/1~,/,#a&1~V]'/;*x&|!*+)/Z.0%P.P.P.P.P.b%. !*}-*+h~0*F=s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*V&*+k~k~Z~4^!/~/{/]/.^6^^///(/k^P^+/_/:/t]Q^*^[/}/o^C^|/1/;/2/Z~k~k~k.k.}. ",
+" Q.O.I.F.N u~b%A!C!|%3/U&~ !@O'S&a)4/w M o+P.b%V^!*5/h~0*6/j]-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*V&0*k~k~Z~L^n]5^7/8/6^9/#^$^./P^z^0/a/A^Q^b/c/%/d/e/f/g/U^h/i/j/Z~k~k~[+2.<+ ",
+" P.O.M.o+g.w =*k/U&l/m/a)n/:&D+w^%]&]. !*}-*+0*o/p/s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*q/p.k~k~Z~e{5^7/r/s/t///u/./P^z^0/@/v/Q^w/x/%/}/y/C^z/U^h/A/B/C/Z~k~k~I.-$4. ",
+" P.P.P.P.p+N < =*D/#]n/N)H^%]%@W]}-v&+{0*E/F/}=-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*e~g*k~k~Z~:{7/r/3]Y{G/N^./P^H/0/@/I/J/K/L/%/B^e/f/g/U^h/M/B/C/N/Z~k~k~K.-$4. ",
+" P.Q.#+$+M. .Z*O/%@!*. P/v&1{Q/F=J^x~-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*Y&C.k~k~Z~]/h{6^R/S/`{./P^z^0/T/U/J/*^x/%/V/W/f/z/U^X/M/Y/Z/N/`/Z~k~k~n. ",
+" P.#+$+a+f@H (/~F/.(o/T&s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*1=1=k~k~Z~h{6^R/+(5]./!]@(0/@/A^J/b/L/%/#(e/f/g/$(%(M/Y/&(*(=(Z~Z~k~k~ ",
+" P.Q.$+a+#+1.H u~< S.q~s!s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*F k~k~Z~Z~t/G/5]-(!];(0/>(,(J/b/L/[/'(e/f/)($(!(M/Y/C/*(~(Z~Z~k~k~k~ ",
+" P.#+a+a+P.k.s &{u~p.q~/~s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*{(k~k~Z~Z~ /K]!]@(](M]U/J/^(/((('(e/_(:($(<([(}(C/*(|(Z~Z~k~k~k~ ",
+" Q. $+M.}...) W)S.s!/~s!-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*1(2(3(k~Z~Z~!]4(8]>(U/J/=^5(6('(e/7(:($(!(8(9(0(a(|(Z~Z~k~k~k~ ",
+" Q.o+}.M 0 Y&V&F=/~s!-*-*-*-*-*-*-*-*-*-*-*-*-*1(2(3(k~Z~Z~8]>(b(O]w//(6('(p^c()($(X/8(9(d(e(`/Z~Z~k~k~k~ ",
+" #+P.n.k.&.H u~q~0*/~s!-*-*-*-*-*-*-*-*-*-*1(2(3(k~Z~Z~b(O]^(5(f(g(e/_(:($(!(h(9(i(e(j(Z~Z~k~k~k~ ",
+" Q.O.n.3.`.a .*s!F=/~s!-*-*-*-*-*-*-*-*{(k~k~Z~Z~P]5(f(k(p^l()(m(X/M/n(&(*(o(Z~Z~k~k~k~ ",
+" P.O.M.n.`.9 p./~/~s!-*-*-*-*-*-*{(k~k~Z~Z~((k(p^c()(p(X/8(q(d(r(s(Z~Z~k~k~k~ ",
+" P.P.O.O.M.&.1=w*/~s!s!-*-*1(2(3(k~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~Z~k~k~k~ ",
+" P.P.P.P.p+P N%5.s!s!1(t(u(k~k~k~k~k~k~k~k~k~k~k~k~k~k~k~k~ ",
+" P.Q.#+#+n...u~v(w(k~k~k~k~k~k~k~k~k~k~k~k~k~k~k~ ",
+" P.#+$+Q.P. ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/src/Mod/Ship/InitGui.py b/src/Mod/Ship/InitGui.py
index aa8a409af..77298ad84 100644
--- a/src/Mod/Ship/InitGui.py
+++ b/src/Mod/Ship/InitGui.py
@@ -31,16 +31,38 @@ class ShipWorkbench ( Workbench ):
ToolTip = str(Translator.translate("Ship design"))
def Initialize(self):
+ from shipUtils import Translator
# ToolBar
list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"]
self.appendToolbar("Ship design",list)
list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"]
- self.appendToolbar("Loading",list)
+ self.appendToolbar("Weights",list)
+ # Simulation stuff only if pyOpenCL & numpy are present
+ hasOpenCL = True
+ hasNumpy = True
+ try:
+ import pyopencl
+ except ImportError:
+ hasOpenCL = False
+ msg = Translator.translate("pyOpenCL not installed, ship simulations disabled\n")
+ App.Console.PrintWarning(msg)
+ try:
+ import numpy
+ except ImportError:
+ hasNumpy = False
+ msg = Translator.translate("numpy not installed, ship simulations disabled\n")
+ App.Console.PrintWarning(msg)
+ if hasOpenCL and hasNumpy:
+ list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"]
+ self.appendToolbar("Simulation",list)
# Menu
list = ["Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics"]
self.appendMenu("Ship design",list)
list = ["Ship_Weights", "Ship_CreateTank", "Ship_GZ"]
- self.appendToolbar("Loading",list)
+ self.appendMenu("Weights",list)
+ if hasOpenCL and hasNumpy:
+ list = ["Ship_CreateSim", "Ship_RunSim", "Ship_StopSim"]
+ self.appendMenu("Simulation",list)
Gui.addWorkbench(ShipWorkbench())
diff --git a/src/Mod/Ship/Instance.py b/src/Mod/Ship/Instance.py
index ca601ddaa..40fd10992 100644
--- a/src/Mod/Ship/Instance.py
+++ b/src/Mod/Ship/Instance.py
@@ -30,7 +30,8 @@ from pivy import coin
# FreeCAD
import FreeCAD,FreeCADGui
-from FreeCAD import Part, Base, Vector
+from FreeCAD import Base, Vector
+import Part
# Ship design module
from shipUtils import Paths, Translator, Math
diff --git a/src/Mod/Ship/Makefile.am b/src/Mod/Ship/Makefile.am
index d1c50cfe3..f2477550b 100644
--- a/src/Mod/Ship/Makefile.am
+++ b/src/Mod/Ship/Makefile.am
@@ -5,6 +5,7 @@ data_DATA = \
InitGui.py \
ShipGui.py \
Instance.py \
+ SimInstance.py \
TankInstance.py
nobase_data_DATA = \
@@ -37,6 +38,14 @@ nobase_data_DATA = \
Icons/Weight.png \
Icons/Weight.xcf \
Icons/Weight.xpm \
+ Icons/SimIco.xcf \
+ Icons/Sim.xpm \
+ Icons/SimCreateIco.png \
+ Icons/SimCreateIco.xpm \
+ Icons/SimRunIco.png \
+ Icons/SimRunIco.xpm \
+ Icons/SimStopIco.png \
+ Icons/SimStopIco.xpm \
Icons/Tank.png \
Icons/Tank.xcf \
Icons/Tank.xpm \
@@ -44,6 +53,7 @@ nobase_data_DATA = \
Examples/s60_katamaran.fcstd \
Examples/wigley.fcstd \
Examples/wigley_katamaran.fcstd \
+ OpenCL/simInit.cl \
shipLoadExample/__init__.py \
shipLoadExample/TaskPanel.py \
shipLoadExample/TaskPanel.ui \
@@ -80,7 +90,19 @@ nobase_data_DATA = \
tankGZ/__init__.py \
tankGZ/Plot.py \
tankGZ/TaskPanel.py \
- tankGZ/TaskPanel.ui
+ tankGZ/TaskPanel.ui \
+ simCreate/__init__.py \
+ simCreate/TaskPanel.py \
+ simCreate/TaskPanel.ui \
+ simRun/__init__.py \
+ simRun/Simulation.py \
+ simRun/TaskPanel.py \
+ simRun/TaskPanel.ui \
+ simRun/clSim/__init__.py \
+ simRun/clSim/initialization.py \
+ simRun/clSim/Utils.py \
+ simRun/Sim/__init__.py \
+ simRun/Sim/initialization.py
CLEANFILES = $(BUILT_SOURCES)
diff --git a/src/Mod/Ship/OpenCL/simInit.cl b/src/Mod/Ship/OpenCL/simInit.cl
new file mode 100644
index 000000000..7bb8a3c2f
--- /dev/null
+++ b/src/Mod/Ship/OpenCL/simInit.cl
@@ -0,0 +1,99 @@
+/*
+ * -----------------------------------------------------------------------
+ *
+ * This source file is part of AQUA-gpusph.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA
+ *
+ *
+ * Authors:
+ * - Cercos Pita, Jose Luis
+ * - Miguel Gonzalez, Leo
+ * - Saelices, Jaime
+ * - Souto Iglesias, Antonio
+ *
+ * -----------------------------------------------------------------------
+ */
+
+#ifndef M_PI
+ #define M_PI 3,14159265359
+#endif
+
+#ifdef _g
+ #error '_g' is already defined.
+#endif
+#define _g __global
+
+#ifdef _l
+ #error '_l' is already defined.
+#endif
+#define _l __local
+
+#ifdef _c
+ #error '_c' is already defined.
+#endif
+#define _c __constant
+
+#ifndef _grav
+ #define _grav 9.81
+#endif
+
+/** Setup velocity and acceleration potential for initial time step.
+ * @param pos Cell position.
+ * @param v Cell velocity.
+ * @param f Cell acceleration.
+ * @param waves Waves (A,T,phase,heading)
+ * @param phi Velocity potential.
+ * @param Phi Acceleration potential
+ * @param N Number of cell elements at each direction.
+ * @param n Number of waves.
+ */
+__kernel void FS(_g float4* pos, _g float4* v, _g float4* f,
+ _g float4* waves, _g float* phi, _g float* Phi,
+ uint2 N, uint n)
+{
+ // find position in global arrays
+ unsigned int i = get_global_id(0);
+ unsigned int j = get_global_id(1);
+ if( (i >= N.x) || (j >= N.y) )
+ return;
+ unsigned int id = i*N.y + j;
+
+ // ---- | ------------------------ | ----
+ // ---- V ---- Your code here ---- V ----
+
+ unsigned int w;
+ for(w=0;w *
+#* *
+#* This program is free software; you can redistribute it and/or modify *
+#* it under the terms of the GNU Lesser General Public License (LGPL) *
+#* as published by the Free Software Foundation; either version 2 of *
+#* the License, or (at your option) any later version. *
+#* for detail see the LICENCE text file. *
+#* *
+#* This program is distributed in the hope that it will be useful, *
+#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+#* GNU Library General Public License for more details. *
+#* *
+#* You should have received a copy of the GNU Library General Public *
+#* License along with this program; if not, write to the Free Software *
+#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+#* USA *
+#* *
+#***************************************************************************
+
+import time
+from math import *
+import threading
+
+# COIN
+from pivy.coin import *
+from pivy import coin
+
+# FreeCAD
+import FreeCAD,FreeCADGui
+from FreeCAD import Base, Vector
+import Part
+
+# Ship design module
+from shipUtils import Paths, Translator, Math
+
+class FreeSurfaceFace:
+ def __init__(self, pos, normal, l, b):
+ """ Face storage.
+ @param pos Face position.
+ @param normal Face normal.
+ @param l Element length (distance between elements at x direction)
+ @param b Element beam (distance between elements at y direction)
+ """
+ self.pos = pos
+ self.normal = normal
+ self.area = l*b
+
+ def __init__(self, pos, normal, area):
+ """ Face storage.
+ @param pos Face position.
+ @param normal Face normal.
+ @param area Element area
+ """
+ self.pos = pos
+ self.normal = normal
+ self.area = area
+
+class ShipSimulation:
+ def __init__(self, obj, fsMeshData, waves):
+ """ Creates a new simulation instance on active document.
+ @param obj Created Part::FeaturePython object.
+ @param fsMeshData [L,B,N] Free surface mesh data, with lenght
+ (x), Beam (y) and desired number of points.
+ @param waves [[A,T,phi,heading],] Waves involved
+ """
+ # Add uniqueness property to identify Tank instances
+ obj.addProperty("App::PropertyBool","IsShipSimulation","ShipSimulation", str(Translator.translate("True if is a valid ship simulation instance"))).IsShipSimulation=True
+ # Compute free surface mesh
+ self.createFSMesh(obj,fsMeshData)
+ # Store waves
+ obj.addProperty("App::PropertyVectorList","Waves","ShipSimulation", str(Translator.translate("Waves (Amplitude,period,phase)"))).Waves=[]
+ obj.addProperty("App::PropertyFloatList","Waves_Dir","ShipSimulation", str(Translator.translate("Waves direction (0 deg to stern waves)"))).Waves_Dir=[]
+ w = []
+ d = []
+ for i in range(0,len(waves)):
+ w.append(Vector(waves[i][0], waves[i][1], waves[i][2]))
+ d.append(waves[i][3])
+ obj.Waves = w
+ obj.Waves_Dir = d
+ # Add shapes
+ shape = self.computeShape(obj)
+ if not shape:
+ obj.IsShipSimulation=False
+ return
+ obj.Shape = shape
+ obj.Proxy = self
+
+ def onChanged(self, fp, prop):
+ """ Property changed, tank must be recomputed """
+ if prop == "IsShipSimulation":
+ FreeCAD.Console.PrintWarning("Ussually you don't want to modify manually this option.\n")
+
+ def execute(self, obj):
+ """ Shape recomputation called """
+ obj.Shape = self.computeShape(obj)
+
+ def createFSMesh(self, obj, fsMeshData):
+ """ Create or modify free surface mesh.
+ @param obj Created Part::FeaturePython object.
+ @param fsMeshData [L,B,N] Free surface mesh data, with lenght
+ (x), Beam (y) and desired number of points.
+ """
+ # Study input object
+ try:
+ props = obj.PropertiesList
+ props.index("IsShipSimulation")
+ if not obj.IsShipSimulation:
+ msg = str(Translator.translate("Object is not a valid ship simulation.\n"))
+ FreeCAD.Console.PrintError(msg)
+ return
+ except ValueError:
+ msg = str(Translator.translate("Object is not a ship simulation.\n"))
+ FreeCAD.Console.PrintError(msg)
+ return
+ # Get areas and number of elements per direction
+ L = fsMeshData[0]
+ B = fsMeshData[1]
+ N = fsMeshData[2]
+ A = L*B
+ area = A/N
+ l = sqrt(area)
+ b = sqrt(area)
+ nx = int(round(L / l))
+ ny = int(round(B / b))
+ # Start data fields if not already exist
+ props = obj.PropertiesList
+ try:
+ props.index("FS_Nx")
+ except ValueError:
+ obj.addProperty("App::PropertyInteger","FS_Nx","ShipSimulation", str(Translator.translate("Free surface number of elements at x direction"))).FS_Nx=0
+ try:
+ props.index("FS_Ny")
+ except ValueError:
+ obj.addProperty("App::PropertyInteger","FS_Ny","ShipSimulation", str(Translator.translate("Free surface number of elements at y direction"))).FS_Ny=0
+ try:
+ props.index("FS_Position")
+ except ValueError:
+ obj.addProperty("App::PropertyVectorList","FS_Position","ShipSimulation", str(Translator.translate("Free surface elements position"))).FS_Position=[]
+ try:
+ props.index("FS_Area")
+ except ValueError:
+ obj.addProperty("App::PropertyFloatList","FS_Area","ShipSimulation", str(Translator.translate("Free surface elements area"))).FS_Area=[]
+ try:
+ props.index("FS_Normal")
+ except ValueError:
+ obj.addProperty("App::PropertyVectorList","FS_Normal","ShipSimulation", str(Translator.translate("Free surface elements normal"))).FS_Normal=[]
+ # Fill data
+ obj.FS_Nx = nx
+ obj.FS_Ny = ny
+ pos = []
+ areas = []
+ normal = []
+ for i in range(0,nx):
+ for j in range(0,ny):
+ pos.append(Vector(-0.5*L + (i+0.5)*l,-0.5*B + (j+0.5)*b,0.0))
+ areas.append(l*b)
+ normal.append(Vector(0.0,0.0,1.0))
+ obj.FS_Position = pos[:]
+ obj.FS_Area = areas[:]
+ obj.FS_Normal = normal[:]
+
+ def computeShape(self, obj):
+ """ Computes simulation involved shapes.
+ @param obj Created Part::FeaturePython object.
+ @return Shape
+ """
+ print("[ShipSimulation] Computing mesh shape...")
+ nx = obj.FS_Nx
+ ny = obj.FS_Ny
+ mesh = FSMesh(obj)
+ planes = []
+ # Create planes
+ Percentage = 0
+ Count = 0
+ print("0%")
+ for i in range(1,nx-1):
+ for j in range(1,ny-1):
+ Count = Count+1
+ done = int(round(100 * Count / ((nx-2)*(ny-2))))
+ if done != Percentage:
+ Percentage = done
+ print("%i%%" % (done))
+ v0 = (mesh[i][j].pos + mesh[i-1][j].pos + mesh[i][j-1].pos + mesh[i-1][j-1].pos).multiply(0.25)
+ v1 = (mesh[i][j].pos + mesh[i+1][j].pos + mesh[i][j-1].pos + mesh[i+1][j-1].pos).multiply(0.25)
+ v2 = (mesh[i][j].pos + mesh[i+1][j].pos + mesh[i][j+1].pos + mesh[i+1][j+1].pos).multiply(0.25)
+ v3 = (mesh[i][j].pos + mesh[i-1][j].pos + mesh[i][j+1].pos + mesh[i-1][j+1].pos).multiply(0.25)
+ p = Part.makePolygon([v0,v1,v2,v3,v0])
+ planes.append(Part.makeFilledFace(p.Edges))
+ # Join into a compound
+ return Part.makeCompound(planes)
+
+class ViewProviderShipSimulation:
+ def __init__(self, obj):
+ """ Set this object to the proxy object of the actual view provider """
+ obj.Proxy = self
+
+ def attach(self, obj):
+ """ Setup the scene sub-graph of the view provider, this method is mandatory """
+ return
+
+ def updateData(self, fp, prop):
+ """ If a property of the handled feature has changed we have the chance to handle this here """
+ return
+
+ def getDisplayModes(self,obj):
+ ''' Return a list of display modes. '''
+ modes=[]
+ return modes
+
+ def getDefaultDisplayMode(self):
+ ''' Return the name of the default display mode. It must be defined in getDisplayModes. '''
+ return "Flat Lines"
+
+ def setDisplayMode(self,mode):
+ ''' Map the display mode defined in attach with those defined in getDisplayModes.
+ Since they have the same names nothing needs to be done. This method is optinal.
+ '''
+ return mode
+
+ def onChanged(self, vp, prop):
+ ''' Print the name of the property that has changed '''
+ # FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n")
+
+ def __getstate__(self):
+ ''' When saving the document this object gets stored using Python's cPickle module.
+ Since we have some un-pickable here -- the Coin stuff -- we must define this method
+ to return a tuple of all pickable objects or None.
+ '''
+ return None
+
+ def __setstate__(self,state):
+ ''' When restoring the pickled object from document we have the chance to set some
+ internals here. Since no data were pickled nothing needs to be done here.
+ '''
+ return None
+
+ def getIcon(self):
+ return """
+ /* XPM */
+ static char * Sim_xpm[] = {
+ "32 32 301 2",
+ " c None",
+ ". c #CCCCCC",
+ "+ c #A9A9A9",
+ "@ c #989898",
+ "# c #A1A1A1",
+ "$ c #C3C3C3",
+ "% c #C1C0C1",
+ "& c #BFBFBF",
+ "* c #A7A7A7",
+ "= c #808080",
+ "- c #5C5C5C",
+ "; c #565655",
+ "> c #4E4E4E",
+ ", c #676767",
+ "' c #898989",
+ ") c #B6B5B6",
+ "! c #BABABA",
+ "~ c #B9B9B9",
+ "{ c #A5A5A5",
+ "] c #7E7E7E",
+ "^ c #595A59",
+ "/ c #575656",
+ "( c #535353",
+ "_ c #505050",
+ ": c #4D4D4C",
+ "< c #474747",
+ "[ c #404040",
+ "} c #4D4D4D",
+ "| c #787878",
+ "1 c #B8B7B8",
+ "2 c #B6B6B6",
+ "3 c #888888",
+ "4 c #7C7C7C",
+ "5 c #575657",
+ "6 c #535354",
+ "7 c #4E4D4E",
+ "8 c #4A4A4A",
+ "9 c #444444",
+ "0 c #414141",
+ "a c #3E3E3E",
+ "b c #393938",
+ "c c #313131",
+ "d c #393939",
+ "e c #636363",
+ "f c #ABABAB",
+ "g c #B3B3B3",
+ "h c #848484",
+ "i c #787979",
+ "j c #545454",
+ "k c #515151",
+ "l c #4B4B4B",
+ "m c #484748",
+ "n c #3B3B3B",
+ "o c #383838",
+ "p c #353535",
+ "q c #323232",
+ "r c #2F2F2E",
+ "s c #2A2A2A",
+ "t c #222323",
+ "u c #252625",
+ "v c #AFAFAF",
+ "w c #767676",
+ "x c #484848",
+ "y c #454545",
+ "z c #424242",
+ "A c #3F3F3E",
+ "B c #3B3B3C",
+ "C c #393838",
+ "D c #2F2F2F",
+ "E c #2C2C2C",
+ "F c #292929",
+ "G c #262626",
+ "H c #222222",
+ "I c #1F1F20",
+ "J c #171716",
+ "K c #959595",
+ "L c #747474",
+ "M c #4E4E4F",
+ "N c #4C4B4C",
+ "O c #484849",
+ "P c #424243",
+ "Q c #282828",
+ "R c #525251",
+ "S c #373737",
+ "T c #353636",
+ "U c #333233",
+ "V c #30302F",
+ "W c #2C2D2D",
+ "X c #232323",
+ "Y c #201F20",
+ "Z c #1D1D1D",
+ "` c #151414",
+ " . c #717272",
+ ".. c #4C4C4C",
+ "+. c #484949",
+ "@. c #464545",
+ "#. c #424343",
+ "$. c #3A3A3A",
+ "%. c #5D4A49",
+ "&. c #7E7E86",
+ "*. c #56569F",
+ "=. c #3E3E41",
+ "-. c #757575",
+ ";. c #575757",
+ ">. c #222221",
+ ",. c #262627",
+ "'. c #242423",
+ "). c #212020",
+ "!. c #1A1A1A",
+ "~. c #121212",
+ "{. c #939493",
+ "]. c #6F6F6F",
+ "^. c #494949",
+ "/. c #464646",
+ "(. c #434343",
+ "_. c #554545",
+ ":. c #686863",
+ "<. c #939394",
+ "[. c #BDBDBD",
+ "}. c #202021",
+ "|. c #1E1E1E",
+ "1. c #171718",
+ "2. c #0F0F0F",
+ "3. c #929292",
+ "4. c #6C6D6D",
+ "5. c #464746",
+ "6. c #525F73",
+ "7. c #444648",
+ "8. c #3D3D3D",
+ "9. c #2D2C2A",
+ "0. c #A1A2A2",
+ "a. c #AAACAC",
+ "b. c #A6A7A7",
+ "c. c #A8AAAA",
+ "d. c #AFB0B0",
+ "e. c #777676",
+ "f. c #9A9A9A",
+ "g. c #1B1B1B",
+ "h. c #181818",
+ "i. c #0C0C0C",
+ "j. c #909090",
+ "k. c #6B6A6B",
+ "l. c #55657E",
+ "m. c #6990FB",
+ "n. c #6483CD",
+ "o. c #5871B2",
+ "p. c #434E7E",
+ "q. c #A97C76",
+ "r. c #AB7777",
+ "s. c #AC7070",
+ "t. c #A26565",
+ "u. c #805C5C",
+ "v. c #848686",
+ "w. c #424342",
+ "x. c #151515",
+ "y. c #0A0909",
+ "z. c #8F8F8F",
+ "A. c #676868",
+ "B. c #3B3A3A",
+ "C. c #383738",
+ "D. c #353534",
+ "E. c #45525F",
+ "F. c #6367AC",
+ "G. c #804682",
+ "H. c #942A39",
+ "I. c #991312",
+ "J. c #540901",
+ "K. c #393742",
+ "L. c #1C1C1C",
+ "M. c #191919",
+ "N. c #161515",
+ "O. c #121313",
+ "P. c #070707",
+ "Q. c #8D8E8D",
+ "R. c #656566",
+ "S. c #3E3F3F",
+ "T. c #2F2E2F",
+ "U. c #353838",
+ "V. c #35496A",
+ "W. c #3E4D88",
+ "X. c #354889",
+ "Y. c #5573D7",
+ "Z. c #5D80FB",
+ "`. c #374899",
+ " + c #293338",
+ ".+ c #101010",
+ "++ c #0D0D0D",
+ "@+ c #040404",
+ "#+ c #8C8C8C",
+ "$+ c #8B8B8B",
+ "%+ c #4B4A4B",
+ "&+ c #303030",
+ "*+ c #333232",
+ "=+ c #2F2F30",
+ "-+ c #232223",
+ ";+ c #1A1919",
+ ">+ c #2E3949",
+ ",+ c #5C7BA3",
+ "'+ c #36467D",
+ ")+ c #536F93",
+ "!+ c #0A0A0A",
+ "~+ c #010101",
+ "{+ c #C1C1C1",
+ "]+ c #B8B8B8",
+ "^+ c #A0A0A0",
+ "/+ c #3F3F3F",
+ "(+ c #222122",
+ "_+ c #202020",
+ ":+ c #161717",
+ "<+ c #141414",
+ "[+ c #111011",
+ "}+ c #0D0E0E",
+ "|+ c #0B0B0A",
+ "1+ c #000000",
+ "2+ c #525252",
+ "3+ c #686868",
+ "4+ c #ADADAD",
+ "5+ c #9E9F9F",
+ "6+ c #6D6D6D",
+ "7+ c #3C3C3C",
+ "8+ c #131414",
+ "9+ c #111111",
+ "0+ c #0E0E0E",
+ "a+ c #0B0B0B",
+ "b+ c #080708",
+ "c+ c #050504",
+ "d+ c #4C4D4C",
+ "e+ c #4D4C4D",
+ "f+ c #494A4A",
+ "g+ c #454444",
+ "h+ c #9D9D9D",
+ "i+ c #9E9E9E",
+ "j+ c #AEAEAE",
+ "k+ c #BEBEBF",
+ "l+ c #BEBDBD",
+ "m+ c #979797",
+ "n+ c #6A6B6A",
+ "o+ c #3F3F40",
+ "p+ c #020202",
+ "q+ c #030303",
+ "r+ c #878787",
+ "s+ c #69696A",
+ "t+ c #868685",
+ "u+ c #646464",
+ "v+ c #474647",
+ "w+ c #656565",
+ "x+ c #9E9F9E",
+ "y+ c #A8A8A8",
+ "z+ c #AFAFAE",
+ "A+ c #A4A4A4",
+ "B+ c #7A7A7A",
+ "C+ c #969696",
+ "D+ c #363636",
+ "E+ c #777776",
+ "F+ c #8C8D8D",
+ "G+ c #7D7D7D",
+ "H+ c #5E5E5E",
+ "I+ c #4F4F50",
+ "J+ c #808181",
+ "K+ c #707070",
+ "L+ c #909191",
+ "M+ c #9C9C9C",
+ "N+ c #787877",
+ "O+ c #696969",
+ "P+ c #616161",
+ "Q+ c #6E6E6E",
+ "R+ c #7C7B7C",
+ "S+ c #777677",
+ "T+ c #6F6E6E",
+ "U+ c #595959",
+ "V+ c #717171",
+ "W+ c #8D8D8D",
+ "X+ c #515051",
+ "Y+ c #49494A",
+ "Z+ c #4B4A4A",
+ "`+ c #606060",
+ " @ c #6A6A6A",
+ ".@ c #616162",
+ "+@ c #6C6D6C",
+ "@@ c #767777",
+ "#@ c #727272",
+ "$@ c #6B6B6B",
+ "%@ c #828283",
+ "&@ c #757475",
+ "*@ c #444545",
+ "=@ c #565656",
+ "-@ c #5A595A",
+ ";@ c #666666",
+ ">@ c #878687",
+ ",@ c #8A8A8A",
+ "'@ c #797979",
+ ")@ c #444344",
+ "!@ c #7F8080",
+ "~@ c #737373",
+ "{@ c #484747",
+ "]@ c #707170",
+ "^@ c #7F7F7F",
+ "/@ c #676867",
+ "(@ c #4D4C4C",
+ "_@ c #5F5F5F",
+ ":@ c #434444",
+ " ",
+ " ",
+ " . + ",
+ " @ # $ % & * ",
+ " = - ; > , ' ) ! ~ { ",
+ " ] ^ / ( _ : < [ } | # 1 2 # 3 ",
+ " 4 5 6 _ 7 8 < 9 0 a b c d e ' f g + h ",
+ " i j k 7 l m 9 0 a n o p q r s t u < | v ",
+ " w k > l x y z A B C p q D E F G H I J K ",
+ " L M N O y P Q R S T U V W F G X Y Z ` K ",
+ " ...+.@.#.$.%.&.*.=.-.;.>.,.'.).Z !.~.{. ",
+ " ].^./.(.[ c _._ :.<.[.$ ' /.}.|.!.1.2.3. ",
+ " 4.5.6.7.8.9.# 0.a.b.c.d.e.f.g.g.h.` i.j. ",
+ " k.9 l.m.n.o.p.q.r.s.t.u.v.w.g.h.x.~.y.z. ",
+ " A.0 a B.C.D.E.F.G.H.I.J.K.L.M.N.O.2.P.Q. ",
+ " R.S.n o p q T.E U.V.W.X.Y.Z.`. +.+++@+#+ ",
+ " $+%+&+q *+=+E F G -+I Z ;+>+,+'+)+!+~+$+ ",
+ " {+]+^+w /+H (+X _+Z !.:+<+[+}+|+P.1+' ",
+ " k 2+_ > 3+z.4+5+6+7+x.~.8+9+0+a+b+c+1+3 ",
+ " %+..d+e+..f+< g+h+i+j+k+l+m+n+o+P.p+q+p+1+r+ ",
+ " s+t+u+< (.< v+y 9 (.w+x+y+z+y+h+A+B+C+K ].D+1+h ",
+ " E+i+F+f.j.G+H+9 [ (.z I+J+m+f.j.K+z 9 9 9 K+L+r+/.9 (. ",
+ " L M+N+O+u+P+Q+R+S+T+U+y 8 - ;...9 9 9 9 9 9 9 9 (.(.k w+ ",
+ " V+m+' W+r+] , X+Y+(.: r+L P+k 9 z (.9 9 9 9 (.(.Z+;.- `+ ",
+ " ].C+w @u+.@+@@@#@$@j %@B+&@#@L $@H+2+/.0 (.*@+.} 2+=@-@ ",
+ " ;@| >@,@'@u+k 8 )@..!@| ~@V+#@#@#@#@L 6+..(.9 {@.._ ( ",
+ " e ]@^@] /@k G+w #@#@#@#@#@V+ @$@_ 9 9 9 /.Y+(@ ",
+ " - R.T+L ~@#@#@#@#@]._ _@_ 9 9 9 (.9 x ",
+ " =@_@O+L ~@#@~@L _ 9 9 :@ ",
+ " ;.H+ @-._ (. ",
+ " ",
+ " "};
+ """
+
+def FSMesh(obj, recompute=False):
+ """ Get free surface mesh in matrix mode.
+ @param obj Created Part::FeaturePython object.
+ @param recompute True if mesh must be recomputed, False otherwise.
+ @return Faces matrix
+ """
+ nx = obj.FS_Nx
+ ny = obj.FS_Ny
+ if not recompute:
+ faces = []
+ for i in range(0,nx):
+ faces.append([])
+ for j in range(0,ny):
+ faces[i].append(FreeSurfaceFace(obj.FS_Position[j + i*ny],
+ obj.FS_Normal[j + i*ny],
+ obj.FS_Area[j + i*ny]))
+ return faces
+ # Transform positions into a mesh
+ pos = []
+ for i in range(0,nx):
+ pos.append([])
+ for j in range(0,ny):
+ pos[i].append(obj.FS_Position[j + i*ny])
+ # Recompute normals and dimensions
+ normal = []
+ l = []
+ b = []
+ for i in range(0,nx):
+ normal.append([])
+ l.append([])
+ b.append([])
+ for j in range(0,ny):
+ i0 = i-1
+ i1 = i+1
+ fi = 1.0
+ j0 = j-1
+ j1 = j+1
+ fj = 1.0
+ if i == 0:
+ i0 = i
+ i1 = i+1
+ fi = 2.0
+ if i == nx-1:
+ i0 = i-1
+ i1 = i
+ fi = 2.0
+ if j == 0:
+ j0 = j
+ j1 = j+1
+ fj = 2.0
+ if j == ny-1:
+ j0 = j-1
+ j1 = j
+ fj = 2.0
+ l[i].append(fi*(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x))
+ b[i].append(fj*(obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y))
+ xvec = Vector(obj.FS_Position[j + i1*ny].x - obj.FS_Position[j + i0*ny].x,
+ obj.FS_Position[j + i1*ny].y - obj.FS_Position[j + i0*ny].y,
+ obj.FS_Position[j + i1*ny].z - obj.FS_Position[j + i0*ny].z)
+ yvec = Vector(obj.FS_Position[j1 + i*ny].x - obj.FS_Position[j0 + i*ny].x,
+ obj.FS_Position[j1 + i*ny].y - obj.FS_Position[j0 + i*ny].y,
+ obj.FS_Position[j1 + i*ny].z - obj.FS_Position[j0 + i*ny].z)
+ n = Vector(xvec.cross(yvec)) # Z positive
+ normal[i].append(n.normalize())
+ # Create faces
+ faces = []
+ for i in range(0,nx):
+ faces.append([])
+ for j in range(0,ny):
+ faces[i].append(FreeSurfaceFace(pos[i][j], normal[i][j], l[i][j], b[i][j]))
+ # Reconstruct mesh data
+ for i in range(0,nx):
+ for j in range(0,ny):
+ obj.FS_Position[j + i*ny] = faces[i][j].pos
+ obj.FS_Normal[j + i*ny] = faces[i][j].normal
+ obj.FS_Area[j + i*ny] = faces[i][j].area
+ return faces
diff --git a/src/Mod/Ship/TankInstance.py b/src/Mod/Ship/TankInstance.py
index e35b7f520..48a126971 100644
--- a/src/Mod/Ship/TankInstance.py
+++ b/src/Mod/Ship/TankInstance.py
@@ -29,7 +29,8 @@ from pivy import coin
# FreeCAD
import FreeCAD,FreeCADGui
-from FreeCAD import Part, Base, Vector
+from FreeCAD import Base, Vector
+import Part
# Ship design module
from shipUtils import Paths, Translator, Math
diff --git a/src/Mod/Ship/shipAreasCurve/Plot.py b/src/Mod/Ship/shipAreasCurve/Plot.py
index 6e0fdb536..61b1f3a20 100644
--- a/src/Mod/Ship/shipAreasCurve/Plot.py
+++ b/src/Mod/Ship/shipAreasCurve/Plot.py
@@ -24,8 +24,7 @@
import os
# FreeCAD modules
import FreeCAD,FreeCADGui
-from FreeCAD import Part, Base
-from FreeCAD import Image, ImageGui
+from FreeCAD import Base, Image, ImageGui
# FreeCADShip modules
from shipUtils import Paths, Translator
diff --git a/src/Mod/Ship/shipAreasCurve/Preview.py b/src/Mod/Ship/shipAreasCurve/Preview.py
index 8f2d7eba1..6af80580d 100644
--- a/src/Mod/Ship/shipAreasCurve/Preview.py
+++ b/src/Mod/Ship/shipAreasCurve/Preview.py
@@ -24,7 +24,7 @@
# FreeCAD modules
import FreeCAD,FreeCADGui
from FreeCAD import Base
-from FreeCAD import Part
+import Part
# FreeCADShip modules
from shipUtils import Paths, Translator
diff --git a/src/Mod/Ship/shipCreateShip/Preview.py b/src/Mod/Ship/shipCreateShip/Preview.py
index b4d9e39b9..72f601432 100644
--- a/src/Mod/Ship/shipCreateShip/Preview.py
+++ b/src/Mod/Ship/shipCreateShip/Preview.py
@@ -24,7 +24,7 @@
# FreeCAD modules
import FreeCAD,FreeCADGui
from FreeCAD import Base
-from FreeCAD import Part
+import Part
# FreeCADShip modules
from shipUtils import Paths, Translator
diff --git a/src/Mod/Ship/shipHydrostatics/Plot.py b/src/Mod/Ship/shipHydrostatics/Plot.py
index d953b5ddf..011b45c74 100644
--- a/src/Mod/Ship/shipHydrostatics/Plot.py
+++ b/src/Mod/Ship/shipHydrostatics/Plot.py
@@ -25,8 +25,9 @@ import os
import math
# FreeCAD modules
import FreeCAD,FreeCADGui
-from FreeCAD import Part, Base, Vector
+from FreeCAD import Base, Vector
from FreeCAD import Image, ImageGui
+import Part
# FreeCADShip modules
from shipUtils import Paths, Translator
import Tools
diff --git a/src/Mod/Ship/shipHydrostatics/TaskPanel.py b/src/Mod/Ship/shipHydrostatics/TaskPanel.py
index 665e7edaf..54b5c7623 100644
--- a/src/Mod/Ship/shipHydrostatics/TaskPanel.py
+++ b/src/Mod/Ship/shipHydrostatics/TaskPanel.py
@@ -31,7 +31,6 @@ from PyQt4 import QtGui,QtCore
import Plot
import Instance
from shipUtils import Paths, Translator
-from surfUtils import Geometry
import Tools
class TaskPanel:
@@ -45,7 +44,7 @@ class TaskPanel:
self.save()
draft = self.form.minDraft.value()
drafts = [draft]
- dDraft = (self.form.maxDraft.value() - self.form.minDraft.value())/self.form.nDraft.value()
+ dDraft = (self.form.maxDraft.value() - self.form.minDraft.value())/(self.form.nDraft.value()-1)
for i in range(1,self.form.nDraft.value()):
draft = draft + dDraft
drafts.append(draft)
@@ -108,7 +107,7 @@ class TaskPanel:
""" Set initial values for fields
"""
# Get objects
- selObjs = Geometry.getSelectedObjs()
+ selObjs = Gui.Selection.getSelection()
if not selObjs:
msg = Translator.translate("Ship instance must be selected (no object selected)\n")
App.Console.PrintError(msg)
diff --git a/src/Mod/Ship/shipHydrostatics/TaskPanel.ui b/src/Mod/Ship/shipHydrostatics/TaskPanel.ui
index 3c3d88a58..23367df69 100644
--- a/src/Mod/Ship/shipHydrostatics/TaskPanel.ui
+++ b/src/Mod/Ship/shipHydrostatics/TaskPanel.ui
@@ -190,7 +190,7 @@
- 1
+ 29999
diff --git a/src/Mod/Ship/shipHydrostatics/Tools.py b/src/Mod/Ship/shipHydrostatics/Tools.py
index 58fbb3d15..a42c9b774 100644
--- a/src/Mod/Ship/shipHydrostatics/Tools.py
+++ b/src/Mod/Ship/shipHydrostatics/Tools.py
@@ -23,7 +23,8 @@
import math
# FreeCAD modules
-from FreeCAD import Vector, Part
+from FreeCAD import Vector
+import Part
import FreeCAD as App
import FreeCADGui as Gui
# Module
@@ -279,9 +280,9 @@ def FloatingArea(ship, draft, trim):
# Valid face, compute area
area = area + f.Area
maxX = max(maxX, faceBounds.XMax)
- minX = max(minX, faceBounds.XMin)
+ minX = min(minX, faceBounds.XMin)
maxY = max(maxY, faceBounds.YMax)
- minY = max(minY, faceBounds.YMin)
+ minY = min(minY, faceBounds.YMin)
# Destroy last object generated
App.ActiveDocument.removeObject(App.ActiveDocument.Objects[-1].Name)
dx = maxX - minX
@@ -306,13 +307,13 @@ def BMT(ship, draft, trim=0.0):
B1 = displacement(ship,draft,roll,trim,0.0)[1]
# * M
# / \
- # / \ BM ==|> BM = (BB/2) / tan(alpha/2)
+ # / \ BM ==|> BM = (BB/2) / sin(alpha/2)
# / \
# *-------*
# BB
- BB = [B1.x - B0.x, B1.y - B0.y]
+ BB = [B1.y - B0.y, B1.z - B0.z]
BB = math.sqrt(BB[0]*BB[0] + BB[1]*BB[1])
- BM = BM + 0.5*BB/math.tan(math.radians(0.5*roll)) / nRoll # nRoll is the weight function
+ BM = BM + 0.5*BB/math.sin(math.radians(0.5*roll)) / nRoll # nRoll is the weight function
return BM
def mainFrameCoeff(ship, draft):
@@ -416,7 +417,7 @@ class Point:
self.wet = wet
self.farea = farea[0]
self.mom = mom
- self.KBt = dispData[1].y
+ self.KBt = dispData[1].z
self.BMt = bm
self.Cb = dispData[2]
self.Cf = farea[1]
diff --git a/src/Mod/Ship/shipOutlineDraw/Plot.py b/src/Mod/Ship/shipOutlineDraw/Plot.py
index 7d21b2fbc..682c15678 100644
--- a/src/Mod/Ship/shipOutlineDraw/Plot.py
+++ b/src/Mod/Ship/shipOutlineDraw/Plot.py
@@ -23,7 +23,8 @@
# FreeCAD modules
import FreeCAD,FreeCADGui
-from FreeCAD import Base, Part, Vector
+from FreeCAD import Base, Vector
+import Part
# FreeCADShip modules
from shipUtils import Paths, Translator
from surfUtils import Geometry
diff --git a/src/Mod/Ship/shipOutlineDraw/Preview.py b/src/Mod/Ship/shipOutlineDraw/Preview.py
index 2b323b47e..a1ccb2012 100644
--- a/src/Mod/Ship/shipOutlineDraw/Preview.py
+++ b/src/Mod/Ship/shipOutlineDraw/Preview.py
@@ -23,7 +23,8 @@
# FreeCAD modules
import FreeCAD,FreeCADGui
-from FreeCAD import Base, Part, Vector
+from FreeCAD import Base, Vector
+import Part
# FreeCADShip modules
from shipUtils import Paths, Translator
diff --git a/src/Mod/Ship/shipUtils/Paths.pyc b/src/Mod/Ship/shipUtils/Paths.pyc
new file mode 100644
index 000000000..260b7832c
Binary files /dev/null and b/src/Mod/Ship/shipUtils/Paths.pyc differ
diff --git a/src/Mod/Ship/shipUtils/__init__.pyc b/src/Mod/Ship/shipUtils/__init__.pyc
new file mode 100644
index 000000000..711c3c8e9
Binary files /dev/null and b/src/Mod/Ship/shipUtils/__init__.pyc differ
diff --git a/src/Mod/Ship/simCreate/TaskPanel.py b/src/Mod/Ship/simCreate/TaskPanel.py
new file mode 100644
index 000000000..e14f4c964
--- /dev/null
+++ b/src/Mod/Ship/simCreate/TaskPanel.py
@@ -0,0 +1,174 @@
+#***************************************************************************
+#* *
+#* Copyright (c) 2011, 2012 *
+#* Jose Luis Cercos Pita *
+#* *
+#* This program is free software; you can redistribute it and/or modify *
+#* it under the terms of the GNU Lesser General Public License (LGPL) *
+#* as published by the Free Software Foundation; either version 2 of *
+#* the License, or (at your option) any later version. *
+#* for detail see the LICENCE text file. *
+#* *
+#* This program is distributed in the hope that it will be useful, *
+#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+#* GNU Library General Public License for more details. *
+#* *
+#* You should have received a copy of the GNU Library General Public *
+#* License along with this program; if not, write to the Free Software *
+#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+#* USA *
+#* *
+#***************************************************************************
+
+# FreeCAD modules
+import FreeCAD as App
+import FreeCADGui as Gui
+# Qt library
+from PyQt4 import QtGui,QtCore
+# Module
+import SimInstance
+from shipUtils import Paths, Translator
+
+class TaskPanel:
+ def __init__(self):
+ self.ui = Paths.modulePath() + "/simCreate/TaskPanel.ui"
+
+ def accept(self):
+ form = self.form
+ # Read waves data
+ w = []
+ for i in range(0,form.waves.rowCount() - 1):
+ item = form.waves.item(i,0)
+ A = item.text().toFloat()[0]
+ item = form.waves.item(i,1)
+ T = item.text().toFloat()[0]
+ item = form.waves.item(i,2)
+ phi = item.text().toFloat()[0]
+ item = form.waves.item(i,3)
+ head = item.text().toFloat()[0]
+ w.append([A,T,phi,head])
+ obj = App.ActiveDocument.addObject("Part::FeaturePython","ShipSimulation")
+ sim = SimInstance.ShipSimulation(obj,
+ [form.length.value(), form.beam.value(), form.n.value()],
+ w)
+ SimInstance.ViewProviderShipSimulation(obj.ViewObject)
+ return True
+
+ def reject(self):
+ return True
+
+ def clicked(self, index):
+ pass
+
+ def open(self):
+ pass
+
+ def needsFullSpace(self):
+ return True
+
+ def isAllowedAlterSelection(self):
+ return False
+
+ def isAllowedAlterView(self):
+ return True
+
+ def isAllowedAlterDocument(self):
+ return False
+
+ def helpRequested(self):
+ pass
+
+ def setupUi(self):
+ mw = self.getMainWindow()
+ form = mw.findChild(QtGui.QWidget, "TaskPanel")
+ form.length = form.findChild(QtGui.QDoubleSpinBox, "Length")
+ form.beam = form.findChild(QtGui.QDoubleSpinBox, "Beam")
+ form.n = form.findChild(QtGui.QSpinBox, "N")
+ form.waves = form.findChild(QtGui.QTableWidget, "Waves")
+ self.form = form
+ # Initial values
+ if self.initValues():
+ return True
+ self.retranslateUi()
+ # Connect Signals and Slots
+ QtCore.QObject.connect(form.length, QtCore.SIGNAL("valueChanged(double)"), self.onFS)
+ QtCore.QObject.connect(form.beam, QtCore.SIGNAL("valueChanged(double)"), self.onFS)
+ QtCore.QObject.connect(form.n, QtCore.SIGNAL("valueChanged(int)"), self.onFS)
+ QtCore.QObject.connect(form.waves,QtCore.SIGNAL("cellChanged(int,int)"),self.onWaves);
+
+ def getMainWindow(self):
+ "returns the main window"
+ # using QtGui.qApp.activeWindow() isn't very reliable because if another
+ # widget than the mainwindow is active (e.g. a dialog) the wrong widget is
+ # returned
+ toplevel = QtGui.qApp.topLevelWidgets()
+ for i in toplevel:
+ if i.metaObject().className() == "Gui::MainWindow":
+ return i
+ raise Exception("No main window found")
+
+ def initValues(self):
+ """ Set initial values for fields
+ """
+ msg = Translator.translate("Ready to work\n")
+ App.Console.PrintMessage(msg)
+ return False
+
+ def retranslateUi(self):
+ """ Set user interface locale strings.
+ """
+ self.form.setWindowTitle(Translator.translate("Create a new ship simulation"))
+ self.form.findChild(QtGui.QGroupBox, "FSDataBox").setTitle(Translator.translate("Free surface"))
+ self.form.findChild(QtGui.QLabel, "LengthLabel").setText(Translator.translate("Length"))
+ self.form.findChild(QtGui.QLabel, "BeamLabel").setText(Translator.translate("Beam"))
+ self.form.findChild(QtGui.QLabel, "NLabel").setText(Translator.translate("Number of points"))
+ self.form.findChild(QtGui.QGroupBox, "WavesDataBox").setTitle(Translator.translate("Waves"))
+ labels = []
+ labels.append(Translator.translate("Amplitude") + " [m]")
+ labels.append(Translator.translate("Period") + " [s]")
+ labels.append(Translator.translate("Phase") + " [rad]")
+ labels.append(Translator.translate("Heading") + " [deg]")
+ self.form.waves.setHorizontalHeaderLabels(labels)
+
+ def onFS(self, value):
+ """ Method called when free surface data is changed.
+ @param value Changed value.
+ """
+ pass
+
+ def onWaves(self, row, column):
+ """ Method called when waves data is changed.
+ @param row Affected row.
+ @param col Affected column.
+ """
+ item = self.form.waves.item(row,column)
+ # Row deletion
+ if column == 0:
+ if not item.text():
+ self.form.waves.removeRow(row)
+ # Ensure that exist one empty item at the end
+ nRow = self.form.waves.rowCount()
+ last = self.form.waves.item(nRow-1,0)
+ if last:
+ if(last.text() != ''):
+ self.form.waves.setRowCount(nRow+1)
+ # Fields must be numbers
+ for i in range(0,self.form.waves.rowCount()-1): # Avoid last row
+ for j in range(0,self.form.waves.columnCount()): # Avoid name column
+ item = self.form.waves.item(i,j)
+ if not item:
+ item = QtGui.QTableWidgetItem('0.0')
+ self.form.waves.setItem(i,j,item)
+ continue
+ (number,flag) = item.text().toFloat()
+ if not flag:
+ item.setText('0.0')
+
+def createTask():
+ panel = TaskPanel()
+ Gui.Control.showDialog(panel)
+ if panel.setupUi():
+ Gui.Control.closeDialog(panel)
+ return None
+ return panel
diff --git a/src/Mod/Ship/simCreate/TaskPanel.ui b/src/Mod/Ship/simCreate/TaskPanel.ui
new file mode 100644
index 000000000..107d2a16d
--- /dev/null
+++ b/src/Mod/Ship/simCreate/TaskPanel.ui
@@ -0,0 +1,269 @@
+
+
+ TaskPanel
+
+
+
+ 0
+ 0
+ 269
+ 384
+
+
+
+
+ 0
+ 1
+
+
+
+
+ 0
+ 384
+
+
+
+ Create new simulation
+
+
+
+
+
+ QLayout::SetMinimumSize
+
+
+
+
+
+ 0
+ 1
+
+
+
+
+ 0
+ 128
+
+
+
+ Free surface
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+ false
+
+
+
+ QLayout::SetDefaultConstraint
+
+
+
+
+ QLayout::SetMinimumSize
+
+
+ 10
+
+
+ 0
+
+
+ 10
+
+
+ 0
+
+
+
+
+ Length
+
+
+
+
+
+
+ 1
+
+
+ 1000000.000000000000000
+
+
+ 10.000000000000000
+
+
+ 100.000000000000000
+
+
+
+
+
+
+
+
+ QLayout::SetMinimumSize
+
+
+ 10
+
+
+ 0
+
+
+ 10
+
+
+ 0
+
+
+
+
+ Beam
+
+
+
+
+
+
+ 1
+
+
+ 1000000.000000000000000
+
+
+ 10.000000000000000
+
+
+ 100.000000000000000
+
+
+
+
+
+
+
+
+ QLayout::SetMinimumSize
+
+
+ 10
+
+
+ 0
+
+
+ 10
+
+
+ 0
+
+
+
+
+ Number of points
+
+
+
+
+
+
+ 1
+
+
+ 1000000000
+
+
+ 1000
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 2
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 16777215
+ 16777215
+
+
+
+
+ 0
+ 0
+
+
+
+ Waves
+
+
+
+ QLayout::SetDefaultConstraint
+
+
+
+
+
+ 0
+ 0
+
+
+
+ true
+
+
+ 1
+
+
+ true
+
+
+
+
+ Amplitude [m]
+
+
+
+
+ Period [s]
+
+
+
+
+ Phase [rad]
+
+
+
+
+ Heading [deg]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Mod/Ship/simCreate/__init__.py b/src/Mod/Ship/simCreate/__init__.py
new file mode 100644
index 000000000..cbfb57d75
--- /dev/null
+++ b/src/Mod/Ship/simCreate/__init__.py
@@ -0,0 +1,36 @@
+#***************************************************************************
+#* *
+#* Copyright (c) 2011, 2012 *
+#* Jose Luis Cercos Pita *
+#* *
+#* This program is free software; you can redistribute it and/or modify *
+#* it under the terms of the GNU Lesser General Public License (LGPL) *
+#* as published by the Free Software Foundation; either version 2 of *
+#* the License, or (at your option) any later version. *
+#* for detail see the LICENCE text file. *
+#* *
+#* This program is distributed in the hope that it will be useful, *
+#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+#* GNU Library General Public License for more details. *
+#* *
+#* You should have received a copy of the GNU Library General Public *
+#* License along with this program; if not, write to the Free Software *
+#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+#* USA *
+#* *
+#***************************************************************************
+
+# FreeCAD modules
+import FreeCAD
+import FreeCADGui
+
+# Qt libraries
+from PyQt4 import QtGui,QtCore
+
+# Main object
+import TaskPanel
+
+def load():
+ """ Loads the tool """
+ TaskPanel.createTask()
diff --git a/src/Mod/Ship/simRun/Sim/__init__.py b/src/Mod/Ship/simRun/Sim/__init__.py
new file mode 100644
index 000000000..f5acc886b
--- /dev/null
+++ b/src/Mod/Ship/simRun/Sim/__init__.py
@@ -0,0 +1,24 @@
+#***************************************************************************
+#* *
+#* Copyright (c) 2011, 2012 *
+#* Jose Luis Cercos Pita *
+#* *
+#* This program is free software; you can redistribute it and/or modify *
+#* it under the terms of the GNU Lesser General Public License (LGPL) *
+#* as published by the Free Software Foundation; either version 2 of *
+#* the License, or (at your option) any later version. *
+#* for detail see the LICENCE text file. *
+#* *
+#* This program is distributed in the hope that it will be useful, *
+#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+#* GNU Library General Public License for more details. *
+#* *
+#* You should have received a copy of the GNU Library General Public *
+#* License along with this program; if not, write to the Free Software *
+#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+#* USA *
+#* *
+#***************************************************************************
+
+import initialization
diff --git a/src/Mod/Ship/simRun/Sim/initialization.py b/src/Mod/Ship/simRun/Sim/initialization.py
new file mode 100644
index 000000000..1c443ca85
--- /dev/null
+++ b/src/Mod/Ship/simRun/Sim/initialization.py
@@ -0,0 +1,114 @@
+#***************************************************************************
+#* *
+#* Copyright (c) 2011, 2012 *
+#* Jose Luis Cercos Pita *
+#* *
+#* This program is free software; you can redistribute it and/or modify *
+#* it under the terms of the GNU Lesser General Public License (LGPL) *
+#* as published by the Free Software Foundation; either version 2 of *
+#* the License, or (at your option) any later version. *
+#* for detail see the LICENCE text file. *
+#* *
+#* This program is distributed in the hope that it will be useful, *
+#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+#* GNU Library General Public License for more details. *
+#* *
+#* You should have received a copy of the GNU Library General Public *
+#* License along with this program; if not, write to the Free Software *
+#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+#* USA *
+#* *
+#***************************************************************************
+
+# numpy
+import numpy as np
+
+grav=9.81
+
+class perform:
+ def __init__(self, FSmesh, waves, context=None, queue=None):
+ """ Constructor, includes program loading.
+ @param FSmesh Initial free surface mesh.
+ @param waves Considered simulation waves (A,T,phi,heading).
+ @param context OpenCL context where apply. Only for compatibility,
+ must be None.
+ @param queue OpenCL command queue. Only for compatibility,
+ must be None.
+ """
+ self.context = context
+ self.queue = queue
+ self.loadData(FSmesh, waves)
+ self.execute()
+
+ def loadData(self, FSmesh, waves):
+ """ Convert data to numpy format.
+ @param FSmesh Initial free surface mesh.
+ @param waves Considered simulation waves (A,T,phi,heading).
+ """
+ nx = len(FSmesh)
+ ny = len(FSmesh[0])
+ nW = len(waves)
+ # Mesh data
+ p = np.ndarray((nx,ny, 3), dtype=np.float32)
+ v = np.ndarray((nx,ny, 3), dtype=np.float32)
+ f = np.ndarray((nx,ny, 3), dtype=np.float32)
+ n = np.ndarray((nx,ny, 3), dtype=np.float32)
+ a = np.ndarray((nx,ny, 1), dtype=np.float32)
+ phi = np.ndarray((nx,ny, 1), dtype=np.float32)
+ Phi = np.ndarray((nx,ny, 1), dtype=np.float32)
+ for i in range(0, nx):
+ for j in range(0, ny):
+ pos = FSmesh[i][j].pos
+ normal = FSmesh[i][j].normal
+ area = FSmesh[i][j].area
+ p[i,j,0] = pos.x
+ p[i,j,1] = pos.y
+ p[i,j,2] = pos.z
+ v[i,j,0] = 0.
+ v[i,j,1] = 0.
+ v[i,j,2] = 0.
+ f[i,j,0] = 0.
+ f[i,j,1] = 0.
+ f[i,j,2] = 0.
+ n[i,j,0] = normal.x
+ n[i,j,1] = normal.y
+ n[i,j,2] = normal.z
+ a[i,j] = area
+ self.fs = {'Nx':nx, 'Ny':ny, 'pos':p, 'vel':v, 'acc':f, \
+ 'normal':n, 'area':a, 'velPot':phi, 'accPot':Phi}
+ # Waves data
+ w = np.ndarray((nW, 4), dtype=np.float32)
+ for i in range(0,nW):
+ w[i,0] = waves[i][0]
+ w[i,1] = waves[i][1]
+ w[i,2] = waves[i][2]
+ w[i,3] = waves[i][3]
+ self.waves = {'N':nW, 'data':w}
+
+ def execute(self):
+ """ Compute initial conditions. """
+ nx = self.fs['Nx']
+ ny = self.fs['Ny']
+ for i in range(0,nx):
+ for j in range(0,ny):
+ for w in self.waves['data']:
+ A = w[0]
+ T = w[1]
+ phase = w[2]
+ heading = np.pi*w[3]/180.0
+ wl = 0.5 * grav / np.pi * T*T
+ k = 2.0*np.pi/wl
+ frec = 2.0*np.pi/T
+ pos = self.fs['pos'][i,j]
+ l = pos[0]*np.cos(heading) + pos[1]*np.sin(heading)
+ amp = A*np.sin(k*l + phase)
+ self.fs['pos'][i,j][2] = self.fs['pos'][i,j][2] + amp
+ amp = frec*A*np.cos(k*l + phase)
+ self.fs['vel'][i,j][2] = self.fs['vel'][i,j][2] - amp
+ amp = frec*frec*A*np.sin(k*l + phase)
+ self.fs['acc'][i,j][2] = self.fs['acc'][i,j][2] - amp
+ amp = grav/frec*A*np.sin(k*l + phase)
+ self.fs['velPot'][i,j] = self.fs['velPot'][i,j] + amp
+ amp = grav*A*np.cos(k*l + phase)
+ self.fs['accPot'][i,j] = self.fs['accPot'][i,j] + amp
diff --git a/src/Mod/Ship/simRun/Simulation.py b/src/Mod/Ship/simRun/Simulation.py
new file mode 100644
index 000000000..a06f6b0d2
--- /dev/null
+++ b/src/Mod/Ship/simRun/Simulation.py
@@ -0,0 +1,110 @@
+#***************************************************************************
+#* *
+#* Copyright (c) 2011, 2012 *
+#* Jose Luis Cercos Pita *
+#* *
+#* This program is free software; you can redistribute it and/or modify *
+#* it under the terms of the GNU Lesser General Public License (LGPL) *
+#* as published by the Free Software Foundation; either version 2 of *
+#* the License, or (at your option) any later version. *
+#* for detail see the LICENCE text file. *
+#* *
+#* This program is distributed in the hope that it will be useful, *
+#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+#* GNU Library General Public License for more details. *
+#* *
+#* You should have received a copy of the GNU Library General Public *
+#* License along with this program; if not, write to the Free Software *
+#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+#* USA *
+#* *
+#***************************************************************************
+
+import time
+from math import *
+import threading
+
+# pyOpenCL
+import pyopencl as cl
+import numpy as np
+
+# FreeCAD
+import FreeCAD,FreeCADGui
+from FreeCAD import Base, Vector
+import Part
+
+# Ship design module
+from shipUtils import Paths, Translator, Math
+
+class Singleton(type):
+ def __init__(cls, name, bases, dct):
+ cls.__instance = None
+ type.__init__(cls, name, bases, dct)
+
+ def __call__(cls, *args, **kw):
+ if cls.__instance is None:
+ cls.__instance = type.__call__(cls, *args,**kw)
+ return cls.__instance
+
+class FreeCADShipSimulation(threading.Thread):
+ __metaclass__ = Singleton
+ def __init__ (self, device, endTime, output, FSmesh, waves):
+ """ Thread constructor.
+ @param device Device to use.
+ @param endTime Maximum simulation time.
+ @param output [Rate,Type] Output rate, Type=0 if FPS, 1 if IPF.
+ @param FSmesh Free surface mesh faces.
+ @param waves Waves parameters (A,T,phi,heading)
+ """
+ threading.Thread.__init__(self)
+ # Setup as stopped
+ self.active = False
+ # Build OpenCL context and command queue
+ self.device = device
+ if self.device == None: # Can't use OpenCL
+ self.context = None
+ self.queue = None
+ else:
+ self.context = cl.Context(devices=[self.device])
+ self.queue = cl.CommandQueue(self.context)
+ # Storage data
+ self.endTime = endTime
+ self.output = output
+ self.FSmesh = FSmesh
+ self.waves = waves
+
+ def run(self):
+ """ Runs the simulation.
+ """
+ self.active = True
+ # Simulation stuff
+ if self.device == None:
+ from Sim import initialization
+ else:
+ from clSim import initialization
+ msg = Translator.translate("\t[Sim]: Initializating OpenCL...\n")
+ FreeCAD.Console.PrintMessage(msg)
+ init = initialization.perform(self.FSmesh,self.waves,self.context,self.queue)
+ msg = Translator.translate("\t[Sim]: Iterating (outputs will be noticed)...\n")
+ FreeCAD.Console.PrintMessage(msg)
+ while self.active:
+ print("Im thread, Im running...")
+ time.sleep(1)
+ # ...
+ print("Im thread, step done!")
+ # Set thread as stopped (and prepare it to restarting)
+ self.active = False
+ threading.Event().set()
+ threading.Thread.__init__(self)
+
+ def stop(self):
+ """ Call to stop execution.
+ """
+ self.active = False
+
+ def isRunning(self):
+ """ Report thread state
+ @return True if thread is running, False otherwise.
+ """
+ return self.active
diff --git a/src/Mod/Ship/simRun/TaskPanel.py b/src/Mod/Ship/simRun/TaskPanel.py
new file mode 100644
index 000000000..d2c34b8b7
--- /dev/null
+++ b/src/Mod/Ship/simRun/TaskPanel.py
@@ -0,0 +1,204 @@
+#***************************************************************************
+#* *
+#* Copyright (c) 2011, 2012 *
+#* Jose Luis Cercos Pita *
+#* *
+#* This program is free software; you can redistribute it and/or modify *
+#* it under the terms of the GNU Lesser General Public License (LGPL) *
+#* as published by the Free Software Foundation; either version 2 of *
+#* the License, or (at your option) any later version. *
+#* for detail see the LICENCE text file. *
+#* *
+#* This program is distributed in the hope that it will be useful, *
+#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+#* GNU Library General Public License for more details. *
+#* *
+#* You should have received a copy of the GNU Library General Public *
+#* License along with this program; if not, write to the Free Software *
+#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+#* USA *
+#* *
+#***************************************************************************
+
+# FreeCAD modules
+import FreeCAD as App
+import FreeCADGui as Gui
+# Qt library
+from PyQt4 import QtGui,QtCore
+# pyOpenCL
+import pyopencl as cl
+# Module
+import SimInstance
+from shipUtils import Paths, Translator
+from Simulation import FreeCADShipSimulation as Sim
+
+import time
+
+class TaskPanel:
+ def __init__(self):
+ self.ui = Paths.modulePath() + "/simRun/TaskPanel.ui"
+ self.sim = False
+
+ def accept(self):
+ msg = Translator.translate("Building data...\n")
+ App.Console.PrintMessage(msg)
+ # Get GUI data
+ endTime = self.form.time.value()
+ output = []
+ output.append(self.form.output.value())
+ output.append(self.form.outputType.currentIndex())
+ devId = self.form.device.currentIndex() - 1 # First is not OpenCL
+ # Get OpenCL device
+ device = None
+ count = 0
+ platforms = cl.get_platforms()
+ for p in platforms:
+ devs = p.get_devices()
+ for d in devs:
+ if count == devId:
+ device = d
+ count = count + 1
+ # Get free surfaces data
+ FSMesh = SimInstance.FSMesh(self.sim)
+ wData = self.sim.Waves
+ wDir = self.sim.Waves_Dir
+ waves = []
+ for i in range(0,len(wData)):
+ waves.append([wData[i].x, wData[i].y, wData[i].z, wDir[i]])
+ msg = Translator.translate("Launching simulation...\n")
+ App.Console.PrintMessage(msg)
+ # Build simulation thread
+ simulator = Sim(device, endTime, output, FSMesh, waves)
+ simulator.start()
+ msg = Translator.translate("Done!\n")
+ App.Console.PrintMessage(msg)
+ return True
+
+ def reject(self):
+ return True
+
+ def clicked(self, index):
+ pass
+
+ def open(self):
+ pass
+
+ def needsFullSpace(self):
+ return True
+
+ def isAllowedAlterSelection(self):
+ return False
+
+ def isAllowedAlterView(self):
+ return True
+
+ def isAllowedAlterDocument(self):
+ return False
+
+ def helpRequested(self):
+ pass
+
+ def setupUi(self):
+ mw = self.getMainWindow()
+ form = mw.findChild(QtGui.QWidget, "TaskPanel")
+ form.time = form.findChild(QtGui.QDoubleSpinBox, "SimTime")
+ form.output = form.findChild(QtGui.QDoubleSpinBox, "Output")
+ form.outputType = form.findChild(QtGui.QComboBox, "OutputType")
+ form.device = form.findChild(QtGui.QComboBox, "Device")
+ self.form = form
+ # Initial values
+ if self.initValues():
+ return True
+ self.retranslateUi()
+ # Connect Signals and Slots
+ # QtCore.QObject.connect(form.time, QtCore.SIGNAL("valueChanged(double)"), self.onData)
+
+ def getMainWindow(self):
+ "returns the main window"
+ # using QtGui.qApp.activeWindow() isn't very reliable because if another
+ # widget than the mainwindow is active (e.g. a dialog) the wrong widget is
+ # returned
+ toplevel = QtGui.qApp.topLevelWidgets()
+ for i in toplevel:
+ if i.metaObject().className() == "Gui::MainWindow":
+ return i
+ raise Exception("No main window found")
+
+ def initValues(self):
+ """ Set initial values for fields
+ """
+ # Get objects
+ selObjs = Gui.Selection.getSelection()
+ if not selObjs:
+ msg = Translator.translate("Ship simulation instance must be selected (no object selected)\n")
+ App.Console.PrintError(msg)
+ return True
+ for i in range(0,len(selObjs)):
+ obj = selObjs[i]
+ # Test if is a ship instance
+ props = obj.PropertiesList
+ try:
+ props.index("IsShipSimulation")
+ except ValueError:
+ continue
+ if obj.IsShipSimulation:
+ # Test if another ship already selected
+ if self.sim:
+ msg = Translator.translate("More than one ship simulation selected (extra simulations will be neglected)\n")
+ App.Console.PrintWarning(msg)
+ break
+ self.sim = obj
+ # Test if any valid ship was selected
+ if not self.sim:
+ msg = Translator.translate("Ship simulation instance must be selected (no valid simulation found at selected objects)\n")
+ App.Console.PrintError(msg)
+ return True
+ # Get the list of devices
+ self.form.device.addItem("CPU based version (No OpenCL)")
+ devices = []
+ platforms = cl.get_platforms()
+ for p in platforms:
+ devs = p.get_devices()
+ for d in devs:
+ devices.append([p,d])
+ dname = d.get_info(cl.device_info.NAME)
+ pname = p.get_info(cl.platform_info.NAME)
+ self.form.device.addItem(dname + " (" + pname + ")")
+ if not len(devices):
+ msg = Translator.translate("Can't find OpenCL devices\n")
+ App.Console.PrintWarning(msg)
+ msg = Translator.translate("Ready to work\n")
+ App.Console.PrintMessage(msg)
+ return False
+
+ def retranslateUi(self):
+ """ Set user interface locale strings.
+ """
+ self.form.setWindowTitle(Translator.translate("Run the simulation"))
+ self.form.findChild(QtGui.QLabel, "SimTimeLabel").setText(Translator.translate("Simulation time"))
+ self.form.findChild(QtGui.QLabel, "OutputLabel").setText(Translator.translate("Output"))
+ self.form.findChild(QtGui.QLabel, "DeviceLabel").setText(Translator.translate("OpenCL device"))
+
+def createTask():
+ panel = TaskPanel()
+ Gui.Control.showDialog(panel)
+ if panel.setupUi():
+ Gui.Control.closeDialog(panel)
+ return None
+ return panel
+
+def stopSimulation():
+ try:
+ simulator = Sim()
+ if not simulator.isRunning():
+ msg = Translator.translate("Simulation already stopped\n")
+ App.Console.PrintWarning(msg)
+ return
+ except:
+ msg = Translator.translate("Any active simulation to stop!\n")
+ App.Console.PrintError(msg)
+ return
+ simulator.stop()
+ msg = Translator.translate("Simulation will stop at the end of actual iteration\n")
+ App.Console.PrintMessage(msg)
diff --git a/src/Mod/Ship/simRun/TaskPanel.ui b/src/Mod/Ship/simRun/TaskPanel.ui
new file mode 100644
index 000000000..25eeebe79
--- /dev/null
+++ b/src/Mod/Ship/simRun/TaskPanel.ui
@@ -0,0 +1,131 @@
+
+
+ TaskPanel
+
+
+
+ 0
+ 0
+ 300
+ 102
+
+
+
+
+ 0
+ 1
+
+
+
+
+ 0
+ 100
+
+
+
+
+ 300
+ 16777215
+
+
+
+ Create new simulation
+
+
+
+
+
+ Simulation time
+
+
+
+
+
+
+ 1
+
+
+ 10000000.000000000000000
+
+
+ 10.000000000000000
+
+
+ 3600.000000000000000
+
+
+
+
+
+
+
+ 16
+ 16777215
+
+
+
+ s
+
+
+
+
+
+
+ Output
+
+
+
+
+
+
+ 10000.000000000000000
+
+
+ 1.000000000000000
+
+
+
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 56
+ 16777215
+
+
+
+
+
+
+
+ FPS
+
+
+
+
+ IPF
+
+
+
+
+
+
+
+ OpenCL device
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Mod/Ship/simRun/__init__.py b/src/Mod/Ship/simRun/__init__.py
new file mode 100644
index 000000000..64c597c02
--- /dev/null
+++ b/src/Mod/Ship/simRun/__init__.py
@@ -0,0 +1,40 @@
+#***************************************************************************
+#* *
+#* Copyright (c) 2011, 2012 *
+#* Jose Luis Cercos Pita *
+#* *
+#* This program is free software; you can redistribute it and/or modify *
+#* it under the terms of the GNU Lesser General Public License (LGPL) *
+#* as published by the Free Software Foundation; either version 2 of *
+#* the License, or (at your option) any later version. *
+#* for detail see the LICENCE text file. *
+#* *
+#* This program is distributed in the hope that it will be useful, *
+#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+#* GNU Library General Public License for more details. *
+#* *
+#* You should have received a copy of the GNU Library General Public *
+#* License along with this program; if not, write to the Free Software *
+#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+#* USA *
+#* *
+#***************************************************************************
+
+# FreeCAD modules
+import FreeCAD
+import FreeCADGui
+
+# Qt libraries
+from PyQt4 import QtGui,QtCore
+
+# Main object
+import TaskPanel
+
+def load():
+ """ Loads the tool """
+ TaskPanel.createTask()
+
+def stop():
+ """ Stops the simulation """
+ TaskPanel.stopSimulation()
diff --git a/src/Mod/Ship/simRun/clSim/Utils.py b/src/Mod/Ship/simRun/clSim/Utils.py
new file mode 100644
index 000000000..1d085b9ec
--- /dev/null
+++ b/src/Mod/Ship/simRun/clSim/Utils.py
@@ -0,0 +1,57 @@
+#***************************************************************************
+#* *
+#* Copyright (c) 2011, 2012 *
+#* Jose Luis Cercos Pita *
+#* *
+#* This program is free software; you can redistribute it and/or modify *
+#* it under the terms of the GNU Lesser General Public License (LGPL) *
+#* as published by the Free Software Foundation; either version 2 of *
+#* the License, or (at your option) any later version. *
+#* for detail see the LICENCE text file. *
+#* *
+#* This program is distributed in the hope that it will be useful, *
+#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+#* GNU Library General Public License for more details. *
+#* *
+#* You should have received a copy of the GNU Library General Public *
+#* License along with this program; if not, write to the Free Software *
+#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+#* USA *
+#* *
+#***************************************************************************
+
+# FreeCAD
+from shipUtils import Paths
+
+# pyOpenCL
+import pyopencl as cl
+import numpy as np
+
+# Standard
+import math
+
+def loadProgram(context, file):
+ """ Loads a file and comnpile it.
+ @param context OpenCL context where apply.
+ @param file File to load and compile.
+ @return Ready to use OpenCL program.
+ """
+ f = open(file, 'r')
+ str = "".join(f.readlines())
+ return cl.Program(context, str).build()
+
+def clPath():
+ """ Gets the OpenCL kernels path
+ @return OpenCL kernels path
+ """
+ path = Paths.modulePath() + "/OpenCL"
+ return path
+
+def globalSize(n):
+ """ Compute global size from amount of data.
+ @param n Amount of data.
+ @return global size.
+ """
+ localSize = 256.0
+ return int(math.ceil(n/localSize)*localSize)
diff --git a/src/Mod/Ship/simRun/clSim/__init__.py b/src/Mod/Ship/simRun/clSim/__init__.py
new file mode 100644
index 000000000..2fcb8e495
--- /dev/null
+++ b/src/Mod/Ship/simRun/clSim/__init__.py
@@ -0,0 +1,24 @@
+#***************************************************************************
+#* *
+#* Copyright (c) 2011, 2012 *
+#* Jose Luis Cercos Pita *
+#* *
+#* This program is free software; you can redistribute it and/or modify *
+#* it under the terms of the GNU Lesser General Public License (LGPL) *
+#* as published by the Free Software Foundation; either version 2 of *
+#* the License, or (at your option) any later version. *
+#* for detail see the LICENCE text file. *
+#* *
+#* This program is distributed in the hope that it will be useful, *
+#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+#* GNU Library General Public License for more details. *
+#* *
+#* You should have received a copy of the GNU Library General Public *
+#* License along with this program; if not, write to the Free Software *
+#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+#* USA *
+#* *
+#***************************************************************************
+
+import initialization, Utils
\ No newline at end of file
diff --git a/src/Mod/Ship/simRun/clSim/initialization.py b/src/Mod/Ship/simRun/clSim/initialization.py
new file mode 100644
index 000000000..5e4f30417
--- /dev/null
+++ b/src/Mod/Ship/simRun/clSim/initialization.py
@@ -0,0 +1,113 @@
+#***************************************************************************
+#* *
+#* Copyright (c) 2011, 2012 *
+#* Jose Luis Cercos Pita *
+#* *
+#* This program is free software; you can redistribute it and/or modify *
+#* it under the terms of the GNU Lesser General Public License (LGPL) *
+#* as published by the Free Software Foundation; either version 2 of *
+#* the License, or (at your option) any later version. *
+#* for detail see the LICENCE text file. *
+#* *
+#* This program is distributed in the hope that it will be useful, *
+#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+#* GNU Library General Public License for more details. *
+#* *
+#* You should have received a copy of the GNU Library General Public *
+#* License along with this program; if not, write to the Free Software *
+#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
+#* USA *
+#* *
+#***************************************************************************
+
+# Simulation stuff
+from Utils import *
+
+# pyOpenCL
+import pyopencl as cl
+import numpy as np
+
+class perform:
+ def __init__(self, FSmesh, waves, context, queue):
+ """ Constructor, includes program loading.
+ @param FSmesh Initial free surface mesh.
+ @param waves Considered simulation waves (A,T,phi,heading).
+ @param context OpenCL context where apply.
+ @param queue OpenCL command queue.
+ """
+ self.context = context
+ self.queue = queue
+ self.program = loadProgram(context, clPath() + "/simInit.cl")
+ self.loadData(FSmesh, waves)
+ self.execute()
+
+ def loadData(self, FSmesh, waves):
+ """ Convert data to numpy format, and create OpenCL
+ buffers.
+ @param FSmesh Initial free surface mesh.
+ @param waves Considered simulation waves (A,T,phi,heading).
+ """
+ mf = cl.mem_flags
+ nx = len(FSmesh)
+ ny = len(FSmesh[0])
+ nW = len(waves)
+ # Mesh data
+ p = np.ndarray((nx*ny, 4), dtype=np.float32)
+ n = np.ndarray((nx*ny, 4), dtype=np.float32)
+ a = np.ndarray((nx*ny, 1), dtype=np.float32)
+ for i in range(0, nx):
+ for j in range(0, ny):
+ id = i*ny + j
+ pos = FSmesh[i][j].pos
+ normal = FSmesh[i][j].normal
+ area = FSmesh[i][j].area
+ p[id,0] = pos.x
+ p[id,1] = pos.y
+ p[id,2] = pos.z
+ p[id,3] = 1.
+ n[id,0] = normal.x
+ n[id,1] = normal.y
+ n[id,2] = normal.z
+ n[id,3] = 0.
+ a[id,0] = area
+ p_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=p)
+ n_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=n)
+ a_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=a)
+ v_cl = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny*4 * np.dtype('float32').itemsize)
+ f_cl = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny*4 * np.dtype('float32').itemsize)
+ phi = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny * np.dtype('float32').itemsize)
+ Phi = cl.Buffer(self.context, mf.READ_WRITE, size = nx*ny * np.dtype('float32').itemsize)
+ self.fs = {'Nx':nx, 'Ny':ny, 'pos':p_cl, 'vel':v_cl, 'acc':f_cl, \
+ 'normal':n_cl, 'area':a_cl, 'velPot':phi, 'accPot':Phi}
+ # Waves data
+ w = np.ndarray((nW, 4), dtype=np.float32)
+ for i in range(0,nW):
+ w[i,0] = waves[i][0]
+ w[i,1] = waves[i][1]
+ w[i,2] = waves[i][2]
+ w[i,3] = waves[i][3]
+ w_cl = cl.Buffer(self.context, mf.READ_WRITE | mf.COPY_HOST_PTR, hostbuf=w)
+ self.waves = {'N':nW, 'data':w_cl}
+ # Ensure that all data has been written
+ self.queue.finish()
+
+ def execute(self):
+ """ Compute initial conditions. """
+ # Global size computation
+ N = np.ndarray((2, 1), dtype=np.uint32)
+ N[0] = self.fs['Nx']
+ N[1] = self.fs['Ny']
+ n = np.uint32(self.waves['N'])
+ gSize = (globalSize(N[0]),globalSize(N[1]),)
+ # Kernel arguments
+ kernelargs = (self.fs['pos'],
+ self.fs['vel'],
+ self.fs['acc'],
+ self.waves['data'],
+ self.fs['velPot'],
+ self.fs['accPot'],
+ N, n)
+ # Kernel launch
+ self.program.FS(self.queue, gSize, None, *(kernelargs))
+ self.queue.finish()
diff --git a/src/Mod/Ship/tankCreateTank/TaskPanel.py b/src/Mod/Ship/tankCreateTank/TaskPanel.py
index 4eddbd03e..15305ca90 100644
--- a/src/Mod/Ship/tankCreateTank/TaskPanel.py
+++ b/src/Mod/Ship/tankCreateTank/TaskPanel.py
@@ -24,6 +24,7 @@
# FreeCAD modules
import FreeCAD as App
import FreeCADGui as Gui
+import Part
# Qt library
from PyQt4 import QtGui,QtCore
# Module
diff --git a/src/Mod/Ship/tankGZ/Plot.py b/src/Mod/Ship/tankGZ/Plot.py
index 1ce11d344..09db5345b 100644
--- a/src/Mod/Ship/tankGZ/Plot.py
+++ b/src/Mod/Ship/tankGZ/Plot.py
@@ -24,8 +24,8 @@
import os
# FreeCAD modules
import FreeCAD,FreeCADGui
-from FreeCAD import Part, Base
-from FreeCAD import Image, ImageGui
+from FreeCAD import Base, Image, ImageGui
+import Part
# FreeCADShip modules
from shipUtils import Paths, Translator
diff --git a/src/Mod/Ship/tankWeights/Preview.py b/src/Mod/Ship/tankWeights/Preview.py
index 571155bb9..23bb7fae6 100644
--- a/src/Mod/Ship/tankWeights/Preview.py
+++ b/src/Mod/Ship/tankWeights/Preview.py
@@ -24,7 +24,7 @@
# FreeCAD modules
import FreeCAD,FreeCADGui
from FreeCAD import Base
-from FreeCAD import Part
+import Part
# FreeCADShip modules
from shipUtils import Paths, Translator