]> Creatis software - creaImageIO.git/commitdiff
Added create DB.
authorFrederic Cervenansky <Frederic.Cervenansky@creatis.insa-lyon.fr>
Wed, 29 Apr 2009 08:23:03 +0000 (08:23 +0000)
committerFrederic Cervenansky <Frederic.Cervenansky@creatis.insa-lyon.fr>
Wed, 29 Apr 2009 08:23:03 +0000 (08:23 +0000)
src2/creaImageIOWxGimmickView.cpp
src2/creaImageIOWxGimmickView.h
src2/icons/create-database-48x48.png [new file with mode: 0644]
src2/icons/create-database.xpm [new file with mode: 0644]

index 9f5a53fef968de35901b2686d5fb02e9d7b0a12e..ce9c01e0e330cd1479cc1a68acb5ffaaf89b6c0a 100644 (file)
@@ -9,6 +9,7 @@ using namespace crea;
 #include "icons/page-down.xpm"
 #include "icons/remove.xpm"
 #include "icons/database-add.xpm"
+#include "icons/create-database.xpm"
 #include "icons/help.xpm"
 #include "icons/synchronize.xpm"
 
@@ -23,12 +24,13 @@ namespace creaImageIO
   // The ids of the different tools
   enum
     {
-      TOOL_ADDFILES_ID = 1,
-      TOOL_ADDDIR_ID = 2,
-      TOOL_REMOVE_ID = 3,
-      TOOL_ADDDATABASE_ID = 4,
-      TOOL_HELP_ID = 5,
-         TOOL_SYNCHRONIZE_ID = 6
+         TOOL_CREATEDB_ID = 1,
+      TOOL_ADDFILES_ID = 2,
+      TOOL_ADDDIR_ID = 3,
+         TOOL_ADDDATABASE_ID = 4,
+      TOOL_REMOVE_ID = 5,
+         TOOL_SYNCHRONIZE_ID = 6,
+      TOOL_HELP_ID = 7
     };
   //======================================================================
 
@@ -45,7 +47,8 @@ namespace creaImageIO
       Icon_remove,
       Icon_database_add,
       Icon_help,
-         Icon_synchronize
+         Icon_synchronize,
+         Icon_create_database
     }
     icon_id;
   //================================================================
@@ -176,6 +179,11 @@ namespace creaImageIO
     mToolBar = new wxToolBar(this,-1,wxDefaultPosition,wxDefaultSize,
                             style);
 
+       mToolAddFile = mToolBar->AddTool( TOOL_CREATEDB_ID, 
+                                     _T("Create database"),
+                                     mIcon->GetBitmap(Icon_create_database),
+                                     _T("Create DB from an Attributes Descriptor file")
+                                     );
     mToolAddFile = mToolBar->AddTool( TOOL_ADDFILES_ID, 
                                      _T("Add file(s)"),
                                      mIcon->GetBitmap(Icon_page_down),
@@ -186,26 +194,26 @@ namespace creaImageIO
                                      mIcon->GetBitmap(Icon_folder_down),
                                      _T("Add the content of a folder to database")
                                      );
+       mToolAddDatabase = mToolBar->AddTool( TOOL_ADDDATABASE_ID, 
+                                     _T("Open database"),
+                                     mIcon->GetBitmap(Icon_database_add),
+                                     _T("Open a local or distant database")
+                                     );
     mToolRemove = mToolBar->AddTool( TOOL_REMOVE_ID, 
                                      _T("Remove"),
                                      mIcon->GetBitmap(Icon_remove),
                                      _T("Remove selected items")
                                      );
-    mToolAddDatabase = mToolBar->AddTool( TOOL_ADDDATABASE_ID, 
-                                     _T("Open database"),
-                                     mIcon->GetBitmap(Icon_database_add),
-                                     _T("Open a local or distant database")
+    mToolSynchronize = mToolBar->AddTool( TOOL_SYNCHRONIZE_ID, 
+                                     _T("Synchronize"),
+                                     mIcon->GetBitmap(Icon_synchronize),
+                                     _T("Synchronizes the database with disk")
                                      );
-    mToolHelp = mToolBar->AddTool( TOOL_HELP_ID, 
+       mToolHelp = mToolBar->AddTool( TOOL_HELP_ID, 
                                      _T("Help"),
                                      mIcon->GetBitmap(Icon_help),
                                      _T("Open help window")
                                      );
-       mToolSynchronize = mToolBar->AddTool( TOOL_SYNCHRONIZE_ID, 
-                                     _T("Synchronize"),
-                                     mIcon->GetBitmap(Icon_synchronize),
-                                     _T("Synchronizes the database with disk")
-                                     );
     //const wxBitmap& bitmap1, const wxString& shortHelpString = "", wxItemKind kind = wxITEM_NORMAL)
 
     mToolBar->Realize();
@@ -236,7 +244,7 @@ namespace creaImageIO
   void WxGimmickView::GetSelectedImages(std::vector<vtkImageData*>& s, int dim)
   {
        std::vector<std::string> files;
-       GetTreeViewMap()["Local database"]->GetSelectedAsString(files);
+       GetTreeViewMap()[crea::wx2std(mNotebook->GetPageText(mNotebook->GetSelection()))]->GetSelectedAsString(files);
        ReadImagesNotThreaded(s,files,dim);
   }
   //======================================================================
@@ -244,7 +252,7 @@ namespace creaImageIO
   //======================================================================
   void WxGimmickView::GetSelectedFiles(std::vector<std::string>& s)
   {
-       GetTreeViewMap()["Local database"]->GetSelectedAsString(s);
+       GetTreeViewMap()[crea::wx2std(mNotebook->GetPageText(mNotebook->GetSelection()))]->GetSelectedAsString(s);
   }
   //======================================================================
 
@@ -274,6 +282,7 @@ namespace creaImageIO
     icons[Icon_database_add] = wxIcon(database_add_xpm);
     icons[Icon_help] = wxIcon(help_xpm);
        icons[Icon_synchronize] = wxIcon(synchronize_xpm);
+       icons[Icon_create_database] = wxIcon(create_database_xpm);
 
     //   unsigned int NbIcons = 8;
     // Make an image list containing small icons
@@ -508,7 +517,7 @@ namespace creaImageIO
        //Going up
        prio = maxprio + 20;
        std::vector<tree::Node*> up;
-       GetTreeViewMap()["Local database"]->GetNodes(up,true);
+       GetTreeViewMap()[crea::wx2std(mNotebook->GetPageText(mNotebook->GetSelection()))]->GetNodes(up,true);
        std::vector<tree::Node*>::iterator iterUp;
        for(iterUp=up.begin();iterUp!=up.end();++iterUp)
        {
@@ -526,7 +535,7 @@ namespace creaImageIO
        //Going down
        prio = maxprio + 19;
        std::vector<tree::Node*> down;
-       GetTreeViewMap()["Local database"]->GetNodes(down,false);
+       GetTreeViewMap()[crea::wx2std(mNotebook->GetPageText(mNotebook->GetSelection()))]->GetNodes(down,false);
        std::vector<tree::Node*>::iterator iterDown;
        for(iterDown=down.begin();iterDown!=down.end();++iterDown)
        {
@@ -590,7 +599,7 @@ namespace creaImageIO
   {
        //TODO Select current tree handler       
     wxBusyCursor busy;
-    GetTreeViewMap()["Local database"]->RemoveSelected();
+    GetTreeViewMap()[crea::wx2std(mNotebook->GetPageText(mNotebook->GetSelection()))]->RemoveSelected();
        ClearSelection();
   }
   //=================================================
@@ -607,14 +616,14 @@ namespace creaImageIO
   void WxGimmickView::OnSynchronize(wxCommandEvent& event)
   {       
     wxBusyCursor busy;
-       const wxString choices[] = { _T("Check database for file deletion or addition and give a report."), 
-                                                               _T("Check database for file deletion or addition and attribute change and give a report."), 
-                                                               _T("Repair database (removes deleted files and adds new files)."), 
-                                                               _T("Repair database (removes deleted files, adds new files and resets changed attributes).") } ;
+       const wxString choices[] = { _T("Check database for files deletion and addition and give a report."), 
+                                                               _T("Check database for files deletion, addition and attributes change. Then give a report."), 
+                                                               _T("Repair database (remove deleted files and add new files)."), 
+                                                               _T("Repair database (remove deleted files, add new files and reset changed attributes).") } ;
 
     wxSingleChoiceDialog dialog(this,
                                                                _T("Select one of the following synchronization actions:\n")
-                                _T("Plase note that, due to the heavy amount of operations required, this action might take a while."),
+                                _T("Please note that, due to the heavy amount of operations required, this action might take a while."),
                                 _T("Synchronization Settings"),
                                 WXSIZEOF(choices), choices);
 
@@ -712,26 +721,71 @@ namespace creaImageIO
                std::stringstream st;
                for(int i = 0; i< files.size(); i++)
                {
-                       st<< "remote_" << i+1;
+                       //get name of DB (file name)
+                       size_t pos = files[i].find_last_of("\\");
+                       std::string name = crea::wx2std(files[i].substr(pos+1));
+                       pos = name.find_last_of(".");
+                       name = name.substr(0,pos);
                        //create TreeHandler
-                       mGimmick->addDB(st.str(), crea::wx2std(files[i]));
+                       mGimmick->addDB(name, crea::wx2std(files[i]));
                        //create TreeView
-                       CreateSingleTreeView(st.str());
+                       CreateSingleTreeView(name);
                }
        }
+  }
+    ////////////////////////////////////////////////////
+  // Create a DB from an Attributes Descriptor files  //
+  // @param event : WxEvent                                              //
+  // @return : -                                                                 //
+  //////////////////////////////////////////////////
+  void WxGimmickView::OnCreateDB(wxCommandEvent& event)
+  {
     
-               
+         //Select DB
+         long style = wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST;
+         std::string wc("*.txt");
+         wxFileDialog* FD = new wxFileDialog( 0, 
+                                        _T("Select file"),
+                                        _T(""),
+                                        _T(""),
+                                        crea::std2wx(wc),
+                                        style,
+                                        wxDefaultPosition);
+    
+    if (FD->ShowModal()==wxID_OK)
+       {
+               wxBusyCursor busy;
+               wxArrayString afile;
+               FD->GetPaths(afile);
+               //get name of DB (file name)
+               std::string file = crea::wx2std(afile[0]);
+               size_t pos = file.find_last_of("\\");
+               std::string name = file.substr(pos+1);
+               std::string directory = file.substr(0,pos);
+               pos = name.find_last_of(".");
+               name = name.substr(0,pos);
+               //get directory to store DB
+               directory +=  "\\" + name + ".sqlite3";
+               //create createDB
+               mGimmick->createDB(name, file,directory);
+               //create TreeHandler
+               mGimmick->addDB(name, directory);
+               //create TreeView
+               CreateSingleTreeView(name);
+       }
   }
 
    //=================================================
 
    //=================================================
   BEGIN_EVENT_TABLE(WxGimmickView, wxPanel)
+    EVT_TOOL(TOOL_CREATEDB_ID, WxGimmickView::OnCreateDB)
+       EVT_TOOL(TOOL_ADDFILES_ID, WxGimmickView::OnCreateDB)
     EVT_TOOL(TOOL_ADDFILES_ID, WxGimmickView::OnAddFiles)
     EVT_TOOL(TOOL_ADDDIR_ID, WxGimmickView::OnAddDir)
+       EVT_TOOL(TOOL_ADDDATABASE_ID, WxGimmickView::OnAddDB)
        EVT_TOOL(TOOL_REMOVE_ID, WxGimmickView::OnRemove)
        EVT_TOOL(TOOL_SYNCHRONIZE_ID, WxGimmickView::OnSynchronize)
-       EVT_TOOL(TOOL_ADDDATABASE_ID, WxGimmickView::OnAddDB)
   END_EVENT_TABLE()
   //=================================================
 
index 3f46561bb640d917cfd7287965c733180c05ad38..33870d1327f2ef22627f2c67662a41ccb7e66bcf 100644 (file)
@@ -125,6 +125,9 @@ namespace creaImageIO
        // callback to add a database
        void OnAddDB(wxCommandEvent& event);
     
+       //Create a DB from an Attributes Descriptor files 
+       void OnCreateDB(wxCommandEvent& event);
+
     /// Progress dialog
     wxProgressDialog* mProgressDialog;
     ///The selection's maximum dimension
diff --git a/src2/icons/create-database-48x48.png b/src2/icons/create-database-48x48.png
new file mode 100644 (file)
index 0000000..289bc71
Binary files /dev/null and b/src2/icons/create-database-48x48.png differ
diff --git a/src2/icons/create-database.xpm b/src2/icons/create-database.xpm
new file mode 100644 (file)
index 0000000..ed7f397
--- /dev/null
@@ -0,0 +1,867 @@
+/* XPM */
+static const char * create_database_xpm[] = {
+"48 48 816 2",
+"      c None",
+".     c #BAC3C7",
+"+     c #B4BDC2",
+"@     c #B1BABF",
+"#     c #B5BEC3",
+"$     c #BAC2C6",
+"%     c #BDC5C9",
+"&     c #BAC2C7",
+"*     c #B6BFC3",
+"=     c #B2BBC0",
+"-     c #ABB5BA",
+";     c #B8C1C7",
+">     c #AEB8BE",
+",     c #C8CFD3",
+"'     c #D9DDE0",
+")     c #E7EAEC",
+"!     c #E9ECED",
+"~     c #E6E9EB",
+"{     c #DDE1E4",
+"]     c #D1D7DA",
+"^     c #C8CFD2",
+"/     c #C4CBCF",
+"(     c #C0C8CC",
+"_     c #BEC6CB",
+":     c #C0C7CC",
+"<     c #C2CACE",
+"[     c #C5CCD0",
+"}     c #CCD2D6",
+"|     c #D7DDE0",
+"1     c #E3E7E9",
+"2     c #E8EBED",
+"3     c #DDE1E3",
+"4     c #C9D0D3",
+"5     c #ACB6BC",
+"6     c #B2BBC1",
+"7     c #EEF0F2",
+"8     c #D7DCDF",
+"9     c #B8C0C5",
+"0     c #A1ADB3",
+"a     c #A2AEB4",
+"b     c #A6B1B8",
+"c     c #C1C9CE",
+"d     c #C8D0D4",
+"e     c #C8D0D6",
+"f     c #C6CFD5",
+"g     c #C0CBD2",
+"h     c #BBC6CE",
+"i     c #B4C1C9",
+"j     c #ACBAC2",
+"k     c #A2B1BA",
+"l     c #99A9B2",
+"m     c #92A2AC",
+"n     c #94A3AC",
+"o     c #9BA8AF",
+"p     c #ADB8BE",
+"q     c #CFD5D9",
+"r     c #EAEDEF",
+"s     c #E0E4E6",
+"t     c #B9C2C7",
+"u     c #B8C1C6",
+"v     c #EEF0F1",
+"w     c #D6DBDF",
+"x     c #A8B3B9",
+"y     c #9AA8B0",
+"z     c #B4BEC6",
+"A     c #CED6DC",
+"B     c #E6EBEF",
+"C     c #ECF0F3",
+"D     c #F0F3F5",
+"E     c #F3F6F7",
+"F     c #F3F6F8",
+"G     c #F1F4F6",
+"H     c #EDF1F4",
+"I     c #E9EEF1",
+"J     c #E3E9EE",
+"K     c #DFE6EB",
+"L     c #D9E2E8",
+"M     c #D4DEE5",
+"N     c #D0DBE2",
+"O     c #CBD7DF",
+"P     c #C5D3DC",
+"Q     c #BFCFD9",
+"R     c #B9CAD5",
+"S     c #B4C7D2",
+"T     c #AEC1CF",
+"U     c #A3B7C4",
+"V     c #96A8B5",
+"W     c #899BA6",
+"X     c #C8CFD4",
+"Y     c #F0F2F3",
+"Z     c #BCC4C8",
+"`     c #CED4D8",
+" .    c #EBEEEF",
+"..    c #A6B2B8",
+"+.    c #ABB8C0",
+"@.    c #CCD6DD",
+"#.    c #D8E1E7",
+"$.    c #E0E6EB",
+"%.    c #E4EAEE",
+"&.    c #EAEFF2",
+"*.    c #EEF1F4",
+"=.    c #F8F9FA",
+"-.    c #F9FAFB",
+";.    c #F4F6F8",
+">.    c #EEF2F5",
+",.    c #EBEFF2",
+"'.    c #E4EAEF",
+").    c #E0E7EC",
+"!.    c #DAE3E8",
+"~.    c #C6D3DD",
+"{.    c #B5C7D3",
+"].    c #AFC2CF",
+"^.    c #ABBFCD",
+"/.    c #A8BCCB",
+"(.    c #A5B9C8",
+"_.    c #9FB4C1",
+":.    c #91A5B1",
+"<.    c #94A4AD",
+"[.    c #DDE2E5",
+"}.    c #D8DDDF",
+"|.    c #FCFCFC",
+"1.    c #B0BBC2",
+"2.    c #C2CED6",
+"3.    c #CFDAE2",
+"4.    c #EFF2F5",
+"5.    c #A2B7C5",
+"6.    c #9EB4C2",
+"7.    c #99AFBD",
+"8.    c #8FA2AD",
+"9.    c #FCFCFD",
+"0.    c #FDFDFD",
+"a.    c #D0DAE1",
+"b.    c #CAD7DF",
+"c.    c #EDF0F3",
+"d.    c #E0E6EC",
+"e.    c #A7BCCB",
+"f.    c #A4BAC8",
+"g.    c #A1B7C5",
+"h.    c #9DB4C2",
+"i.    c #9AB1C0",
+"j.    c #FAFBFB",
+"k.    c #D5DEE3",
+"l.    c #C1CED4",
+"m.    c #F5F8F9",
+"n.    c #D5DFE5",
+"o.    c #CED9E1",
+"p.    c #D3DDE4",
+"q.    c #D6E0E6",
+"r.    c #DCE4EA",
+"s.    c #E2E8ED",
+"t.    c #E5EBEF",
+"u.    c #EDF1F3",
+"v.    c #E6ECEF",
+"w.    c #DDE5EA",
+"x.    c #D7E1E7",
+"y.    c #D3DDE5",
+"z.    c #CAD6DE",
+"A.    c #C4D2DC",
+"B.    c #BECED8",
+"C.    c #B8C9D5",
+"D.    c #B4C6D2",
+"E.    c #A7BBCA",
+"F.    c #A4B9C8",
+"G.    c #A8BCC9",
+"H.    c #E3E9ED",
+"I.    c #E8EDF1",
+"J.    c #628293",
+"K.    c #ADBEC8",
+"L.    c #F4F6F7",
+"M.    c #ECF1F4",
+"N.    c #D5DFE6",
+"O.    c #D2DCE3",
+"P.    c #CCD8E0",
+"Q.    c #C9D5DE",
+"R.    c #C2D1DB",
+"S.    c #BCCCD7",
+"T.    c #B7C9D4",
+"U.    c #B2C4D1",
+"V.    c #ADC0CE",
+"W.    c #AABECC",
+"X.    c #A6BBCA",
+"Y.    c #B0C2CE",
+"Z.    c #F5F7F9",
+"`.    c #DDE5EB",
+" +    c #AABDCB",
+".+    c #5E7F91",
+"++    c #628394",
+"@+    c #728FA0",
+"#+    c #AABCC6",
+"$+    c #E1E7EB",
+"%+    c #F7F9FA",
+"&+    c #F0F3F6",
+"*+    c #E6EBF0",
+"=+    c #E5EAEF",
+"-+    c #DBE4E9",
+";+    c #C0D0D9",
+">+    c #BACBD6",
+",+    c #B6C8D3",
+"'+    c #B7C8D4",
+")+    c #C8D5DE",
+"!+    c #DAE3E9",
+"~+    c #E3EAEE",
+"{+    c #C3D2DB",
+"]+    c #ADC1CE",
+"^+    c #A4B9C7",
+"/+    c #668698",
+"(+    c #6A899B",
+"_+    c #7391A1",
+":+    c #87A1B0",
+"<+    c #ABBDC8",
+"[+    c #CFD9E0",
+"}+    c #E7ECEF",
+"|+    c #F2F5F7",
+"1+    c #F3F5F7",
+"2+    c #EFF3F5",
+"3+    c #EBF0F3",
+"4+    c #E9EEF2",
+"5+    c #F6F8FA",
+"6+    c #DFE7EC",
+"7+    c #658697",
+"8+    c #6E8D9E",
+"9+    c #7291A2",
+"0+    c #7794A6",
+"a+    c #7B98A9",
+"b+    c #829DAE",
+"c+    c #91AAB9",
+"d+    c #AFC2CD",
+"e+    c #BECDD6",
+"f+    c #E6ECF0",
+"g+    c #FBFCFC",
+"h+    c #D2DDE4",
+"i+    c #BACBD5",
+"j+    c #819DAE",
+"k+    c #88A3B3",
+"l+    c #8EA7B7",
+"m+    c #93ACBB",
+"n+    c #99B0BF",
+"o+    c #A0B6C4",
+"p+    c #A6BBC9",
+"q+    c #ACBFCE",
+"r+    c #C1D0DA",
+"s+    c #FAFBFC",
+"t+    c #D8E2E8",
+"u+    c #93ABBB",
+"v+    c #A6BAC9",
+"w+    c #D6DFE6",
+"x+    c #728D9D",
+"y+    c #7693A3",
+"z+    c #6E8D9F",
+"A+    c #B6C5CF",
+"B+    c #AAB5BB",
+"C+    c #CAD1D5",
+"D+    c #788D99",
+"E+    c #698594",
+"F+    c #7390A1",
+"G+    c #D9E0E6",
+"H+    c #B4C0C8",
+"I+    c #9EACB5",
+"J+    c #C2CACF",
+"K+    c #ECEFF0",
+"L+    c #EBEDEF",
+"M+    c #909EA5",
+"N+    c #607580",
+"O+    c #4B6370",
+"P+    c #47606D",
+"Q+    c #526C7A",
+"R+    c #5F7988",
+"S+    c #6C8695",
+"T+    c #7B94A3",
+"U+    c #859EAD",
+"V+    c #8FA6B5",
+"W+    c #9AB0BE",
+"X+    c #A3B8C7",
+"Y+    c #DCE4E9",
+"Z+    c #E0E6EA",
+"`+    c #DEE4E7",
+" @    c #DBE0E3",
+".@    c #CDD4D8",
+"+@    c #ADB9BF",
+"@@    c #8D9DA6",
+"#@    c #6E828D",
+"$@    c #4B6471",
+"%@    c #49626E",
+"&@    c #5C727D",
+"*@    c #819199",
+"=@    c #DDE2E4",
+"-@    c #D4D9DC",
+";@    c #8F9EA6",
+">@    c #5C7380",
+",@    c #576F7C",
+"'@    c #57707D",
+")@    c #58717E",
+"!@    c #5B7481",
+"~@    c #5E7784",
+"{@    c #607986",
+"]@    c #627A88",
+"^@    c #667E8B",
+"/@    c #6A818E",
+"(@    c #6A818D",
+"_@    c #687F8B",
+":@    c #677E8A",
+"<@    c #657C89",
+"[@    c #617985",
+"}@    c #5C7481",
+"|@    c #5A727E",
+"1@    c #768993",
+"2@    c #FEFEFE",
+"3@    c #889AA4",
+"4@    c #687F8C",
+"5@    c #728793",
+"6@    c #F9FAFA",
+"7@    c #D4DEDD",
+"8@    c #C6D1D8",
+"9@    c #E7EBED",
+"0@    c #94A5AF",
+"a@    c #7E929E",
+"b@    c #8295A1",
+"c@    c #ADB6BD",
+"d@    c #BEC5C9",
+"e@    c #C6CBCF",
+"f@    c #BDC4C8",
+"g@    c #CED2D5",
+"h@    c #E9EBEC",
+"i@    c #ABC1C0",
+"j@    c #648395",
+"k@    c #B4C3CC",
+"l@    c #EDF0F2",
+"m@    c #D2D9DE",
+"n@    c #A7B5BE",
+"o@    c #97A8B3",
+"p@    c #93A5B0",
+"q@    c #9AA9B3",
+"r@    c #BCC5CA",
+"s@    c #E3E4E6",
+"t@    c #F3F4F4",
+"u@    c #E5F1E8",
+"v@    c #D4EADB",
+"w@    c #B9DDC3",
+"x@    c #B7DCC1",
+"y@    c #D2E8D9",
+"z@    c #E2EFE5",
+"A@    c #EFF1F0",
+"B@    c #E2E3E3",
+"C@    c #C7D1CB",
+"D@    c #7B97A6",
+"E@    c #B2C2CB",
+"F@    c #E9EEF0",
+"G@    c #D7DEE3",
+"H@    c #C1CDD4",
+"I@    c #AFBEC8",
+"J@    c #A4B5C1",
+"K@    c #A3B4BF",
+"L@    c #A3B4C0",
+"M@    c #BBC5CC",
+"N@    c #E9EAEB",
+"O@    c #F5F9F5",
+"P@    c #A2D3B1",
+"Q@    c #48A86C",
+"R@    c #128F41",
+"S@    c #018636",
+"T@    c #008636",
+"U@    c #0F8D3F",
+"V@    c #43A567",
+"W@    c #98CEA9",
+"X@    c #EEF3EF",
+"Y@    c #E5E4E4",
+"Z@    c #6F8E9F",
+"`@    c #8AA4B2",
+" #    c #B0C1CC",
+".#    c #F2F4F6",
+"+#    c #E8EDF0",
+"@#    c #DBE2E8",
+"##    c #D6DEE4",
+"$#    c #D3DCE3",
+"%#    c #D2DBE2",
+"&#    c #D1DAE1",
+"*#    c #D5DEE4",
+"=#    c #D8E0E5",
+"-#    c #F7F8F7",
+";#    c #B0DABC",
+">#    c #21974D",
+",#    c #038A38",
+"'#    c #109142",
+")#    c #20994F",
+"!#    c #2A9F57",
+"~#    c #2FA15C",
+"{#    c #30A25C",
+"]#    c #2CA059",
+"^#    c #249B53",
+"/#    c #169447",
+"(#    c #078B3B",
+"_#    c #199346",
+":#    c #A4D4B2",
+"<#    c #EFF0EF",
+"[#    c #CCD3CE",
+"}#    c #7C98A9",
+"|#    c #86A1B1",
+"1#    c #94ABBA",
+"2#    c #A4B9C6",
+"3#    c #B4C5D0",
+"4#    c #C2D0D9",
+"5#    c #CFDAE1",
+"6#    c #D8E1E8",
+"7#    c #ECF1F3",
+"8#    c #F2F2F2",
+"9#    c #F5F9F6",
+"0#    c #75C08C",
+"a#    c #078E3B",
+"b#    c #129444",
+"c#    c #29A057",
+"d#    c #31A55D",
+"e#    c #32A65E",
+"f#    c #32A75E",
+"g#    c #31A65D",
+"h#    c #32A55E",
+"i#    c #31A45D",
+"j#    c #2EA25A",
+"k#    c #1C994C",
+"l#    c #098E3C",
+"m#    c #66B881",
+"n#    c #ECF1ED",
+"o#    c #CBD4CE",
+"p#    c #E5E9EB",
+"q#    c #FBFBFB",
+"r#    c #69BB82",
+"s#    c #048F38",
+"t#    c #1D9C4D",
+"u#    c #32A95D",
+"v#    c #33AA5D",
+"w#    c #36AB5D",
+"x#    c #A3D9B6",
+"y#    c #AFDEC1",
+"z#    c #AFDEC0",
+"A#    c #A0D7B5",
+"B#    c #2BA65A",
+"C#    c #32A85D",
+"D#    c #28A056",
+"E#    c #0A913D",
+"F#    c #57B375",
+"G#    c #F3F4F3",
+"H#    c #C7CFC9",
+"I#    c #DAE1E6",
+"J#    c #F8F8F8",
+"K#    c #90CEA2",
+"L#    c #029037",
+"M#    c #21A04F",
+"N#    c #34AA5D",
+"O#    c #3AAD5D",
+"P#    c #41AE5C",
+"Q#    c #47B05C",
+"R#    c #4DB15D",
+"S#    c #E9F5EB",
+"T#    c #E6F4EC",
+"U#    c #32A658",
+"V#    c #45AF5C",
+"W#    c #3FAE5C",
+"X#    c #38AC5D",
+"Y#    c #2CA459",
+"Z#    c #09923D",
+"`#    c #7AC391",
+" $    c #EBECEB",
+".$    c #EBEEF0",
+"+$    c #D6EDDB",
+"@$    c #119941",
+"#$    c #1BA04A",
+"$$    c #3CAD5C",
+"%$    c #50B25C",
+"&$    c #56B45C",
+"*$    c #5AB65B",
+"=$    c #5EB85C",
+"-$    c #EBF6EB",
+";$    c #FFFFFF",
+">$    c #3AA957",
+",$    c #59B55B",
+"'$    c #54B35C",
+")$    c #4DB15C",
+"!$    c #43AE5C",
+"~$    c #39AC5D",
+"{$    c #29A556",
+"]$    c #0D963E",
+"^$    c #C6E4CE",
+"/$    c #D9DBD9",
+"($    c #62BC7D",
+"_$    c #0E9B3C",
+":$    c #42AE5B",
+"<$    c #58B55B",
+"[$    c #5FB85B",
+"}$    c #65BB5B",
+"|$    c #69BC5B",
+"1$    c #6DBE5D",
+"2$    c #EDF7EB",
+"3$    c #41AC57",
+"4$    c #68BB5B",
+"5$    c #63BA5B",
+"6$    c #5DB75B",
+"7$    c #4CB15C",
+"8$    c #3FAE5D",
+"9$    c #1BA049",
+"0$    c #4DB36E",
+"a$    c #F2F1F1",
+"b$    c #6E8A99",
+"c$    c #718EA0",
+"d$    c #E2E7EA",
+"e$    c #E2F2E4",
+"f$    c #29A440",
+"g$    c #3BAA4D",
+"h$    c #56B45B",
+"i$    c #67BB5B",
+"j$    c #6DBE5C",
+"k$    c #72BF5F",
+"l$    c #76C061",
+"m$    c #79C264",
+"n$    c #EEF7EC",
+"o$    c #47AE5A",
+"p$    c #74C060",
+"q$    c #70BF5D",
+"r$    c #6BBD5B",
+"s$    c #64BA5B",
+"t$    c #5CB75B",
+"u$    c #52B35C",
+"v$    c #40AD59",
+"w$    c #20A23E",
+"x$    c #D1EAD7",
+"y$    c #CDD5CD",
+"z$    c #A6B2B9",
+"A$    c #E1E5E7",
+"B$    c #7B909D",
+"C$    c #6B8797",
+"D$    c #728E9F",
+"E$    c #7B98A8",
+"F$    c #C2D0DA",
+"G$    c #EFF1F3",
+"H$    c #ADDBB4",
+"I$    c #52B030",
+"J$    c #6BBC54",
+"K$    c #78C163",
+"L$    c #7CC367",
+"M$    c #80C56A",
+"N$    c #83C66C",
+"O$    c #EFF8ED",
+"P$    c #4BB05E",
+"Q$    c #7FC469",
+"R$    c #7BC265",
+"S$    c #76C161",
+"T$    c #60B85B",
+"U$    c #65BA59",
+"V$    c #56B33D",
+"W$    c #93D1A0",
+"X$    c #E2E1E1",
+"Y$    c #EFF1F2",
+"Z$    c #9AA7AD",
+"`$    c #627580",
+" %    c #4C6370",
+".%    c #435C69",
+"+%    c #6E8897",
+"@%    c #7D96A5",
+"#%    c #89A2B2",
+"$%    c #96ADBC",
+"%%    c #F8F8F9",
+"&%    c #82C786",
+"*%    c #73BC32",
+"=%    c #93CB50",
+"-%    c #78C365",
+";%    c #A7D89C",
+">%    c #ACD9A2",
+",%    c #B0DBA5",
+"'%    c #B2DCA7",
+")%    c #B1DBA5",
+"!%    c #AFDAA1",
+"~%    c #F5FAF3",
+"{%    c #F0F8F4",
+"]%    c #90CE9B",
+"^%    c #AFDAA2",
+"/%    c #AEDAA4",
+"(%    c #ABD8A0",
+"_%    c #A5D79C",
+":%    c #5EB862",
+"<%    c #8ECA51",
+"[%    c #79C044",
+"}%    c #70C07C",
+"|%    c #EDECEC",
+"1%    c #8E9DA5",
+"2%    c #58707D",
+"3%    c #536C79",
+"4%    c #627A87",
+"5%    c #677E8B",
+"6%    c #82959F",
+"7%    c #76C172",
+"8%    c #82C338",
+"9%    c #9BCE4E",
+"0%    c #A2D36E",
+"a%    c #F8FCF7",
+"b%    c #F9FCFB",
+"c%    c #5BB66A",
+"d%    c #86C64A",
+"e%    c #5AB557",
+"f%    c #FDFEFE",
+"g%    c #8497A1",
+"h%    c #647C89",
+"i%    c #647B88",
+"j%    c #80939D",
+"k%    c #72C063",
+"l%    c #86C43A",
+"m%    c #ABD669",
+"n%    c #FAFCF6",
+"o%    c #5CB76A",
+"p%    c #8BC84C",
+"q%    c #57B44C",
+"r%    c #F3F3F3",
+"s%    c #CFD8DE",
+"t%    c #E1E6E8",
+"u%    c #889AA5",
+"v%    c #778C99",
+"w%    c #8C9DA8",
+"x%    c #81C771",
+"y%    c #85C439",
+"z%    c #AAD568",
+"A%    c #FAFCF5",
+"B%    c #5BB76A",
+"C%    c #8AC74B",
+"D%    c #66BB55",
+"E%    c #638294",
+"F%    c #BBC9D1",
+"G%    c #CAD3D8",
+"H%    c #A1B0B9",
+"I%    c #90A2AD",
+"J%    c #8EA1AC",
+"K%    c #8FA1AC",
+"L%    c #99A9B3",
+"M%    c #F6F7F8",
+"N%    c #97D087",
+"O%    c #7FC136",
+"P%    c #96CB45",
+"Q%    c #B4DA84",
+"R%    c #B3DA89",
+"S%    c #B4DB8C",
+"T%    c #BADE9D",
+"U%    c #C1E1AC",
+"V%    c #F7FBF5",
+"W%    c #F1F9F5",
+"X%    c #A0D5A6",
+"Y%    c #BBDE9E",
+"Z%    c #B4DB8D",
+"`%    c #B0D987",
+" &    c #6EBB43",
+".&    c #99CD4B",
+"+&    c #82C447",
+"@&    c #8ACA7A",
+"#&    c #EFEFEF",
+"$&    c #638495",
+"%&    c #7F9AA9",
+"&&    c #B9C7D0",
+"*&    c #E8ECEF",
+"=&    c #E8ECEE",
+"-&    c #D1D9DE",
+";&    c #BBC7CF",
+">&    c #ABB9C4",
+",&    c #A5B5C0",
+"'&    c #A1B2BD",
+")&    c #A0B1BC",
+"!&    c #A3B3BE",
+"~&    c #BFE2B4",
+"{&    c #73BC36",
+"]&    c #95CB44",
+"^&    c #83C124",
+"/&    c #82C023",
+"(&    c #83C126",
+"_&    c #89C434",
+":&    c #F1F8E7",
+"<&    c #4EAF41",
+"[&    c #8CC637",
+"}&    c #76BF42",
+"|&    c #ACD99F",
+"1&    c #E7E6E6",
+"2&    c #7593A3",
+"3&    c #94ABB8",
+"4&    c #B7C7D0",
+"5&    c #DBE3E8",
+"6&    c #EBEFF1",
+"7&    c #E2E8EC",
+"8&    c #DBE2E7",
+"9&    c #D5DDE3",
+"0&    c #CFD9DF",
+"a&    c #CDD7DE",
+"b&    c #CBD5DD",
+"c&    c #C9D4DC",
+"d&    c #E9ECEF",
+"e&    c #E8F4E3",
+"f&    c #73BD49",
+"g&    c #85C22A",
+"h&    c #83C125",
+"i&    c #EFF7E4",
+"j&    c #4CAE3D",
+"k&    c #7FC028",
+"l&    c #6ABA43",
+"m&    c #DCEED6",
+"n&    c #D7DDD3",
+"o&    c #92AAB9",
+"p&    c #A9BCC9",
+"q&    c #B9C9D3",
+"r&    c #C7D4DC",
+"s&    c #E1E8ED",
+"t&    c #E7EDF0",
+"u&    c #9BD084",
+"v&    c #7CBE2E",
+"w&    c #74BC2D",
+"x&    c #8CCA75",
+"y&    c #F6F6F6",
+"z&    c #F0F2F4",
+"A&    c #E2F1DB",
+"B&    c #7EC150",
+"C&    c #81C025",
+"D&    c #82C124",
+"E&    c #7DBF25",
+"F&    c #74BD48",
+"G&    c #D7ECCF",
+"H&    c #E4E5E2",
+"I&    c #DDE4E9",
+"J&    c #BCDFA9",
+"K&    c #81C13F",
+"L&    c #82C024",
+"M&    c #80C024",
+"N&    c #78BE3B",
+"O&    c #AED89A",
+"P&    c #607F91",
+"Q&    c #EBEEF1",
+"R&    c #AFD993",
+"S&    c #86C441",
+"T&    c #CBE5A8",
+"U&    c #D0E9BB",
+"V&    c #C1E2AE",
+"W&    c #5DB435",
+"X&    c #7FBF24",
+"Y&    c #7DC03D",
+"Z&    c #A4D387",
+"`&    c #F8F9F7",
+" *    c #DADDD5",
+".*    c #6D8491",
+"+*    c #638394",
+"@*    c #F2F4F5",
+"#*    c #F9FBF7",
+"$*    c #BADE9E",
+"%*    c #90C950",
+"&*    c #82C128",
+"**    c #7EBF28",
+"=*    c #87C54B",
+"-*    c #B1DA94",
+";*    c #F4F8F1",
+">*    c #E1E4DC",
+",*    c #728792",
+"'*    c #F5F6F7",
+")*    c #FBFCFA",
+"!*    c #D7EBC4",
+"~*    c #9FD06C",
+"{*    c #8BC642",
+"]*    c #81C027",
+"^*    c #81C024",
+"/*    c #7EBF27",
+"(*    c #86C440",
+"_*    c #99CD66",
+":*    c #D1E9BD",
+"<*    c #E2E5DE",
+"[*    c #758893",
+"}*    c #738A97",
+"|*    c #738F9E",
+"1*    c #7793A4",
+"2*    c #FAFAFB",
+"3*    c #D2E9BB",
+"4*    c #B3DA8B",
+"5*    c #98CD5D",
+"6*    c #91C94D",
+"7*    c #8DC746",
+"8*    c #8CC746",
+"9*    c #8FC84D",
+"0*    c #95CB5B",
+"a*    c #B0D886",
+"b*    c #CEE7B6",
+"c*    c #F4F9F1",
+"d*    c #778B96",
+"e*    c #798E9A",
+"f*    c #7C929F",
+"g*    c #8399A7",
+"h*    c #89A1B0",
+"i*    c #90A8B7",
+"j*    c #97ADBC",
+"k*    c #DEE5EA",
+"l*    c #E5EAEE",
+"m*    c #EAEDF0",
+"n*    c #E3E6E8",
+"o*    c #D5DADC",
+"p*    c #F0F1F2",
+"q*    c #FAFBF9",
+"r*    c #F2F8ED",
+"s*    c #E6F3DA",
+"t*    c #D8ECC6",
+"u*    c #D7ECC5",
+"v*    c #E5F2D8",
+"w*    c #F2F8EC",
+"x*    c #F8FAF7",
+"y*    c #F4F4F3",
+"z*    c #E2E4DF",
+"A*    c #8496A2",
+"B*    c #82949E",
+"C*    c #81929C",
+"D*    c #83949E",
+"E*    c #8797A1",
+"F*    c #8B9BA4",
+"G*    c #8D9CA4",
+"H*    c #8D9BA4",
+"I*    c #8B99A1",
+"J*    c #A4AFB6",
+"K*    c #E7EDDF",
+"L*    c #EDEDEB",
+"M*    c #EFEEEE",
+"N*    c #EBEBEB",
+"O*    c #E4E9DD",
+"                            . + @ # $ % & * = - ;                                               ",
+"                > , ' ) ! ~ { ] ^ / ( _ : < [ } | 1 2 ) 3 4 5                                   ",
+"          6 ' 7 8 9 0 a b > ; c d e 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 G H I J K L M N O P Q R S T U V W y X Y Z                         ",
+"    `  ...+.@.#.$.%.&.*.E =.-.;.>.,.'.).!.M N O ~.Q R {.].^./.(._.:.<.[.}.                      ",
+"    |.1.2.3.M L $.%.&.*.F -.-.;.4.,.'.).!.M N O ~.Q R {.].^./.(.5.6.7.8.9.                      ",
+"    0.a.b.3.M #.K J I c.G ;.;.G H I J d.L M N O P Q R S T ^.e.f.g.h.i.6.j.k.                    ",
+"    l.m.n.o.p.q.r.s.t.&.u.4.4.H ,.v.s.w.x.y.o.z.A.B.C.D.T ^.E.F.g.h.G.H.I.                      ",
+"    J.K.L.M.r.N.L K s.B I ,.,.I v.H.K !.n.O.P.Q.R.S.T.U.V.W.X.F.Y.p.Z.`. +                      ",
+"    .+++@+#+$+%+&+&.*+=+J '.'.J s.K -+q.p.3.O ~.;+>+,+'+S.)+!+&+=.~+{+]+^+                      ",
+"    .+++/+(+_+:+<+[+}+|+%+%+Z.1+2+H 3+4+I.B t.t.4+H F %+-.5+H 6+M )+>+]+^+                      ",
+"    .+++7+(+8+9+0+a+b+c+U d+e+O M L ).f+4+M.&+;.%+0.g+Z.H t.K #.h+)+i+V.^+                      ",
+"    .+++/+(+8+9+0+a+j+k+l+m+n+o+p+q+{.r+P.q.).I 1+9.s+;.H t.K t+h+)+>+]+^+                      ",
+"    .+++/+(+8+9+0+a+j+k+l+m+n+o+p+q+{.r+P.q.).I 1+9.s+;.H t.K t+h+)+>+]+^+                      ",
+"    .+++7+(+8+9+0+a+j+k+l+u+n+o+v+q+{.r+P.w+).I |+9.s+;.H t.K #.h+)+i+V.^+                      ",
+"      ++/+(+8+9+0+a+j+k+l+m+n+o+p+q+{.r+P.q.).I 1+9.s+;.H t.K t+h+)+>+]+                        ",
+"        x+y+z+9+0+a+j+k+l+m+n+o+p+q+{.r+P.q.).I 1+9.s+;.H t.K t+h+P.A+                          ",
+"      B+) C+D+E+F+a+j+k+l+m+n+o+p+q+{.r+P.q.).I 1+9.s+;.H t.G+H+I+J+K+.                         ",
+"    < L+M+N+O+P+P+Q+R+S+T+U+V+W+X+^.{.r+P.N.Y+Z+`+ @.@+@@@#@$@P+%@&@*@=@-@                      ",
+"    g+;@>@,@'@'@,@'@'@'@'@)@!@~@{@]@^@/@(@_@:@<@[@}@'@'@'@,@'@'@'@,@|@1@g+                      ",
+"    2@3@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@4@5@6@7@                    ",
+"    8@9@0@a@a@a@a@a@a@a@a@a@a@a@a@a@a@a@a@a@a@a@a@a@a@a@b@n c@d@e@e@f@g@h@i@                    ",
+"    j@k@l@m@n@o@p@p@p@p@p@p@p@p@p@p@p@p@p@p@p@p@p@p@q@r@s@t@u@v@w@x@y@z@A@B@C@                  ",
+"    .+++D@E@F@l@G@H@I@J@K@L@K@L@L@K@L@L@K@L@L@K@L@M@N@O@P@Q@R@S@T@T@T@U@V@W@X@Y@                ",
+"    .+++7+(+Z@`@ #k.F@Z..#+#$+@###$#%#a.&#$#*#=#{ -#;#>#,#'#)#!#~#{#]#^#/#(#_#:#<#[#            ",
+"    .+++/+(+8+9+0+}#|#1#2#3#4#5#6#`.%.4+7#>.G 8#9#0#a#b#c#d#e#e#f#g#e#h#i#j#k#l#m#n#o#          ",
+"    .+++/+(+8+9+0+a+j+k+l+m+n+o+p+q+{.r+P.q.p#q#r#s#t#g#u#v#w#x#y#z#A#B#u#C#e#D#E#F#G#H#        ",
+"    .+++7+(+8+9+0+a+j+k+l+u+n+o+v+q+{.r+P.I#J#K#L#M#N#O#P#Q#R#S#2@2@T#U#V#W#X#v#Y#Z#`# $        ",
+"    .+++/+(+8+9+0+a+j+k+l+m+n+o+p+q+{.r+P..$+$@$#$$$Q#%$&$*$=$-$;$2@T#>$,$'$)$!$~${$]$^$/$      ",
+"      ++/+(+8+9+0+a+j+k+l+m+n+o+p+q+{.r+%#q#($_$:$%$<$[$}$|$1$2$;$2@T#3$4$5$6$&$7$8$9$0$a$      ",
+"        b$c$8+9+0+a+j+k+l+u+n+o+v+q+{.r+d$e$f$g$h$[$i$j$k$l$m$n$2@2@T#o$p$q$r$s$t$u$v$w$x$y$    ",
+"      z$A$X B$C$D$E$j+k+l+m+n+o+p+q+{.F$G$H$I$J$s$r$k$K$L$M$N$O$;$2@T#P$Q$R$S$q$|$T$U$V$W$X$    ",
+"    . Y$Z$`$ %.%P+Q+R++%@%#%$%o+p+q+{.P %%&%*%=%-%;%>%,%'%)%!%~%;$2@{%]%^%,%/%(%_%:%<%[%}%|%    ",
+"    g+1%2%3%3%3%3%3%3%3%3%3%3%)@~@4%5%6%q#7%8%9%0%a%2@2@2@2@2@2@2@2@2@2@2@2@2@2@b%c%9%d%e%a$    ",
+"    f%g%h%i%h%h%i%h%h%h%i%h%i%h%h%i%h%j%q#k%l%9%m%n%2@;$;$2@;$;$;$2@;$;$2@;$;$2@b%o%9%p%q%r%    ",
+"    s%t%u%v%v%v%v%v%v%v%v%v%v%v%v%v%v%w%q#x%y%9%z%A%2@2@2@2@2@2@2@2@2@2@2@2@2@2@b%B%9%C%D%8#    ",
+"    E%F%.#G%H%I%J%K%K%K%J%K%J%K%K%J%K%L%M%N%O%9%P%Q%R%R%S%T%U%V%;$2@W%X%Y%Z%R%R%`% &.&+&@&#&    ",
+"    .+$&%&&&*&=&-&;&>&,&'&)&)&)&)&)&)&!&.$~&{&]&^&^&/&^&^&(&_&:&;$2@T#<&(&^&^&/&^&^&[&}&|&1&    ",
+"    .+++/+(+2&3&4&5&G ;.6&7&8&9&0&a&b&c&d&e&f&g&^&^&/&^&^&/&h&i&;$2@T#j&/&^&^&/&^&^&k&l&m&n&    ",
+"    .+++7+(+8+9+0+a+j+o&p&q&r&M w.s&t&C l@0.u&v&/&/&/&/&/&/&h&i&2@2@T#j&/&/&/&/&/&/&w&x&y&      ",
+"    .+++/+(+8+9+0+a+j+k+l+m+n+o+p+q+{.r+P.z&A&B&C&^&/&^&^&/&h&i&;$2@T#j&/&^&^&/&D&E&F&G&H&      ",
+"    .+++/+(+8+9+0+a+j+k+l+m+n+o+p+q+{.r+P.I&q#J&K&L&/&^&^&/&h&i&;$2@T#j&/&^&^&/&M&N&O&G#        ",
+"    P&++7+(+8+9+0+a+j+k+l+u+n+o+v+q+{.r+P.w+Q&0.R&S&L&/&/&/&^&T&U&U&V&W&/&/&/&X&Y&Z&`& *        ",
+"    .*+*/+(+8+9+0+a+j+k+l+m+n+o+p+q+{.r+P.q.).@*#*$*%*&*L&/&^&^&^&/&^&^&/&L&**=*-*;*>*          ",
+"      ,*S+(+8+9+0+a+j+k+l+m+n+o+p+q+{.r+P.q.).I '*)*!*~*{*]*L&^&^&/&D&^*/*(*_*:*`&<*            ",
+"          [*}*|*1*a+j+k+l+u+n+o+v+q+{.r+P.w+).I |+J#2*V%3*4*5*6*7*8*9*0*a*b*c*r%                ",
+"                d*e*f*g*h*i*j*6.(.^.{.r+P.n.k*l*m*v n*o*p*q*r*s*t*u*v*w*x*y*z*                  ",
+"                            A*B*C*D*E*F*G*G*H*I*J*          K*L*#&M*N*O*                        "};