Namespace that encompasses low-level functions and variables of the CImg Library. More...
Classes | |
struct | type |
struct | type< bool > |
struct | type< unsigned char > |
struct | type< char > |
struct | type< unsigned short > |
struct | type< short > |
struct | type< unsigned int > |
struct | type< int > |
struct | type< unsigned long > |
struct | type< long > |
struct | type< float > |
struct | type< double > |
struct | superset |
struct | superset< bool, unsigned char > |
struct | superset< bool, char > |
struct | superset< bool, unsigned short > |
struct | superset< bool, short > |
struct | superset< bool, unsigned int > |
struct | superset< bool, int > |
struct | superset< bool, unsigned long > |
struct | superset< bool, long > |
struct | superset< bool, float > |
struct | superset< bool, double > |
struct | superset< unsigned char, char > |
struct | superset< unsigned char, unsigned short > |
struct | superset< unsigned char, short > |
struct | superset< unsigned char, unsigned int > |
struct | superset< unsigned char, int > |
struct | superset< unsigned char, unsigned long > |
struct | superset< unsigned char, long > |
struct | superset< unsigned char, float > |
struct | superset< unsigned char, double > |
struct | superset< char, unsigned char > |
struct | superset< char, unsigned short > |
struct | superset< char, short > |
struct | superset< char, unsigned int > |
struct | superset< char, int > |
struct | superset< char, unsigned long > |
struct | superset< char, long > |
struct | superset< char, float > |
struct | superset< char, double > |
struct | superset< unsigned short, char > |
struct | superset< unsigned short, short > |
struct | superset< unsigned short, unsigned int > |
struct | superset< unsigned short, int > |
struct | superset< unsigned short, unsigned long > |
struct | superset< unsigned short, long > |
struct | superset< unsigned short, float > |
struct | superset< unsigned short, double > |
struct | superset< short, unsigned short > |
struct | superset< short, unsigned int > |
struct | superset< short, int > |
struct | superset< short, unsigned long > |
struct | superset< short, long > |
struct | superset< short, float > |
struct | superset< short, double > |
struct | superset< unsigned int, char > |
struct | superset< unsigned int, short > |
struct | superset< unsigned int, int > |
struct | superset< unsigned int, unsigned long > |
struct | superset< unsigned int, long > |
struct | superset< unsigned int, float > |
struct | superset< unsigned int, double > |
struct | superset< int, unsigned int > |
struct | superset< int, unsigned long > |
struct | superset< int, long > |
struct | superset< int, float > |
struct | superset< int, double > |
struct | superset< unsigned long, char > |
struct | superset< unsigned long, short > |
struct | superset< unsigned long, int > |
struct | superset< unsigned long, long > |
struct | superset< unsigned long, float > |
struct | superset< unsigned long, double > |
struct | superset< long, float > |
struct | superset< long, double > |
struct | superset< float, double > |
struct | superset2 |
struct | last |
struct | superset< double, std::complex< double > > |
Functions | |
void | info () |
Print informations about CImg environement variables. | |
unsigned int & | exception_mode () |
int | dialog (const char *title, const char *msg, const char *button1_txt="OK", const char *button2_txt=0, const char *button3_txt=0, const char *button4_txt=0, const char *button5_txt=0, const char *button6_txt=0, const bool centering=false) |
template<typename tfunc , typename tp , typename tf > | |
void | marching_cubes (const tfunc &func, const float isovalue, const float x0, const float y0, const float z0, const float x1, const float y1, const float z1, const float resx, const float resy, const float resz, CImgList< tp > &points, CImgList< tf > &primitives, const bool invert_faces) |
Polygonize an implicit function. | |
template<typename tfunc , typename tp , typename tf > | |
void | marching_squares (const tfunc &func, const float isovalue, const float x0, const float y0, const float x1, const float y1, const float resx, const float resy, CImgList< tp > &points, CImgList< tf > &primitives) |
Polygonize an implicit 2D function by the marching squares algorithm. | |
void | warn (const char *format,...) |
int | xln (const int x) |
char | uncase (const char x) |
float | atof (const char *str) |
int | strlen (const char *s) |
int | strncmp (const char *s1, const char *s2, const int l) |
int | strncasecmp (const char *s1, const char *s2, const int l) |
int | strcmp (const char *s1, const char *s2) |
int | strcasecmp (const char *s1, const char *s2) |
int | strfind (const char *s, const char c) |
const char * | basename (const char *s) |
bool | endian () |
Return false for little endian CPUs (Intel), true for big endian CPUs (Motorola). | |
unsigned long | time () |
Get the value of a system timer with a millisecond precision. | |
void | sleep (const unsigned int milliseconds) |
Sleep for a certain numbers of milliseconds. | |
unsigned int | wait (const unsigned int milliseconds, unsigned long &timer) |
unsigned int | wait (const unsigned int milliseconds) |
Wait for a certain number of milliseconds since the last call. | |
void | srand () |
const char *const | filenamerand () |
void | system (const char *command, const char *module_name=0) |
void | winformat_string (char *const) |
const char * | imagemagick_path () |
Return path of the ImageMagick's convert tool. | |
const char * | graphicsmagick_path () |
Return path of the GraphicsMagick's gm tool. | |
const char * | medcon_path () |
Return path of the XMedcon tool. | |
const char * | temporary_path () |
Return path to store temporary files. | |
const char * | filename_split (const char *const filename, char *const body=0) |
char * | filename_number (const char *const filename, const int number, const unsigned int n, char *const string) |
std::FILE * | fopen (const char *const path, const char *const mode) |
int | fclose (std::FILE *file) |
template<typename T > | |
int | fread (T *const ptr, const unsigned int nmemb, std::FILE *stream) |
template<typename T > | |
int | fwrite (const T *ptr, const unsigned int nmemb, std::FILE *stream) |
template<typename T > | |
void | swap (T &a, T &b) |
template<typename T1 , typename T2 > | |
void | swap (T1 &a1, T1 &b1, T2 &a2, T2 &b2) |
template<typename T1 , typename T2 , typename T3 > | |
void | swap (T1 &a1, T1 &b1, T2 &a2, T2 &b2, T3 &a3, T3 &b3) |
template<typename T1 , typename T2 , typename T3 , typename T4 > | |
void | swap (T1 &a1, T1 &b1, T2 &a2, T2 &b2, T3 &a3, T3 &b3, T4 &a4, T4 &b4) |
template<typename T1 , typename T2 , typename T3 , typename T4 , typename T5 > | |
void | swap (T1 &a1, T1 &b1, T2 &a2, T2 &b2, T3 &a3, T3 &b3, T4 &a4, T4 &b4, T5 &a5, T5 &b5) |
template<typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 > | |
void | swap (T1 &a1, T1 &b1, T2 &a2, T2 &b2, T3 &a3, T3 &b3, T4 &a4, T4 &b4, T5 &a5, T5 &b5, T6 &a6, T6 &b6) |
template<typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 > | |
void | swap (T1 &a1, T1 &b1, T2 &a2, T2 &b2, T3 &a3, T3 &b3, T4 &a4, T4 &b4, T5 &a5, T5 &b5, T6 &a6, T6 &b6, T7 &a7, T7 &b7) |
template<typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 > | |
void | swap (T1 &a1, T1 &b1, T2 &a2, T2 &b2, T3 &a3, T3 &b3, T4 &a4, T4 &b4, T5 &a5, T5 &b5, T6 &a6, T6 &b6, T7 &a7, T7 &b7, T8 &a8, T8 &b8) |
template<typename T > | |
void | endian_swap (T *const buffer, const unsigned int size) |
template<typename T > | |
T & | endian_swap (T &a) |
const char * | option (const char *const name, const int argc, char **argv, const char *defaut, const char *const usage=0) |
bool | option (const char *const name, const int argc, char **argv, const bool defaut, const char *const usage=0) |
int | option (const char *const name, const int argc, char **argv, const int defaut, const char *const usage=0) |
char | option (const char *const name, const int argc, char **argv, const char defaut, const char *const usage=0) |
float | option (const char *const name, const int argc, char **argv, const float defaut, const char *const usage=0) |
double | option (const char *const name, const int argc, char **argv, const double defaut, const char *const usage=0) |
const char * | argument (const unsigned int nb, const int argc, char **argv, const unsigned int nb_singles=0,...) |
template<typename T > | |
const T | rol (const T a, const unsigned int n=1) |
template<typename T > | |
const T | ror (const T a, const unsigned int n=1) |
template<typename T > | |
T | abs (const T a) |
Return the absolute value of a . | |
bool | abs (const bool a) |
unsigned char | abs (const unsigned char a) |
unsigned short | abs (const unsigned short a) |
unsigned int | abs (const unsigned int a) |
unsigned long | abs (const unsigned long a) |
double | abs (const double a) |
float | abs (const float a) |
int | abs (const int a) |
template<typename T > | |
T | sqr (const T val) |
template<typename T > | |
T | min (const T a, const T b) |
Return the minimum between a and b . | |
template<typename T > | |
T | min (const T a, const T b, const T c) |
Return the minimum between a ,b and c. | |
template<typename T > | |
T | min (const T a, const T b, const T c, const T d) |
Return the minimum between a ,b ,c and d . | |
template<typename T > | |
T | max (const T a, const T b) |
Return the maximum between a and b . | |
template<typename T > | |
T | max (const T a, const T b, const T c) |
Return the maximum between a ,b and c . | |
template<typename T > | |
T | max (const T a, const T b, const T c, const T d) |
Return the maximum between a ,b ,c and d . | |
template<typename T > | |
T | sign (const T x) |
Return the sign of x . | |
template<typename T > | |
unsigned long | nearest_pow2 (const T x) |
Return the nearest power of 2 higher than x . | |
template<typename T > | |
T | mod (const T &x, const T &m) |
Return x modulo m (generic modulo). | |
int | mod (const char x, const char m) |
int | mod (const short x, const short m) |
int | mod (const int x, const int m) |
int | mod (const long x, const long m) |
int | mod (const unsigned char x, const unsigned char m) |
int | mod (const unsigned short x, const unsigned short m) |
int | mod (const unsigned int x, const unsigned int m) |
int | mod (const unsigned long x, const unsigned long m) |
template<typename T > | |
T | minmod (const T a, const T b) |
Return minmod(a ,b ). | |
double | rand () |
Return a random variable between [0,1], followin a uniform distribution. | |
double | crand () |
Return a random variable between [-1,1], following a uniform distribution. | |
double | grand () |
Return a random variable following a gaussian distribution and a standard deviation of 1. | |
double | round (const double x, const double y, const unsigned int round_type=0) |
Return a rounded number. | |
double | pythagore (double a, double b) |
template<typename t > | |
int | dialog (const char *title, const char *msg, const char *button1_txt, const char *button2_txt, const char *button3_txt, const char *button4_txt, const char *button5_txt, const char *button6_txt, const CImg< t > &logo, const bool centering=false) |
Display a dialog box, where a user can click standard buttons. | |
template<typename t > | |
int | _marching_cubes_indice (const unsigned int edge, const CImg< t > &indices1, const CImg< t > &indices2, const unsigned int x, const unsigned int y, const unsigned int nx, const unsigned int ny) |
template<typename t > | |
int | _marching_squares_indice (const unsigned int edge, const CImg< t > &indices1, const CImg< t > &indices2, const unsigned int x, const unsigned int nx) |
Variables | |
const char | t_normal [] = { '\0' } |
const char *const | t_red = cimg::t_normal |
const char *const *const | t_bold = cimg::t_normal |
const char *const *const *const | t_purple = cimg::t_normal |
const unsigned int | keyESC = 1U |
const unsigned int | keyF1 = 2U |
const unsigned int | keyF2 = 3U |
const unsigned int | keyF3 = 4U |
const unsigned int | keyF4 = 5U |
const unsigned int | keyF5 = 6U |
const unsigned int | keyF6 = 7U |
const unsigned int | keyF7 = 8U |
const unsigned int | keyF8 = 9U |
const unsigned int | keyF9 = 10U |
const unsigned int | keyF10 = 11U |
const unsigned int | keyF11 = 12U |
const unsigned int | keyF12 = 13U |
const unsigned int | keyPAUSE = 14U |
const unsigned int | key1 = 15U |
const unsigned int | key2 = 16U |
const unsigned int | key3 = 17U |
const unsigned int | key4 = 18U |
const unsigned int | key5 = 19U |
const unsigned int | key6 = 20U |
const unsigned int | key7 = 21U |
const unsigned int | key8 = 22U |
const unsigned int | key9 = 23U |
const unsigned int | key0 = 24U |
const unsigned int | keyBACKSPACE = 25U |
const unsigned int | keyINSERT = 26U |
const unsigned int | keyHOME = 27U |
const unsigned int | keyPAGEUP = 28U |
const unsigned int | keyTAB = 29U |
const unsigned int | keyQ = 30U |
const unsigned int | keyW = 31U |
const unsigned int | keyE = 32U |
const unsigned int | keyR = 33U |
const unsigned int | keyT = 34U |
const unsigned int | keyY = 35U |
const unsigned int | keyU = 36U |
const unsigned int | keyI = 37U |
const unsigned int | keyO = 38U |
const unsigned int | keyP = 39U |
const unsigned int | keyDELETE = 40U |
const unsigned int | keyEND = 41U |
const unsigned int | keyPAGEDOWN = 42U |
const unsigned int | keyCAPSLOCK = 43U |
const unsigned int | keyA = 44U |
const unsigned int | keyS = 45U |
const unsigned int | keyD = 46U |
const unsigned int | keyF = 47U |
const unsigned int | keyG = 48U |
const unsigned int | keyH = 49U |
const unsigned int | keyJ = 50U |
const unsigned int | keyK = 51U |
const unsigned int | keyL = 52U |
const unsigned int | keyENTER = 53U |
const unsigned int | keySHIFTLEFT = 54U |
const unsigned int | keyZ = 55U |
const unsigned int | keyX = 56U |
const unsigned int | keyC = 57U |
const unsigned int | keyV = 58U |
const unsigned int | keyB = 59U |
const unsigned int | keyN = 60U |
const unsigned int | keyM = 61U |
const unsigned int | keySHIFTRIGHT = 62U |
const unsigned int | keyARROWUP = 63U |
const unsigned int | keyCTRLLEFT = 64U |
const unsigned int | keyAPPLEFT = 65U |
const unsigned int | keySPACE = 66U |
const unsigned int | keyALTGR = 67U |
const unsigned int | keyAPPRIGHT = 68U |
const unsigned int | keyMENU = 69U |
const unsigned int | keyCTRLRIGHT = 70U |
const unsigned int | keyARROWLEFT = 71U |
const unsigned int | keyARROWDOWN = 72U |
const unsigned int | keyARROWRIGHT = 73U |
const unsigned int | keyPAD0 = 74U |
const unsigned int | keyPAD1 = 75U |
const unsigned int | keyPAD2 = 76U |
const unsigned int | keyPAD3 = 77U |
const unsigned int | keyPAD4 = 78U |
const unsigned int | keyPAD5 = 79U |
const unsigned int | keyPAD6 = 80U |
const unsigned int | keyPAD7 = 81U |
const unsigned int | keyPAD8 = 82U |
const unsigned int | keyPAD9 = 83U |
const unsigned int | keyPADADD = 84U |
const unsigned int | keyPADSUB = 85U |
const unsigned int | keyPADMUL = 86U |
const unsigned int | keyPADDIV = 87U |
const double | PI = 3.14159265358979323846 |
Definition of the mathematical constant PI. | |
const unsigned int | font7x11 [7 *11 *256/32] |
const unsigned int | font10x13 [256 *10 *13/32] |
const unsigned int | font8x17 [8 *17 *256/32] |
const unsigned int | font10x19 [10 *19 *256/32] |
const unsigned int | font12x24 [12 *24 *256/32] |
const unsigned int | font16x32 [16 *32 *256/32] |
const unsigned int | font19x38 [19 *38 *256/32] |
const unsigned int | font29x57 [29 *57 *256/32] |
const unsigned char | logo40x38 [4576] |
Namespace that encompasses low-level functions and variables of the CImg Library.
Most of the functions and variables within this namespace are used by the library for low-level processing. Nevertheless, documented variables and functions of this namespace may be used safely in your own source code.
using namespace cimg_library::cimg;
in your source code, since a lot of functions of the cimg::
namespace have prototypes similar to standard C functions defined in the global namespace ::
. int cimg_library::cimg::dialog | ( | const char * | title, | |
const char * | msg, | |||
const char * | button1_txt, | |||
const char * | button2_txt, | |||
const char * | button3_txt, | |||
const char * | button4_txt, | |||
const char * | button5_txt, | |||
const char * | button6_txt, | |||
const CImg< t > & | logo, | |||
const bool | centering = false | |||
) | [inline] |
Display a dialog box, where a user can click standard buttons.
Up to 6 buttons can be defined in the dialog window. This function returns when a user clicked one of the button or closed the dialog window.
title | = Title of the dialog window. | |
msg | = Main message displayed inside the dialog window. | |
button1_txt | = Label of the 1st button. | |
button2_txt | = Label of the 2nd button. | |
button3_txt | = Label of the 3rd button. | |
button4_txt | = Label of the 4th button. | |
button5_txt | = Label of the 5th button. | |
button6_txt | = Label of the 6th button. | |
logo | = Logo image displayed at the left of the main message. This parameter is optional. | |
centering | = Tell to center the dialog window on the screen. |
const char* cimg_library::cimg::graphicsmagick_path | ( | ) | [inline] |
Return path of the GraphicsMagick's gm
tool.
If you have installed the GraphicsMagick package in a standard directory, this function should return the correct path of the gm
tool used by the CImg Library to load and save compressed image formats. Conversely, if the gm
executable is not auto-detected by the function, you can define the macro cimg_graphicsmagick_path
with the correct path of the gm
executable, before including CImg.h
in your program :
#define cimg_graphicsmagick_path "/users/thatsme/local/bin/gm" #include "CImg.h" int main() { CImg<> img("my_image.jpg"); // Read a JPEG image file. return 0; }
Note that non compressed image formats can be read without installing ImageMagick.
const char* cimg_library::cimg::imagemagick_path | ( | ) | [inline] |
Return path of the ImageMagick's convert
tool.
This function is used internally in imagemagick_path, graphicsmagick_path and medcon_path on Windows platforms If you have installed the ImageMagick package in a standard directory, this function should return the correct path of the convert
tool used by the CImg Library to load and save compressed image formats. Conversely, if the convert
executable is not auto-detected by the function, you can define the macro cimg_imagemagick_path
with the correct path of the convert
executable, before including CImg.h
in your program :
#define cimg_imagemagick_path "/users/thatsme/local/bin/convert" #include "CImg.h" int main() { CImg<> img("my_image.jpg"); // Read a JPEG image file. return 0; }
Note that non compressed image formats can be read without installing ImageMagick.
void cimg_library::cimg::info | ( | ) | [inline] |
Print informations about CImg environement variables.
Printing is done on the standard error output.
const char* cimg_library::cimg::medcon_path | ( | ) | [inline] |
Return path of the XMedcon
tool.
If you have installed the XMedcon package in a standard directory, this function should return the correct path of the medcon
tool used by the CIg Library to load DICOM image formats. Conversely, if the medcon
executable is not auto-detected by the function, you can define the macro cimg_medcon_path
with the correct path of the medcon
executable, before including CImg.h
in your program :
#define cimg_medcon_path "/users/thatsme/local/bin/medcon" #include "CImg.h" int main() { CImg<> img("my_image.dcm"); // Read a DICOM image file. return 0; }
Note that medcon
is only needed if you want to read DICOM image formats.
T cimg_library::cimg::minmod | ( | const T | a, | |
const T | b | |||
) | [inline] |
Return minmod(a
,b
).
The operator minmod(a
,b
) is defined to be :
a
,b
) = min(a
,b
), if (a
* b
)>0.a
,b
) = 0, if (a
* b
)<=0 T cimg_library::cimg::mod | ( | const T & | x, | |
const T & | m | |||
) | [inline] |
Return x
modulo m
(generic modulo).
This modulo function accepts negative and floating-points modulo numbers m
.
void cimg_library::cimg::sleep | ( | const unsigned int | milliseconds | ) | [inline] |
Sleep for a certain numbers of milliseconds.
This function frees the CPU ressources during the sleeping time. It may be used to temporize your program properly, without wasting CPU time.
const char* cimg_library::cimg::temporary_path | ( | ) | [inline] |
Return path to store temporary files.
If you are running on a standard Unix or Windows system, this function should return a correct path where temporary files can be stored. If such a path is not auto-detected by this function, you can define the macro cimg_temporary_path
with a correct path, before including CImg.h
in your program :
#define cimg_temporary_path "/users/thatsme/tmp" #include "CImg.h" int main() { CImg<> img("my_image.jpg"); // Read a JPEG image file (using the defined temporay path). return 0; }
A temporary path is necessary to load and save compressed image formats, using convert
or medcon
.
unsigned int cimg_library::cimg::wait | ( | const unsigned int | milliseconds | ) | [inline] |
const unsigned char cimg_library::cimg::logo40x38[4576] |
{ 177,200,200,200,3,123,123,0,36,200,200,200,1,123,123,0,2,255,255,0,1,189,189,189,1,0,0,0,34,200,200,200, 1,123,123,0,4,255,255,0,1,189,189,189,1,0,0,0,1,123,123,123,32,200,200,200,1,123,123,0,5,255,255,0,1,0,0, 0,2,123,123,123,30,200,200,200,1,123,123,0,6,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,29,200,200,200, 1,123,123,0,7,255,255,0,1,0,0,0,2,123,123,123,28,200,200,200,1,123,123,0,8,255,255,0,1,189,189,189,1,0,0,0, 2,123,123,123,27,200,200,200,1,123,123,0,9,255,255,0,1,0,0,0,2,123,123,123,26,200,200,200,1,123,123,0,10,255, 255,0,1,189,189,189,1,0,0,0,2,123,123,123,25,200,200,200,1,123,123,0,3,255,255,0,1,189,189,189,3,0,0,0,1,189, 189,189,3,255,255,0,1,0,0,0,2,123,123,123,24,200,200,200,1,123,123,0,4,255,255,0,5,0,0,0,3,255,255,0,1,189, 189,189,1,0,0,0,2,123,123,123,23,200,200,200,1,123,123,0,4,255,255,0,5,0,0,0,4,255,255,0,1,0,0,0,2,123,123,123, 22,200,200,200,1,123,123,0,5,255,255,0,5,0,0,0,4,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,21,200,200,200, 1,123,123,0,5,255,255,0,5,0,0,0,5,255,255,0,1,0,0,0,2,123,123,123,20,200,200,200,1,123,123,0,6,255,255,0,5,0,0, 0,5,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,19,200,200,200,1,123,123,0,6,255,255,0,1,123,123,0,3,0,0,0,1, 123,123,0,6,255,255,0,1,0,0,0,2,123,123,123,18,200,200,200,1,123,123,0,7,255,255,0,1,189,189,189,3,0,0,0,1,189, 189,189,6,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,17,200,200,200,1,123,123,0,8,255,255,0,3,0,0,0,8,255,255, 0,1,0,0,0,2,123,123,123,16,200,200,200,1,123,123,0,9,255,255,0,1,123,123,0,1,0,0,0,1,123,123,0,8,255,255,0,1,189, 189,189,1,0,0,0,2,123,123,123,15,200,200,200,1,123,123,0,9,255,255,0,1,189,189,189,1,0,0,0,1,189,189,189,9,255,255, 0,1,0,0,0,2,123,123,123,14,200,200,200,1,123,123,0,11,255,255,0,1,0,0,0,10,255,255,0,1,189,189,189,1,0,0,0,2,123, 123,123,13,200,200,200,1,123,123,0,23,255,255,0,1,0,0,0,2,123,123,123,12,200,200,200,1,123,123,0,11,255,255,0,1,189, 189,189,2,0,0,0,1,189,189,189,9,255,255,0,1,189,189,189,1,0,0,0,2,123,123,123,11,200,200,200,1,123,123,0,11,255,255, 0,4,0,0,0,10,255,255,0,1,0,0,0,2,123,123,123,10,200,200,200,1,123,123,0,12,255,255,0,4,0,0,0,10,255,255,0,1,189,189, 189,1,0,0,0,2,123,123,123,9,200,200,200,1,123,123,0,12,255,255,0,1,189,189,189,2,0,0,0,1,189,189,189,11,255,255,0,1, 0,0,0,2,123,123,123,9,200,200,200,1,123,123,0,27,255,255,0,1,0,0,0,3,123,123,123,8,200,200,200,1,123,123,0,26,255, 255,0,1,189,189,189,1,0,0,0,3,123,123,123,9,200,200,200,1,123,123,0,24,255,255,0,1,189,189,189,1,0,0,0,4,123,123, 123,10,200,200,200,1,123,123,0,24,0,0,0,5,123,123,123,12,200,200,200,27,123,123,123,14,200,200,200,25,123,123,123,86, 200,200,200,91,49,124,118,124,71,32,124,95,49,56,114,52,82,121,0}