diff --git a/Plugins/org.mitk.gui.qt.cli/documentation/UserManual/CLIIcon.png b/Plugins/org.mitk.gui.qt.cli/documentation/UserManual/CLIIcon.png new file mode 100644 index 0000000000..88f2710f8d Binary files /dev/null and b/Plugins/org.mitk.gui.qt.cli/documentation/UserManual/CLIIcon.png differ diff --git a/Plugins/org.mitk.gui.qt.cli/documentation/UserManual/CLIPreferences.png b/Plugins/org.mitk.gui.qt.cli/documentation/UserManual/CLIPreferences.png index 867ad141f6..2b83ec3b1a 100644 Binary files a/Plugins/org.mitk.gui.qt.cli/documentation/UserManual/CLIPreferences.png and b/Plugins/org.mitk.gui.qt.cli/documentation/UserManual/CLIPreferences.png differ diff --git a/Plugins/org.mitk.gui.qt.cli/documentation/UserManual/Manual.dox b/Plugins/org.mitk.gui.qt.cli/documentation/UserManual/Manual.dox index 8324dd0cc1..362d2d5be7 100644 --- a/Plugins/org.mitk.gui.qt.cli/documentation/UserManual/Manual.dox +++ b/Plugins/org.mitk.gui.qt.cli/documentation/UserManual/Manual.dox @@ -1,132 +1,139 @@ /** \bundlemainpage{org.mitk.gui.qt.cli} The Command Line Interface (CLI) View -\image html icon.xpm "Icon of CLI" +\image html CLIIcon.png "Icon of CLI" \li \ref CLIIntroduction \li \ref CLIPreferences \li \ref CLIUsage \li \ref CLITechnicalNotes \section CLIIntroduction Introduction This view provides the facility to run third party command line programs, and load the data back into the DataManager for immediate visualisation. All that is required is that the command line application can be called with an argument of --xml and respond with a valid XML description of the necessary parameters. This view can then generate a Graphical User Interface (GUI) dynamically to enable the user to interact with the command line application. This provides an easy to use, and potentially very flexible way to integrate almost any third party, medical imaging, command line application. As a high level introduction, this view performs the following steps: \li The view searches for available programs to run, and for each valid module, stores the XML document describing the interface, and populates a searchable list of available programs. \li When a program is selected, the GUI is generated. \li The user can then set the necessary parameters and run the program. \li Multiple programs can be launched simultaneously, and where available on the host platform, the user can pause, resume or cancel running jobs and see console output for each job. As a consequence of the very flexible nature of this plugin, these instructions can only describe how to launch command line modules in a general sense. The examples shown have been constructed by downloading the latest version of the NiftyReg package, available here, and described further here. NiftyReg provides valid XML descriptors to enable the integration of the NiftyReg affine (RegAladin) and and non-rigid (RegF3D) image registration algorithms, as well as utility programs to resample an image, and calculate a Jacobian image. These same XML descriptors work within Slicer and MITK based applications. \section CLIPreferences Preferences The first time that the CLI View is launched, it may be necessary to set the default preferences for the view. Please refer to Figure 1. \image html CLIPreferences.png "Figure 1. The CLI Preferences Page" The first 4 preferences are to control where the view will search for valid command line programs. By default these are off as the searching process can take a long time and slow down the startup time of the GUI. The options provided are: \li scan home directory: Scan the users home directory. Most useful on unix systems where users can install their own software. \li scan current directory: This is the current working directory. Most useful on unix systems where users launch the application from the console. \li scan installation directory: This is the directory where the actual application is stored. \li scan CTK_MODULE_LOAD_PATH: If the environment variable CTK_MODULE_LOAD_PATH points to a valid directory, this will also be scanned. In addition, for the first 3 of these options, the sub-directory "cli-modules" will also be scanned if it exists. In most cases, the user will leave these options unchecked, as the user can also specify custom directories, and even cherry-pick specific command line programs to load. Figure 2 shows a selection box that enables the user to specify custom directories to scan, and Figure 3. shows a selection box that enables the user to select specific modules. \image html CLIPreferencesAdditionalDirectories.png "Figure 2. The User can specify specific directories to scan". \image html CLIPreferencesAdditionalModules.png "Figure 3. The User can specify specific command line programs to load". These directory and file selection boxes enable directories or files to be added, removed and updated in a similar fashion. The user must make sure that the list of files selected in the "additional modules" section are not already contained within the directories specified in the "additional module directories" section. In addition, the preferences page provides: \li temporary directory: Images stored in the DataManager are first written to a temporary folder as Nifti images before being passed to each command line program. This temporary directory will default to a platform specific temporary folder, but the user may select their preferred choice of temporary workspace. \li debug output: If checked the view will try to provide more output, either on the console window or event log depending on the host platform. - +\li XML validation mode: The user may select a different mode for XML validation. If this is changed, the applicatioin will +need to be restarted. There are 3 modes available. If the user selects "strict" mode, the XML schema produced by the command line application +must exactly conform to +this definition. For "none", there will be no validation. For "weak" validation, the application will report errors, +but try to carry on and load as many modules as possible. Many third party modules included with Slicer currently have +incorrect XML, and so "weak" mode may assist in loading them. Future work will improve the error reporting. By default +the "strict" mode is chosen so that only valid modules are loaded. + \section CLIUsage Usage When the view is launched, a simple interface is presented, as shown in Figure 4. \image html CLIInitial.png "Figure 4. The initial interface, with no command line programs available." In this example, all the above check-box preferences were off, and the "additional module directories" was empty, and the "additional modules" list was empty so no command line applications were found. The "Search" box displays zero entries, and there is nothing to search. If the available search paths contain programs that are compatible (i.e. runnable) with this view, the name of the programs are displayed in the "Search" box in a nested menu, shown in Figure 5. \image html CLIWithPrograms.png "Figure 5. When valid paths are set, and programs are discovered, the menu is recalculated to show available programs." When a program is selected, the relevant interface is displayed: \image html CLINiftyReg.png "Figure 6. An example program, showing parameters for NiftyReg's program RegAladin." In this example, the parameters are displayed for NiftyReg produced at UCL, and more specifically for the affine registration program called RegAladin. The interface can contain a wide variety of controls. If a parameter for a command line program is an image, then the widget displayed is linked to the DataManager, so that as new images are loaded, the correct image can be easily selected. In addition, the view contains an "About" tab containing details of the contributors, the licence and acknowledgements and also a "Help" tab containing a description and a link to any on-line documentation. These documentation features are provided by the developers of the third party plugin, and not by the host program. If information is missing, the user must contact the third party developers. The view provides some simple controls: \li Green arrow: Launch (run) the current command line executable. \li Yellow undo arrow: Resets the GUI controls to a default value, if and only if the original XML specified a default value. \li Blue pause button: A toggle button to Pause/Resume the running program. \li Red square: Stop (kill / cancel) the running application. Irreversible. \li Black cross: Remove the widget from the display. When the module is launched the parameters are fixed, so the parameters box is disabled. When the command line program is running, it may provide progress updates in the progress bar, or via console output, which can be seen in the console box. Both the parameters box and console box are collapsible to save space. It is possible to launch multiple jobs. The number of widgets just stack vertically, as shown in Figure 7. \image html CLINiftyRegRunning2.png "Figure 7. Multiple programs can be run, each with individual control and console output." \section CLITechnicalNotes Technical Notes From a technical perspective, the Command Line Interface (CLI) View is a simple view, harnessing the power of the CTK command line modules framework. For technical information see: \li The doxygen generated manual page. \li The wiki page. and obviously the CTK code base. */ diff --git a/Plugins/org.mitk.gui.qt.cli/documentation/UserManual/icon.xpm b/Plugins/org.mitk.gui.qt.cli/documentation/UserManual/icon.xpm deleted file mode 100644 index 12b8cfc24b..0000000000 --- a/Plugins/org.mitk.gui.qt.cli/documentation/UserManual/icon.xpm +++ /dev/null @@ -1,706 +0,0 @@ -/* XPM */ -static char * icon_xpm[] = { -"50 52 651 2", -" c None", -". c #CCCECC", -"+ c #D0D3D1", -"@ c #D2D3D2", -"# c #D0D2D0", -"$ c #D3D5D3", -"% c #D1D3D1", -"& c #CACBCA", -"* c #D4D6D5", -"= c #D5D7D5", -"- c #CFD1D0", -"; c #CBCDCB", -"> c #CACDCB", -", c #CBCECC", -"' c #C6C9C6", -") c #C5C8C5", -"! c #C9CBC9", -"~ c #C8CBC8", -"{ c #C6C9C7", -"] c #D6D7D6", -"^ c #D4D5D4", -"/ c #D7D9D7", -"( c #CFD2D0", -"_ c #C7CAC7", -": c #C5C9C6", -"< c #C5C8C6", -"[ c #C6C8C5", -"} c #C4C8C5", -"| c #C4C7C5", -"1 c #C4C7C4", -"2 c #C4C6C4", -"3 c #B6B9B7", -"4 c #A4A6A5", -"5 c #959795", -"6 c #AEB0AF", -"7 c #C9CBC8", -"8 c #C2C4C3", -"9 c #C7C8C7", -"0 c #D0D2D1", -"a c #D1D4D2", -"b c #CFD2CF", -"c c #D2D5D3", -"d c #CED2CF", -"e c #C8CBC9", -"f c #C6CAC7", -"g c #C8CCC9", -"h c #C2C5C2", -"i c #BBBEBB", -"j c #B5B8B6", -"k c #AEB1AF", -"l c #9EA09F", -"m c #878A88", -"n c #717372", -"o c #5B5D5C", -"p c #4B4C4C", -"q c #474747", -"r c #434343", -"s c #2C2D2D", -"t c #5B5C5C", -"u c #BEBFBD", -"v c #C2C4C2", -"w c #C0C2C0", -"x c #D9D9DA", -"y c #D6D8D6", -"z c #D6D9D6", -"A c #CACECB", -"B c #CBCECB", -"C c #C7CCC9", -"D c #C7CBC8", -"E c #C9CDCA", -"F c #BDC1BE", -"G c #B0B2B0", -"H c #A2A4A3", -"I c #7D7F7E", -"J c #656766", -"K c #4D4F4E", -"L c #353636", -"M c #252525", -"N c #363737", -"O c #4E4E4E", -"P c #646464", -"Q c #797979", -"R c #868686", -"S c #8B8B8B", -"T c #8F8F8F", -"U c #7F7F7F", -"V c #C2C3C1", -"W c #BEC0BE", -"X c #CFD0CF", -"Y c #C2C5C3", -"Z c #C0C3C1", -"` c #B0B3B1", -" . c #9FA1A0", -".. c #8A8C8B", -"+. c #797B79", -"@. c #636565", -"#. c #535453", -"$. c #424343", -"%. c #323232", -"&. c #232424", -"*. c #383838", -"=. c #5B5B5B", -"-. c #7B7B7B", -";. c #9B9B9B", -">. c #B2B2B2", -",. c #AFAFAF", -"'. c #AAAAAA", -"). c #A5A5A5", -"!. c #A0A0A0", -"~. c #9C9C9C", -"{. c #989898", -"]. c #949494", -"^. c #4B4B4B", -"/. c #949595", -"(. c #C1C2C0", -"_. c #BFC0BF", -":. c #ACADAC", -"<. c #CACFCC", -"[. c #C1C5C3", -"}. c #B9BCBA", -"|. c #B1B4B1", -"1. c #A7AAA8", -"2. c #949695", -"3. c #7B7D7C", -"4. c #656765", -"5. c #4C4D4D", -"6. c #3F403F", -"7. c #464747", -"8. c #4F504F", -"9. c #585858", -"0. c #5F5F5F", -"a. c #6C6C6C", -"b. c #828282", -"c. c #979797", -"d. c #ABABAB", -"e. c #BDBDBD", -"f. c #BBBBBB", -"g. c #B5B5B5", -"h. c #A9A9A9", -"i. c #A4A4A4", -"j. c #959595", -"k. c #929292", -"l. c #8E8E8E", -"m. c #8A8A8A", -"n. c #888888", -"o. c #5D5D5D", -"p. c #777777", -"q. c #C3C4C2", -"r. c #C0C1BF", -"s. c #B1B2B1", -"t. c #B2B6B4", -"u. c #787A78", -"v. c #5C5E5D", -"w. c #444545", -"x. c #2D2D2D", -"y. c #202120", -"z. c #3D3D3D", -"A. c #606060", -"B. c #838383", -"C. c #B7B7B7", -"D. c #B8B8B8", -"E. c #BABABA", -"F. c #BEBEBE", -"G. c #B4B4B4", -"H. c #B0B0B0", -"I. c #A8A8A8", -"J. c #9D9D9D", -"K. c #9A9A9A", -"L. c #969696", -"M. c #8C8C8C", -"N. c #818181", -"O. c #7D7D7D", -"P. c #585959", -"Q. c #CACAC9", -"R. c #BEC0BD", -"S. c #B3B4B3", -"T. c #5A5C5B", -"U. c #1C1C1C", -"V. c #707070", -"W. c #9E9E9E", -"X. c #C4C4C4", -"Y. c #DEDEDE", -"Z. c #DADADA", -"`. c #D4D4D4", -" + c #CDCDCD", -".+ c #C7C7C7", -"++ c #C2C2C2", -"@+ c #ADADAD", -"#+ c #A1A1A1", -"$+ c #909090", -"%+ c #898989", -"&+ c #858585", -"*+ c #7E7E7E", -"=+ c #737373", -"-+ c #414142", -";+ c #C5C6C5", -">+ c #BEBEBC", -",+ c #BCBBBA", -"'+ c #C7CAC8", -")+ c #2D2E2D", -"!+ c #E0E0E0", -"~+ c #D5D5D5", -"{+ c #CFCFCF", -"]+ c #CACACA", -"^+ c #C6C6C6", -"/+ c #C3C3C3", -"(+ c #BFBFBF", -"_+ c #BCBCBC", -":+ c #B1B1B1", -"<+ c #A6A6A6", -"[+ c #A3A3A3", -"}+ c #8D8D8D", -"|+ c #747474", -"1+ c #696969", -"2+ c #626262", -"3+ c #313131", -"4+ c #B4B5B4", -"5+ c #BFBEBD", -"6+ c #BDBDBC", -"7+ c #373837", -"8+ c #CCCCCC", -"9+ c #C0C0C0", -"0+ c #B9B9B9", -"a+ c #AEAEAE", -"b+ c #919191", -"c+ c #878787", -"d+ c #787878", -"e+ c #717171", -"f+ c #6D6D6D", -"g+ c #6A6A6A", -"h+ c #666666", -"i+ c #636363", -"j+ c #5C5C5C", -"k+ c #989998", -"l+ c #C5C4C3", -"m+ c #BDBCBB", -"n+ c #C3C6C4", -"o+ c #565656", -"p+ c #C8C8C8", -"q+ c #ACACAC", -"r+ c #999999", -"s+ c #848484", -"t+ c #808080", -"u+ c #757575", -"v+ c #727272", -"w+ c #6F6F6F", -"x+ c #6B6B6B", -"y+ c #676767", -"z+ c #595959", -"A+ c #575757", -"B+ c #535353", -"C+ c #292929", -"D+ c #6A6B6A", -"E+ c #C9C9C8", -"F+ c #BCBCBA", -"G+ c #B4B3B3", -"H+ c #C3C5C3", -"I+ c #C7C9C7", -"J+ c #707170", -"K+ c #B3B3B3", -"L+ c #F4F4F4", -"M+ c #F2F2F2", -"N+ c #E4E4E4", -"O+ c #767676", -"P+ c #686868", -"Q+ c #5A5A5A", -"R+ c #555555", -"S+ c #464646", -"T+ c #303030", -"U+ c #212121", -"V+ c #131313", -"W+ c #C5C5C4", -"X+ c #BBBAB9", -"Y+ c #B9B7B7", -"Z+ c #B2B4B2", -"`+ c #C7C8C6", -" @ c #878886", -".@ c #EBEBEB", -"+@ c #FFFFFF", -"@@ c #FEFEFE", -"#@ c #FCFCFC", -"$@ c #E8E8E8", -"%@ c #656565", -"&@ c #5E5E5E", -"*@ c #181818", -"=@ c #101010", -"-@ c #111111", -";@ c #121212", -">@ c #B7B8B7", -",@ c #BCBAB9", -"'@ c #B8B7B6", -")@ c #BABCBA", -"!@ c #A3A5A3", -"~@ c #363636", -"{@ c #9F9F9F", -"]@ c #A2A2A2", -"^@ c #CECECE", -"/@ c #F5F5F5", -"(@ c #0F0F0F", -"_@ c #B8B6B6", -":@ c #B2B3B1", -"<@ c #BDBFBD", -"[@ c #1A1A1A", -"}@ c #545454", -"|@ c #3C3C3C", -"1@ c #202020", -"2@ c #161616", -"3@ c #7F7F80", -"4@ c #B8B6B5", -"5@ c #B2B1B0", -"6@ c #C0C1C0", -"7@ c #CCCDCB", -"8@ c #C1C1C1", -"9@ c #F8F8F8", -"0@ c #F6F6F6", -"a@ c #A7A7A7", -"b@ c #525252", -"c@ c #393939", -"d@ c #171717", -"e@ c #616261", -"f@ c #BAB8B7", -"g@ c #B7B5B4", -"h@ c #B1B0AF", -"i@ c #343434", -"j@ c #DCDCDC", -"k@ c #CBCBCB", -"l@ c #4A4A4A", -"m@ c #BBB9B8", -"n@ c #B7B4B3", -"o@ c #B0AEAD", -"p@ c #BFBFBE", -"q@ c #C6C6C4", -"r@ c #50504F", -"s@ c #F3F3F3", -"t@ c #7A7A7A", -"u@ c #1B1B1B", -"v@ c #2C2C2C", -"w@ c #B4B3B2", -"x@ c #B5B2B2", -"y@ c #B4B2B2", -"z@ c #B8B8B7", -"A@ c #C3C3C2", -"B@ c #676766", -"C@ c #4C4C4C", -"D@ c #6E6E6E", -"E@ c #D7D7D7", -"F@ c #ECECEC", -"G@ c #FAFAFA", -"H@ c #232323", -"I@ c #A4A3A3", -"J@ c #B5B2B1", -"K@ c #B5B1B1", -"L@ c #C0C0BF", -"M@ c #828181", -"N@ c #3A3A3A", -"O@ c #FDFDFD", -"P@ c #DBDBDB", -"Q@ c #444444", -"R@ c #8A8B8A", -"S@ c #BAB7B7", -"T@ c #B4B1B0", -"U@ c #ADABAB", -"V@ c #B8B8B6", -"W@ c #BDBDBB", -"X@ c #9C9B9A", -"Y@ c #2B2B2B", -"Z@ c #4F4F4F", -"`@ c #484848", -" # c #424242", -".# c #494949", -"+# c #272727", -"@# c #1F1F1F", -"## c #141414", -"$# c #0D0D0D", -"%# c #636463", -"&# c #C3C0C0", -"*# c #B3AFAF", -"=# c #ABA8A9", -"-# c #B5B4B3", -";# c #222222", -"># c #454545", -",# c #414141", -"'# c #3E3E3E", -")# c #1D1D1D", -"!# c #3C3D3D", -"~# c #B2ADAD", -"{# c #B2AFAF", -"]# c #B5B3B2", -"^# c #2A2A2A", -"/# c #3F3F3F", -"(# c #3B3B3B", -"_# c #373737", -":# c #353535", -"<# c #282828", -"[# c #151515", -"}# c #B5B5B4", -"|# c #B3AEAF", -"1# c #B2ADAE", -"2# c #B3B2B1", -"3# c #333333", -"4# c #0C0C0C", -"5# c #9B9C9C", -"6# c #B9B4B3", -"7# c #B2ACAD", -"8# c #A8A6A6", -"9# c #3F3F3E", -"0# c #2F2F2F", -"a# c #2E2E2E", -"b# c #262626", -"c# c #BCB8B8", -"d# c #B0ABAB", -"e# c #ACA9A9", -"f# c #4D4C4C", -"g# c #242424", -"h# c #BAB6B7", -"i# c #B0AAAB", -"j# c #AEA9A9", -"k# c #B6B3B3", -"l# c #5A5959", -"m# c #B2AFB0", -"n# c #AFA9AA", -"o# c #ADA8A9", -"p# c #B6B3B2", -"q# c #B6B3B4", -"r# c #6B6A6A", -"s# c #A3A2A2", -"t# c #AEA7A9", -"u# c #7A7878", -"v# c #161717", -"w# c #8B8A8B", -"x# c #AFA8A9", -"y# c #ACA7A8", -"z# c #B4B0B0", -"A# c #858383", -"B# c #717271", -"C# c #ACA5A6", -"D# c #A6A3A4", -"E# c #B2AEAE", -"F# c #939091", -"G# c #191919", -"H# c #525352", -"I# c #B6B0B1", -"J# c #ABA3A4", -"K# c #A9A3A4", -"L# c #B4AFB0", -"M# c #A29E9E", -"N# c #1D1C1C", -"O# c #343535", -"P# c #B7B4B4", -"Q# c #A9A1A3", -"R# c #ACA6A7", -"S# c #B3AEAE", -"T# c #ADA9AA", -"U# c #1E1F1F", -"V# c #ADABAC", -"W# c #AAA1A2", -"X# c #ACA4A5", -"Y# c #BAB5B5", -"Z# c #242323", -"`# c #A1A0A0", -" $ c #A9A0A2", -".$ c #B3ABAD", -"+$ c #8E908F", -"@$ c #B0ABAC", -"#$ c #B8B3B3", -"$$ c #171616", -"%$ c #515151", -"&$ c #A59D9F", -"*$ c #A99FA1", -"=$ c #767A79", -"-$ c #545252", -";$ c #0E0E0E", -">$ c #0D0E0E", -",$ c #090A0A", -"'$ c #312F2F", -")$ c #403E3F", -"!$ c #4F4B4C", -"~$ c #646061", -"{$ c #777172", -"]$ c #8D8688", -"^$ c #A1989A", -"/$ c #AFA5A7", -"($ c #A79EA0", -"_$ c #B2A9AB", -":$ c #666A69", -"<$ c #B4AEAE", -"[$ c #6C6969", -"}$ c #0B0B0B", -"|$ c #090909", -"1$ c #312F30", -"2$ c #4D4A4B", -"3$ c #6B6768", -"4$ c #898384", -"5$ c #968E90", -"6$ c #9A9395", -"7$ c #9F9899", -"8$ c #A59C9F", -"9$ c #AAA1A3", -"0$ c #AAA0A2", -"a$ c #AEA5A7", -"b$ c #C1B9BB", -"c$ c #919190", -"d$ c #5A615F", -"e$ c #ADA7A8", -"f$ c #B2ABAC", -"g$ c #858081", -"h$ c #0A0B0B", -"i$ c #141313", -"j$ c #181718", -"k$ c #1C1B1C", -"l$ c #201F1F", -"m$ c #292828", -"n$ c #454343", -"o$ c #666263", -"p$ c #817B7D", -"q$ c #A29A9C", -"r$ c #B2AAAC", -"s$ c #AFA6A8", -"t$ c #ADA4A6", -"u$ c #ACA3A5", -"v$ c #A9A1A2", -"w$ c #ABA2A4", -"x$ c #A7A0A2", -"y$ c #B0AAAC", -"z$ c #B4AEB0", -"A$ c #A8A5A6", -"B$ c #868987", -"C$ c #606563", -"D$ c #585E5C", -"E$ c #3D413F", -"F$ c #9F9A9B", -"G$ c #040505", -"H$ c #0E0F0F", -"I$ c #0C0D0D", -"J$ c #0A0A0A", -"K$ c #070808", -"L$ c #272626", -"M$ c #3B393A", -"N$ c #4E4B4C", -"O$ c #625E5F", -"P$ c #736E6F", -"Q$ c #847E7F", -"R$ c #948D8F", -"S$ c #A49C9E", -"T$ c #ABA2A3", -"U$ c #B8B0B2", -"V$ c #B9B1B3", -"W$ c #AEA8A9", -"X$ c #A4A1A1", -"Y$ c #9A9898", -"Z$ c #878887", -"`$ c #7E8180", -" % c #777B7A", -".% c #676C6A", -"+% c #5D6361", -"@% c #5B625F", -"#% c #575D5B", -"$% c #4B514F", -"%% c #404443", -"&% c #343836", -"*% c #BBB6B7", -"=% c #B0A9AA", -"-% c #484647", -";% c #383636", -">% c #565253", -",% c #787374", -"'% c #968F90", -")% c #A29B9C", -"!% c #A69FA1", -"~% c #AAA1A4", -"{% c #ADA5A7", -"]% c #BCB4B7", -"^% c #BFB8B9", -"/% c #A09F9F", -"(% c #8E8F8F", -"_% c #707372", -":% c #626766", -"<% c #616664", -"[% c #606664", -"}% c #5F6563", -"|% c #5E6462", -"1% c #5D6462", -"2% c #5B615F", -"3% c #484D4C", -"4% c #353938", -"5% c #232625", -"6% c #151616", -"7% c #080909", -"8% c #B6B0B0", -"9% c #ACA4A6", -"0% c #B1AAAB", -"a% c #B5ADAF", -"b% c #B0A8A9", -"c% c #ABA3A5", -"d% c #AEA6A8", -"e% c #B1A9AA", -"f% c #AFA7A9", -"g% c #ABA4A6", -"h% c #A7A1A2", -"i% c #ABA7A8", -"j% c #949593", -"k% c #838684", -"l% c #696D6C", -"m% c #575E5B", -"n% c #555C5A", -"o% c #515755", -"p% c #4F5452", -"q% c #4D5251", -"r% c #4B504E", -"s% c #404442", -"t% c #313433", -"u% c #1E201F", -"v% c #0D0E0D", -"w% c #B9B3B4", -"x% c #B4ABAD", -"y% c #BDB5B7", -"z% c #BCB5B7", -"A% c #AFABAB", -"B% c #A5A2A2", -"C% c #949392", -"D% c #868786", -"E% c #7B7E7D", -"F% c #767A78", -"G% c #707473", -"H% c #656B69", -"I% c #575D5A", -"J% c #494E4C", -"K% c #3C403E", -"L% c #2F3231", -"M% c #2B2E2D", -"N% c #252726", -"O% c #222524", -"P% c #343736", -"Q% c #858887", -"R% c #969796", -"S% c #848786", -"T% c #6A6E6D", -"U% c #5C6260", -"V% c #595F5D", -"W% c #464B49", -"X% c #323634", -"Y% c #202221", -"Z% c #010101", -"`% c #282C2B", -" & c #434846", -".& c #464B4A", -"+& c #424745", -"@& c #3B3F3E", -"#& c #2D2F2E", -"$& c #1D1F1F", -"%& c #0A0B0A", -" ", -" ", -" ", -" . + @ # $ % & ", -" * = $ - ; > , > ' ) ' ! ~ { ; ", -" = ] ^ / ( _ : < < [ } | 1 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 t u v w ", -" x ] y z ( A B , A C D g E > > F G H 5 I J K L M N O P Q R S T U M 6 V W ", -" X c g D D D D f : | Y Z ` ...+.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.{.].].^./.(._.:. ", -" { A g <.[.}.|.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. ", -" D g t.u.v.w.x.y.z.A.B.i.C.D.E.e.F.f.C.G.H.d.I.).!.J.K.L.k.T M.n.B.N.O.P P.Q.R.S. ", -" ' _ T.U.V.W.X.Y.Z.`. +.+++F.f.C.G.H.@+h.).#+W.;.c.].$+M.%+&+N.*+-.p.=+P -+;+>+,+ ", -" : '+)+@+!+~+{+]+^+/+(+_+D.G.:+@+h.<+[+W.;.{.].$+}+%+&+b.U -.p.|+V.a.1+2+3+4+5+6+ ", -" 1 B 7+^+8+^+X.9+F.0+g.>.a+'.<+[+!.~.{.j.b+}+m.c+B.U -.d+|+e+f+g+h+i+0.j+M k+l+m+@+ ", -" n+e o+W./+F.E.f.p+(+G.q+<+#+J.r+L.k.l.S n.s+t+O.Q u+v+w+x+y+P A.j+z+A+B+C+D+E+F+G+ ", -" H+I+J+d+_+K+H.C.L+M+N+ +K+i.K.k.M.n.s+N.O.Q O+=+w+x+P+P A.o.Q+A+R+S+T+U+V+$.W+X+Y+ ", -" Z+`+ @o+K+h.<+d..@+@@@+@#@$@++j.b.*+-.p.=+V.a.P+%@2+&@Q+A+B+^.%.*@=@-@;@=@M >@,@'@ ", -" )@H+!@~@'.{@~.;.]@0+^@N+/@+@+@G.-.|+V.f+g+h+2+0.=.z+R+S+~@U+=@(@-@;@;@;@-@;@#+,+_@ ", -" :@V <@[@]@L.k.l.S }+{.G..@@@+@'.V.g+y+i+A.j+9.o+}@|@1@2@-@-@-@;@;@;@;@;@;@;@3@,+4@5@ ", -" 6@7@2@l.S n.s+n.K.8@9@+@0@a@w+P A.j+z+o+b@^.c@d@(@-@;@;@;@;@;@;@;@;@;@;@;@e@f@g@h@ ", -" r.E+i@O+b.O.-.T j@+@+@k@b.%@&@=.z+9.A+l@3+[@(@-@;@;@;@;@;@;@;@;@;@;@;@;@;@$.m@n@o@ ", -" p@q@r@A.p.|+=+M.s@s@{.f+i+%@1+f+=+t@u+o+u@-@-@;@;@;@;@;@;@;@;@;@;@;@;@;@-@v@w@x@y@ ", -" z@A@B@C@D@g+y+v+I.u+o.z+v+i.8@E@F@G@+@8@H@-@-@;@;@;@;@;@;@;@;@;@;@;@;@;@-@U.I@J@K@ ", -" z@L@M@N@P A.j+=.A+b@O O t@O@P@_+{@&+x+Q@d@-@-@;@;@;@;@;@;@;@;@;@;@;@;@;@-@-@R@S@T@U@ ", -" V@W@X@Y@Q+o+b@Z@^.`@Q@ #^..#3++#@#[@d@##;@-@;@;@;@;@;@;@;@;@;@;@;@;@;@;@-@$#%#&#*#=# ", -" -#X+5@;#Z@C@`@>#,#'#N@%.)#=@-@-@-@-@-@-@-@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@(@!#&#~#{# ", -" ]#m@5@^#r #/#(#_#:#<#[#-@-@-@-@-@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@=@y.}#|#1# ", -" f@2#3#c@c@i@3+x.@#-@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@-@4#5#6#7#8# ", -" 4@y@9#0#a#Y@b#[@-@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@4#J+c#d#e# ", -" g@]#f#g#M 1@[#-@-@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@(@p h#i#j# ", -" k#k#l#[@[@V+-@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@-@a#m#n#o# ", -" p#q#r#;@;@-@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@u@s#n#t# ", -" x@p#u###-@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@v#w#x#y# ", -" z#x@A#2@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@V+B#n#C#D# ", -" E#z#F#G#;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@-@H#I#J#K# ", -" L#L#M#N#;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@-@O#P#Q#R# ", -" S#T#@#;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@-@U#V#W#X# ", -" 1#Y#Z#-@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@-@)#`# $.$+$ ", -" @$#$|@=@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@-@-@-@-@-@;@##[#$$%$&$*$@$=$ ", -" d#I#-$;$;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@-@(@>$4#,$V+;#'$)$!$~${$]$^$/$($_$n.:$ ", -" x#<$[$4#;@;@;@;@;@;@;@;@;@;@;@;@;@;@;@-@(@$#}$|$-@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$t$u$v$9$u$w$Q#x$y$z$A$;.B$C$D$E$ ", -" R#x#F$G$;@-@H$I$J$K$[#L$M$N$O$P$Q$R$S$r$s$t$u$T$a$U$V$W$X$Y$T Z$`$ %.%+%@%#%$%%%&% ", -" *%C#=%-%K$v#;%>%,%'%)%S$!%v$J#~%Q#v$9${%]%^%E#/%(%_%:%<%[%}%|%1%2%3%4%5%6%7% ", -" 8%9%0%f$a%r$b%{%c%d%e%f%g%h%y#i%/%j%k%l%m%m%n%o%p%q%r%s%t%u%v% ", -" w%x%u$_$y%z%A%B%C%D%E%F%G%H%|%+%I%J%K%L%M%N%O% ", -" P%Q%R%S%T%+%U%U%U%U%U%V%W%X%Y%;$Z% ", -" `% &J%3%.&+&@&#&$&%& ", -" ", -" ", -" ", -" "};