diff --git a/.gitmodules b/.gitmodules
index 16b4032..2256a67 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,6 @@
[submodule "libs/libft"]
path = libs/libft
url = git@bitbucket.org:hugogogo/libft.git
+[submodule "libs/minilibx-linux"]
+ path = libs/minilibx-linux
+ url = https://github.com/42Paris/minilibx-linux.git
diff --git a/Makefile b/Makefile
index ad1e59c..36ceb9c 100644
--- a/Makefile
+++ b/Makefile
@@ -8,6 +8,7 @@ NAME = cube3d
VPATH = $(D_SRCS)
EXT = c
CC = gcc
+OS = $(shell uname)
# sources
D_SRCS = srcs \
@@ -40,7 +41,11 @@ INCLUDES = -I$(D_HEADERS) -I$(D_LFT) -I$(D_LMLX)
# libraries
D_LIB = libs
D_LFT = $(D_LIB)/libft
-D_LMLX = $(D_LIB)/minilibx-linux-master
+ifeq (${OS}, Linux)
+D_LMLX = $(D_LIB)/minilibx-linux
+else
+D_LMLX = $(D_LIB)/minilibx-linux
+endif
# objects
D_OBJS = builds
@@ -72,6 +77,7 @@ $(OBJS): $(HEADERS:%=$(D_HEADERS)/%)
$(NAME): $(OBJS)
make -C $(D_LFT)
+ make -C $(D_LMLX)
$(CC) $(OBJS) -o $@ $(LFLAGS) $(CFLAGS)
leaks: $(NAME)
@@ -82,6 +88,7 @@ clean:
fclean: clean
make fclean -C $(D_LFT)
+ make clean -C $(D_LMLX)
rm -f $(NAME)
re: fclean all
diff --git a/libs/minilibx-linux b/libs/minilibx-linux
new file mode 160000
index 0000000..7dc53a4
--- /dev/null
+++ b/libs/minilibx-linux
@@ -0,0 +1 @@
+Subproject commit 7dc53a411a7d4ae286c60c6229bd1e395b0efb82
diff --git a/libs/minilibx-linux-master/Makefile b/libs/minilibx-linux-master/Makefile
deleted file mode 100644
index 5c418c5..0000000
--- a/libs/minilibx-linux-master/Makefile
+++ /dev/null
@@ -1,22 +0,0 @@
-##
-## Makefile for MiniLibX in /home/boulon/work/c/raytraceur/minilibx
-##
-## Made by Olivier Crouzet
-## Login
-##
-## Started on Tue Oct 5 15:56:43 2004 Olivier Crouzet
-## Last update Tue May 15 15:44:41 2007 Olivier Crouzet
-##
-
-## Please use configure script
-
-
-all : do_configure
-
-do_configure :
- ./configure
-
-clean :
- ./configure clean
-
-re : clean all
diff --git a/libs/minilibx-linux-master/Makefile.gen b/libs/minilibx-linux-master/Makefile.gen
deleted file mode 100644
index 5eded88..0000000
--- a/libs/minilibx-linux-master/Makefile.gen
+++ /dev/null
@@ -1,48 +0,0 @@
-INC=/usr/include
-HT=Linux
-DOCP=do_cp
-##
-## Makefile for MiniLibX in /home/boulon/work/c/raytraceur/minilibx
-##
-## Made by Olivier Crouzet
-## Login
-##
-## Started on Tue Oct 5 15:56:43 2004 Olivier Crouzet
-## Last update Tue May 15 15:41:20 2007 Olivier Crouzet
-##
-
-## Please use configure script
-
-
-
-CC = gcc
-
-NAME = libmlx.a
-
-SRC = mlx_init.c mlx_new_window.c mlx_pixel_put.c mlx_loop.c \
- mlx_mouse_hook.c mlx_key_hook.c mlx_expose_hook.c mlx_loop_hook.c \
- mlx_int_anti_resize_win.c mlx_int_do_nothing.c \
- mlx_int_wait_first_expose.c mlx_int_get_visual.c \
- mlx_flush_event.c mlx_string_put.c mlx_set_font.c \
- mlx_new_image.c mlx_get_data_addr.c \
- mlx_put_image_to_window.c mlx_get_color_value.c mlx_clear_window.c \
- mlx_xpm.c mlx_int_str_to_wordtab.c mlx_destroy_window.c \
- mlx_int_param_event.c mlx_int_set_win_event_mask.c mlx_hook.c \
- mlx_rgb.c mlx_destroy_image.c mlx_mouse.c mlx_screen_size.c \
- mlx_destroy_display.c
-
-OBJ =$(SRC:.c=.o)
-CFLAGS = -O3 -I$(INC)
-
-all : $(NAME) $(DOCP)
-
-$(NAME) : $(OBJ)
- ar -r $(NAME) $(OBJ)
- ranlib $(NAME)
-
-do_cp :
- cp $(NAME) libmlx_$(HT).a
-
-
-clean :
- rm -f $(OBJ) $(NAME) libmlx_$(HT).a *~ core *.core
diff --git a/libs/minilibx-linux-master/Makefile.mk b/libs/minilibx-linux-master/Makefile.mk
deleted file mode 100644
index fd93700..0000000
--- a/libs/minilibx-linux-master/Makefile.mk
+++ /dev/null
@@ -1,48 +0,0 @@
-##
-## Makefile for MiniLibX in /home/boulon/work/c/raytraceur/minilibx
-##
-## Made by Olivier Crouzet
-## Login
-##
-## Started on Tue Oct 5 15:56:43 2004 Olivier Crouzet
-## Last update Tue May 15 15:41:20 2007 Olivier Crouzet
-##
-
-## Please use configure script
-
-
-INC =%%%%
-HT =%%%%
-DOCP =%%%%
-
-CC = gcc
-
-NAME = libmlx.a
-
-SRC = mlx_init.c mlx_new_window.c mlx_pixel_put.c mlx_loop.c \
- mlx_mouse_hook.c mlx_key_hook.c mlx_expose_hook.c mlx_loop_hook.c \
- mlx_int_anti_resize_win.c mlx_int_do_nothing.c \
- mlx_int_wait_first_expose.c mlx_int_get_visual.c \
- mlx_flush_event.c mlx_string_put.c mlx_set_font.c \
- mlx_new_image.c mlx_get_data_addr.c \
- mlx_put_image_to_window.c mlx_get_color_value.c mlx_clear_window.c \
- mlx_xpm.c mlx_int_str_to_wordtab.c mlx_destroy_window.c \
- mlx_int_param_event.c mlx_int_set_win_event_mask.c mlx_hook.c \
- mlx_rgb.c mlx_destroy_image.c mlx_mouse.c mlx_screen_size.c \
- mlx_destroy_display.c
-
-OBJ =$(SRC:.c=.o)
-CFLAGS = -O3 -I$(INC)
-
-all : $(NAME) $(DOCP)
-
-$(NAME) : $(OBJ)
- ar -r $(NAME) $(OBJ)
- ranlib $(NAME)
-
-do_cp :
- cp $(NAME) libmlx_$(HT).a
-
-
-clean :
- rm -f $(OBJ) $(NAME) libmlx_$(HT).a *~ core *.core
diff --git a/libs/minilibx-linux-master/README.md b/libs/minilibx-linux-master/README.md
deleted file mode 100644
index 40cded8..0000000
--- a/libs/minilibx-linux-master/README.md
+++ /dev/null
@@ -1,43 +0,0 @@
-
-This is the MinilibX, a simple X-Window (X11R6) programming API
-in C, designed for students, suitable for X-beginners.
-
-
-Contents
-
- - source code in C to create the mlx library
- - man pages (in man/ directory)
- - a test program (in test/ directory) is built
- with the library
- - a public include file mlx.h
- - a tiny configure script to generate an appropriate Makefile.gen
-
-
-Requirements
-
- - MinilibX only support TrueColor visual type (8,15,16,24 or 32 bits depth)
- - gcc
- - make
- - X11 include files (package xorg)
- - XShm extension must be present (package libxext-dev)
- - Utility functions from BSD systems - development files (package libbsd-dev)
- - **e.g. _sudo apt-get install gcc make xorg libxext-dev libbsd-dev_ (Debian/Ubuntu)**
-
-Compile MinilibX
-
- - run ./configure or make
- both will make a few tests, create Makefile.gen
- and then automatically run make on this generated Makefile.gen .
- libmlx.a and libmlx_$(HOSTTYPE).a are created.
- test/mlx-test binary is also created.
-
-
-Install MinilibX
-
- - no installation script is provided. You may want to install
- - libmlx.a and/or libmlx_$(HOSTTYPE).a in /usr/X11/lib or /usr/local/lib
- - mlx.h in /usr/X11/include or /usr/local/include
- - man/man3/mlx*.1 in /usr/X11/man/man3 or /usr/local/man/man3
-
-
- Olivier CROUZET - 2014-01-06 -
diff --git a/libs/minilibx-linux-master/configure b/libs/minilibx-linux-master/configure
deleted file mode 100755
index 04fcdc4..0000000
--- a/libs/minilibx-linux-master/configure
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/bin/sh
-
-
-if [ -n "$1" -a "$1" = "--help" ] ; then
- echo "Usage : $0\n Auto-configure and make MinilibX"
- exit
-fi
-
-
-conf_inc=NO
-
-for inc in \
- /usr/X11/include \
- /usr/X11R6/include \
- /usr/X11R5/include \
- /usr/X11R4/include \
- \
- /usr/include \
- /usr/include/X11 \
- /usr/include/X11R6 \
- /usr/include/X11R5 \
- /usr/include/X11R4 \
- \
- /usr/local/X11/include \
- /usr/local/X11R6/include \
- /usr/local/X11R5/include \
- /usr/local/X11R4/include \
- \
- /usr/local/include/X11 \
- /usr/local/include/X11R6 \
- /usr/local/include/X11R5 \
- /usr/local/include/X11R4 \
- \
- /usr/X386/include \
- /usr/x386/include \
- /usr/XFree86/include/X11 \
- \
- /usr/include \
- /usr/local/include \
- /usr/athena/include \
- /usr/local/x11r5/include \
- /usr/lpp/Xamples/include \
- \
- /usr/openwin/include \
- /usr/openwin/share/include
- do
- if [ -f "$inc/X11/Xlib.h" -a -f "$inc/X11/extensions/XShm.h" ]; then
- conf_inc=$inc
- break
- fi
- done
-
-
-if [ "$conf_inc" = "NO" ]; then
- echo "Can't find a suitable X11 include directory."
- exit
-else
- echo "X11 include dir : $conf_inc"
-fi
-
-if [ -z "$HOSTTYPE" ]; then
- conf_ht=`uname -s`
-else
- conf_ht=$HOSTTYPE
-fi
-
-if [ -z "$conf_ht" ]; then
- conf_docp=""
-else
- conf_docp="do_cp"
- echo "lib_$conf_ht generation"
-fi
-
-
-/bin/echo "INC=$conf_inc" > Makefile.gen
-/bin/echo "HT=$conf_ht" >> Makefile.gen
-/bin/echo "DOCP=$conf_docp" >> Makefile.gen
-cat Makefile.mk | grep -v %%%% >> Makefile.gen
-
-/bin/echo "INC=$conf_inc" > test/Makefile.gen
-/bin/echo "HT=$conf_ht" >> test/Makefile.gen
-/bin/echo "DOCP=$conf_docp" >> test/Makefile.gen
-cat test/Makefile.mk | grep -v %%%% >> test/Makefile.gen
-
-
-if [ -n "$1" -a "$1" = "clean" ] ; then
- echo "Now make it clean."
- make -f Makefile.gen clean
- (cd test ; make -f Makefile.gen clean)
- exit
-fi
-
-echo "Now make it."
-make -f Makefile.gen all
-(cd test ; make -f Makefile.gen all )
diff --git a/libs/minilibx-linux-master/man/man1/mlx_loop.1 b/libs/minilibx-linux-master/man/man1/mlx_loop.1
deleted file mode 100644
index 3397ce2..0000000
--- a/libs/minilibx-linux-master/man/man1/mlx_loop.1
+++ /dev/null
@@ -1,141 +0,0 @@
-.TH MiniLibX 3 "September 19, 2002"
-.SH NAME
-MiniLibX - Handle events
-.SH SYNOPSYS
-
-.nf
-.I int
-.fi
-.B mlx_loop
-(
-.I void *mlx_ptr
-);
-
-.nf
-.I int
-.fi
-.B mlx_key_hook
-(
-.I void *win_ptr, int (*funct_ptr)(), void *param
-);
-
-.nf
-.I int
-.fi
-.B mlx_mouse_hook
-(
-.I void *win_ptr, int (*funct_ptr)(), void *param
-);
-
-.nf
-.I int
-.fi
-.B mlx_expose_hook
-(
-.I void *win_ptr, int (*funct_ptr)(), void *param
-);
-
-.nf
-.I int
-.fi
-.B mlx_loop_hook
-(
-.I void *mlx_ptr, int (*funct_ptr)(), void *param
-);
-
-.SH X-WINDOW EVENTS
-
-The X-Window system is bi-directionnal. On one hand, the program sends orders to
-the screen to display pixels, images, and so on. On the other hand,
-it can get information from the keyboard and mouse associated to
-the screen. To do so, the program receives "events" from the keyboard or the
-mouse.
-
-.SH DESCRIPTION
-
-To receive events, you must use
-.B mlx_loop
-(). This function never returns. It is an infinite loop that waits for
-an event, and then calls a user-defined function associated with this event.
-A single parameter is needed, the connection identifier
-.I mlx_ptr
-(see the
-.B mlx manual).
-
-You can assign different functions to the three following events:
-.br
-- A key is pressed
-.br
-- The mouse button is pressed
-.br
-- A part of the window should be re-drawn
-(this is called an "expose" event, and it is your program's job to handle it).
-.br
-
-Each window can define a different function for the same event.
-
-The three functions
-.B mlx_key_hook
-(),
-.B mlx_mouse_hook
-() and
-.B mlx_expose_hook
-() work exactly the same way.
-.I funct_ptr
-is a pointer to the function you want to be called
-when an event occurs. This assignment is specific to the window defined by the
-.I win_ptr
-identifier. The
-.I param
-adress will be passed to the function everytime it is called, and should be
-used to store the parameters it might need.
-
-The syntax for the
-.B mlx_loop_hook
-() function is identical to the previous ones, but the given function will be
-called when no event occurs.
-
-When it catches an event, the MiniLibX calls the corresponding function
-with fixed parameters:
-.nf
-
- expose_hook(void *param);
- key_hook(int keycode,void *param);
- mouse_hook(int button,int x,int y,void *param);
- loop_hook(void *param);
-
-.fi
-These function names are arbitrary. They here are used to distinguish
-parameters according to the event. These functions are NOT part of the
-MiniLibX.
-
-.I param
-is the address specified in the mlx_*_hook calls. This address is never
-used nor modified by the MiniLibX. On key and mouse events, additional
-information is passed:
-.I keycode
-tells you which key is pressed (look for the X11 include file "keysymdef.h"),
-(
-.I x
-,
-.I y
-) are the coordinates of the mouse click in the window, and
-.I button
-tells you which mouse button was pressed.
-
-.SH GOING FURTHER WITH EVENTS
-The MiniLibX provides a much generic access to all X-Window events. The
-.I mlx.h
-include define
-.B mlx_hook()
-in the same manner mlx_*_hook functions work. The event and mask values
-will be taken from the X11 include file "X.h".
-
-See source code of mlx_int_param_event.c to find out how the MiniLibX will
-call your own function for a specific event.
-
-.SH SEE ALSO
-mlx(3), mlx_new_window(3), mlx_pixel_put(3), mlx_new_image(3)
-
-.SH AUTHOR
-Copyright ol@ - 2002-2014 - Olivier Crouzet
diff --git a/libs/minilibx-linux-master/man/man1/mlx_new_window.1 b/libs/minilibx-linux-master/man/man1/mlx_new_window.1
deleted file mode 100644
index 90f6d47..0000000
--- a/libs/minilibx-linux-master/man/man1/mlx_new_window.1
+++ /dev/null
@@ -1,79 +0,0 @@
-.TH MiniLibX 3 "September 19, 2002"
-.SH NAME
-MiniLibX - Managing windows
-.SH SYNOPSYS
-
-.nf
-.I void *
-.fi
-.B mlx_new_window
-(
-.I void *mlx_ptr, int size_x, int size_y, char *title
-);
-
-.nf
-.I int
-.fi
-.B mlx_clear_window
-(
-.I void *mlx_ptr, void *win_ptr
-);
-
-.nf
-.I int
-.fi
-.B mlx_destroy_window
-(
-.I void *mlx_ptr, void *win_ptr
-);
-
-
-.SH DESCRIPTION
-The
-.B mlx_new_window
-() function creates a new window on the screen, using the
-.I size_x
-and
-.I size_y
-parameters to determine its size, and
-.I title
-as the text that should be displayed in the window's title bar.
-The
-.I mlx_ptr
-parameter is the connection identifier returned by
-.B mlx_init
-() (see the
-.B mlx
-man page).
-.B mlx_new_window
-() returns a
-.I void *
-window identifier that can be used by other MiniLibX calls.
-Note that the MiniLibX
-can handle an arbitrary number of separate windows.
-
-.B mlx_clear_window
-() and
-.B mlx_destroy_window
-() respectively clear (in black) and destroy the given window. They both have
-the same parameters:
-.I mlx_ptr
-is the screen connection identifier, and
-.I win_ptr
-is a window identifier.
-
-.SH RETURN VALUES
-If
-.B mlx_new_window()
-fails to create a new window (for wathever reason), it will return NULL,
-otherwise a non-null pointer is returned as a window identifier.
-.B mlx_clear_window
-and
-.B mlx_destroy_window
-right now return nothing.
-
-.SH SEE ALSO
-mlx(3), mlx_pixel_put(3), mlx_new_image(3), mlx_loop(3)
-
-.SH AUTHOR
-Copyright ol@ - 2002-2014 - Olivier Crouzet
diff --git a/libs/minilibx-linux-master/man/man1/mlx_pixel_put.1 b/libs/minilibx-linux-master/man/man1/mlx_pixel_put.1
deleted file mode 100644
index 258df58..0000000
--- a/libs/minilibx-linux-master/man/man1/mlx_pixel_put.1
+++ /dev/null
@@ -1,84 +0,0 @@
-.TH MiniLibX 3 "September 19, 2002"
-.SH NAME
-MiniLibX - Drawing inside windows
-.SH SYNOPSYS
-
-.nf
-.I int
-.fi
-.B mlx_pixel_put
-(
-.I void *mlx_ptr, void *win_ptr, int x, int y, int color
-);
-
-.nf
-.I int
-.fi
-.B mlx_string_put
-(
-.I void *mlx_ptr, void *win_ptr, int x, int y, int color, char *string
-);
-
-
-.SH DESCRIPTION
-The
-.B mlx_pixel_put
-() function draws a defined pixel in the window
-.I win_ptr
-using the (
-.I x
-,
-.I y
-) coordinates, and the specified
-.I color
-\&. The origin (0,0) is the upper left corner of the window, the x and y axis
-respectively pointing right and down. The connection
-identifier,
-.I mlx_ptr
-, is needed (see the
-.B mlx
-man page).
-
-Parameters for
-.B mlx_string_put
-() have the same meaning. Instead of a simple pixel, the specified
-.I string
-will be displayed at (
-.I x
-,
-.I y
-).
-
-In both functions, it is impossible to display anything outside the
-specified window, nor display in another window in front of the selected one.
-
-.SH COLOR MANAGEMENT
-The
-.I color
-parameter has an integer type. The displayed color needs to be encoded
-in this integer, following a defined scheme. All displayable colors
-can be split in 3 basic colors: red, green and blue. Three associated
-values, in the 0-255 range, represent how much of each color is mixed up
-to create the original color. Theses three values must be set inside the
-integer to display the right color. The three least significant bytes of
-this integer are filled as shown in the picture below:
-
-.TS
-allbox;
-c s s s s
-r c c c c.
-Color Integer
-Interpretation \[*a] R G B
-Bit numbers 31..24 23..16 15..8 7..0
-.TE
-
-While filling the integer, make sure you avoid endian problems. Remember
-that the "blue" byte should always be the least significant one.
-
-
-.SH SEE ALSO
-mlx(3), mlx_new_window(3), mlx_new_image(3), mlx_loop(3)
-
-
-.SH AUTHOR
-Copyright ol@ - 2002-2014 - Olivier Crouzet
diff --git a/libs/minilibx-linux-master/man/man3/mlx.1 b/libs/minilibx-linux-master/man/man3/mlx.1
deleted file mode 100644
index 9ad0ac1..0000000
--- a/libs/minilibx-linux-master/man/man3/mlx.1
+++ /dev/null
@@ -1,93 +0,0 @@
-.TH MiniLibX 3 "September 19, 2002"
-.SH NAME
-MiniLibX - Simple X-Window Interface Library for students
-.SH SYNOPSYS
-#include
-
-.nf
-.I void *
-.fi
-.B mlx_init
-();
-
-.SH DESCRIPTION
-MiniLibX is an easy way to create graphical software,
-without any X-Window programming knowledge. It provides
-simple window creation, a drawing tool, image and basic events
-management.
-
-.SH X-WINDOW CONCEPT
-
-X-Window is a network-oriented graphical system for Unix.
-It is based on two main parts:
-.br
-On one side, your software wants to draw something on the screen and/or
-get keyboard & mouse entries.
-.br
-On the other side, the X-Server manages the screen, keyboard and mouse
-(It is often refered to as a "display").
-.br
-A network connection must be established between these two entities to send
-drawing orders (from the software to the X-Server), and keyboard/mouse
-events (from the X-Server to the software).
-
-.SH INCLUDE FILE
-.B mlx.h
-should be included for a correct use of the MiniLibX API.
-It only contains function prototypes, no structure is needed.
-
-.SH LIBRARY FUNCTIONS
-.P
-First of all, you need to initialize the connection
-between your software and the display.
-Once this connection is established, you'll be able to
-use other MiniLibX functions to send the X-Server messages,
-like "I want to draw a yellow pixel in this window" or "did the
-user hit a key?".
-.P
-The
-.B mlx_init
-function will create this connection. No parameters are needed, ant it will
-return a
-.I "void *"
-identifier, used for further calls to the library routines.
-.P
-All other MiniLibX functions are described in the following man pages:
-
-.TP 20
-.B mlx_new_window
-: manage windows
-.TP 20
-.B mlx_pixel_put
-: draw inside window
-.TP 20
-.B mlx_new_image
-: manipulate images
-.TP 20
-.B mlx_loop
-: handle keyboard or mouse events
-
-.SH LINKING MiniLibX
-To use MiniLibX functions, you'll need to link
-your software with several libraries, including the MiniLibX library itself.
-To do this, simply add the following arguments at linking time:
-
-.B -lmlx -lXext -lX11
-
-You may also need to specify the path to these libraries, using
-the
-.B -L
-flag.
-
-
-.SH RETURN VALUES
-If
-.B mlx_init()
-fails to set up the connection to the X server, it will return NULL, otherwise
-a non-null pointer is returned as a connection identifier.
-
-.SH SEE ALSO
-mlx_new_window(3), mlx_pixel_put(3), mlx_new_image(3), mlx_loop(3)
-
-.SH AUTHOR
-Copyright ol@ - 2002-2014 - Olivier Crouzet
diff --git a/libs/minilibx-linux-master/man/man3/mlx_new_image.1 b/libs/minilibx-linux-master/man/man3/mlx_new_image.1
deleted file mode 100644
index f2160a2..0000000
--- a/libs/minilibx-linux-master/man/man3/mlx_new_image.1
+++ /dev/null
@@ -1,192 +0,0 @@
-.TH MiniLibX 3 "September 19, 2002"
-.SH NAME
-MiniLibX - Manipulating images
-.SH SYNOPSYS
-
-.nf
-.I void *
-.fi
-.B mlx_new_image
-(
-.I void *mlx_ptr, int width, int height
-);
-
-.nf
-.I char *
-.fi
-.B mlx_get_data_addr
-(
-.I void *img_ptr, int *bits_per_pixel, int *size_line, int *endian
-);
-
-.nf
-.I int
-.fi
-.B mlx_put_image_to_window
-(
-.I void *mlx_ptr, void *win_ptr, void *img_ptr, int x, int y
-);
-
-.nf
-.I unsigned int
-.fi
-.B mlx_get_color_value
-(
-.I void *mlx_ptr, int color
-);
-
-.nf
-.I void *
-.fi
-.B mlx_xpm_to_image
-(
-.I void *mlx_ptr, char **xpm_data, int *width, int *height
-);
-
-.nf
-.I void *
-.fi
-.B mlx_xpm_file_to_image
-(
-.I void *mlx_ptr, char *filename, int *width, int *height
-);
-
-.nf
-.I int
-.fi
-.B mlx_destroy_image
-(
-.I void *mlx_ptr, void *img_ptr
-);
-
-
-.SH DESCRIPTION
-
-.B mlx_new_image
-() creates a new image in memory. It returns a
-.I void *
-identifier needed to manipulate this image later. It only needs
-the size of the image to be created, using the
-.I width
-and
-.I height
-parameters, and the
-.I mlx_ptr
-connection identifier (see the
-.B mlx
-manual).
-
-The user can draw inside the image (see below), and
-can dump the image inside a specified window at any time to
-display it on the screen. This is done using
-.B mlx_put_image_to_window
-(). Three identifiers are needed here, for the connection to the
-display, the window to use, and the image (respectively
-.I mlx_ptr
-,
-.I win_ptr
-and
-.I img_ptr
-). The (
-.I x
-,
-.I y
-) coordinates define where the image should be placed in the window.
-
-.B mlx_get_data_addr
-() returns information about the created image, allowing a user
-to modify it later. The
-.I img_ptr
-parameter specifies the image to use. The three next parameters should
-be the addresses of three different valid integers.
-.I bits_per_pixel
-will be filled with the number of bits needed to represent a pixel color
-(also called the depth of the image).
-.I size_line
-is the number of bytes used to store one line of the image in memory.
-This information is needed to move from one line to another in the image.
-.I endian
-tells you wether the pixel color in the image needs to be stored in
-little endian (
-.I endian
-== 0), or big endian (
-.I endian
-== 1).
-
-.B mlx_get_data_addr
-returns a
-.I char *
-address that represents the begining of the memory area where the image
-is stored. From this adress, the first
-.I bits_per_pixel
-bits represent the color of the first pixel in the first line of
-the image. The second group of
-.I bits_per_pixel
-bits represent the second pixel of the first line, and so on.
-Add
-.I size_line
-to the adress to get the begining of the second line. You can reach any
-pixels of the image that way.
-
-.B mlx_destroy_image
-destroys the given image (
-.I img_ptr
-).
-
-.SH STORING COLOR INSIDE IMAGES
-
-Depending on the display, the number of bits used to store a pixel color
-can change. The user usually represents a color in RGB mode, using
-one byte for each component (see
-.B mlx_pixel_put
-manual). This must be translated to fit the
-.I bits_per_pixel
-requirement of the image, and make the color understandable to the X-Server.
-That is the purpose of the
-.B mlx_get_color_value
-() function. It takes a standard RGB
-.I color
-parameter, and returns an
-.I unsigned int
-value.
-The
-.I bits_per_pixel
-least significant bits of this value can be stored in the image.
-
-Keep in mind that the least significant bits position depends on the local
-computer's endian. If the endian of the image (in fact the endian of
-the X-Server's computer) differs from the local endian, then the value should
-be transformed before being used.
-
-.SH XPM IMAGES
-
-The
-.B mlx_xpm_to_image
-() and
-.B mlx_xpm_file_to_image
-() functions will create a new image the same way.
-They will fill it using the specified
-.I xpm_data
-or
-.I filename
-, depending on which function is used.
-Note that MiniLibX does not use the standard
-Xpm library to deal with xpm images. You may not be able to
-read all types of xpm images. It however handles transparency.
-
-.SH RETURN VALUES
-The three functions that create images,
-.B mlx_new_image()
-,
-.B mlx_xpm_to_image()
-and
-.B mlx_xpm_file_to_image()
-, will return NULL if an error occurs. Otherwise they return a non-null pointer
-as an image identifier.
-
-
-.SH SEE ALSO
-mlx(3), mlx_new_window(3), mlx_pixel_put(3), mlx_loop(3)
-
-.SH AUTHOR
-Copyright ol@ - 2002-2014 - Olivier Crouzet
diff --git a/libs/minilibx-linux-master/mlx_clear_window.c b/libs/minilibx-linux-master/mlx_clear_window.c
deleted file mode 100644
index f621090..0000000
--- a/libs/minilibx-linux-master/mlx_clear_window.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-** mlx_clear_window.c for MiniLibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Thu Sep 7 19:46:15 2000 Charlie Root
-** Last update Tue Sep 25 17:11:19 2001 Charlie Root
-*/
-
-
-
-#include "mlx_int.h"
-
-
-int mlx_clear_window(t_xvar *xvar,t_win_list *win)
-{
- XClearWindow(xvar->display,win->window);
- if (xvar->do_flush)
- XFlush(xvar->display);
-}
diff --git a/libs/minilibx-linux-master/mlx_destroy_display.c b/libs/minilibx-linux-master/mlx_destroy_display.c
deleted file mode 100644
index d2970b8..0000000
--- a/libs/minilibx-linux-master/mlx_destroy_display.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* mlx_destroy_display.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: mg +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2020/10/03 18:56:35 by mg #+# #+# */
-/* Updated: 2020/10/04 01:55:35 by mg ### ########.fr */
-/* */
-/* ************************************************************************** */
-
-#include "mlx_int.h"
-
-int mlx_destroy_display(t_xvar *xvar)
-{
- XCloseDisplay(xvar->display);
-}
diff --git a/libs/minilibx-linux-master/mlx_destroy_image.c b/libs/minilibx-linux-master/mlx_destroy_image.c
deleted file mode 100644
index afd4d1a..0000000
--- a/libs/minilibx-linux-master/mlx_destroy_image.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-** mlx_destroy_image.c for MinilibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Tue Mar 12 10:25:15 2002 Charlie Root
-** Last update Tue May 15 16:45:54 2007 Olivier Crouzet
-*/
-
-
-#include "mlx_int.h"
-
-
-int mlx_destroy_image(t_xvar *xvar, t_img *img)
-{
- if (img->type == MLX_TYPE_SHM_PIXMAP ||
- img->type == MLX_TYPE_SHM)
- {
- XShmDetach(xvar->display, &(img->shm));
- shmdt(img->shm.shmaddr);
- /* shmctl IPC_RMID already done */
- }
- XDestroyImage(img->image); /* For image & shm-image. Also free img->data */
- XFreePixmap(xvar->display, img->pix);
- if (img->gc)
- XFreeGC(xvar->display, img->gc);
- free(img);
- if (xvar->do_flush)
- XFlush(xvar->display);
-}
diff --git a/libs/minilibx-linux-master/mlx_destroy_window.c b/libs/minilibx-linux-master/mlx_destroy_window.c
deleted file mode 100644
index 464790c..0000000
--- a/libs/minilibx-linux-master/mlx_destroy_window.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-** mlx_destroy_window.c for MinilibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Tue Mar 12 10:25:15 2002 Charlie Root
-** Last update Tue May 15 16:46:08 2007 Olivier Crouzet
-*/
-
-
-#include "mlx_int.h"
-
-
-int mlx_destroy_window(t_xvar *xvar,t_win_list *win)
-{
- t_win_list *w;
- t_win_list *prev;
- t_win_list first;
-
- first.next = xvar->win_list;
- prev = &first;
- w = prev->next;
- while (w)
- {
- if (w==win)
- prev->next = w->next;
- else
- prev = w;
- w = w->next;
- }
- xvar->win_list = first.next;
- XDestroyWindow(xvar->display,win->window);
- XFreeGC(xvar->display,win->gc);
- free(win);
- if (xvar->do_flush)
- XFlush(xvar->display);
-}
diff --git a/libs/minilibx-linux-master/mlx_expose_hook.c b/libs/minilibx-linux-master/mlx_expose_hook.c
deleted file mode 100644
index b00b675..0000000
--- a/libs/minilibx-linux-master/mlx_expose_hook.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-** mlx_expose_hook.c for MiniLibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Thu Aug 3 11:49:06 2000 Charlie Root
-** Last update Fri Feb 23 17:07:42 2001 Charlie Root
-*/
-
-
-#include "mlx_int.h"
-
-
-
-
-int mlx_expose_hook(t_win_list *win,int (*funct)(),void *param)
-{
- win->hooks[Expose].hook = funct;
- win->hooks[Expose].param = param;
- win->hooks[Expose].mask = ExposureMask;
-}
diff --git a/libs/minilibx-linux-master/mlx_ext_randr.c b/libs/minilibx-linux-master/mlx_ext_randr.c
deleted file mode 100644
index 34ddb91..0000000
--- a/libs/minilibx-linux-master/mlx_ext_randr.c
+++ /dev/null
@@ -1,104 +0,0 @@
-
-
-
-#include "mlx_int.h"
-
-#include
-#include
-
-/* global for independant extension */
-
-RRMode saved_mode = 0;
-
-
-int mlx_ext_fullscreen(t_xvar *xvar, t_win_list *win, int fullscreen)
-{
- XWindowAttributes watt;
- int i;
- int j;
- XRRScreenResources *res;
- XRROutputInfo *o_info;
- XRRCrtcInfo *crtc;
- RRMode mode_candidate;
- int idx_output;
- int idx_candidate;
-
- if (!XGetWindowAttributes(xvar->display, win->window, &watt))
- return (0);
-
- res = XRRGetScreenResources(xvar->display, xvar->root);
- o_info = NULL;
- idx_output = -1;
- i = res->noutput;
- while (i--)
- {
- o_info = XRRGetOutputInfo(xvar->display, res, res->outputs[i]);
- if (o_info->connection == RR_Connected)
- {
- idx_output = i;
- i = 0;
- }
- else
- XRRFreeOutputInfo(o_info);
- }
- if (!o_info)
- {
- XRRFreeScreenResources(res);
- return (0);
- }
-
- idx_candidate = -1;
- i = o_info->nmode;
- while (i--)
- {
- j = res->nmode;
- while (j--)
- if (res->modes[j].id == o_info->modes[i])
- if (res->modes[j].width >= watt.width && res->modes[j].height >= watt.height &&
- (idx_candidate == -1 || res->modes[idx_candidate].width > res->modes[j].width ||
- res->modes[idx_candidate].height > res->modes[j].height) )
- idx_candidate = i;
- }
- if (idx_candidate < 0)
- {
- XRRFreeOutputInfo(o_info);
- XRRFreeScreenResources(res);
- return (0);
- }
- if (!fullscreen && saved_mode == -1)
- idx_candidate = 0; /* if no clue, uses first mode, usually part of npreferred */
- mode_candidate = o_info->modes[idx_candidate];
- if (!fullscreen)
- mode_candidate = saved_mode;
-
- crtc = XRRGetCrtcInfo(xvar->display, res, o_info->crtc);
- saved_mode = crtc->mode;
-
- i = XRRSetCrtcConfig(xvar->display, res, o_info->crtc, CurrentTime, 0, 0, mode_candidate,
- crtc->rotation, &res->outputs[idx_output], 1);
- if (fullscreen)
- printf("found mode : %d x %d\n Status %d\n", res->modes[idx_candidate].width, res->modes[idx_candidate].height, i);
- else
- printf("back previous mode\n");
-
- XMoveWindow(xvar->display, win->window, 0, 0);
- XMapRaised(xvar->display, win->window);
-
- if (fullscreen)
- {
- // XGrabPointer(xvar->display, win->window, True, 0, GrabModeAsync, GrabModeAsync, win->window, 0L, CurrentTime);
- XGrabKeyboard(xvar->display, win->window, False, GrabModeAsync, GrabModeAsync, CurrentTime);
- }
- else
- {
- XUngrabPointer(xvar->display, CurrentTime);
- XUngrabKeyboard(xvar->display, CurrentTime);
- }
-
- XSync(xvar->display, False);
- sleep(1);
-
- XRRFreeCrtcInfo(crtc);
- XRRFreeOutputInfo(o_info);
- XRRFreeScreenResources(res);
-}
diff --git a/libs/minilibx-linux-master/mlx_flush_event.c b/libs/minilibx-linux-master/mlx_flush_event.c
deleted file mode 100644
index 1e586ad..0000000
--- a/libs/minilibx-linux-master/mlx_flush_event.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-** mlx_flush_event.c for MiniLibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Wed Aug 2 18:58:11 2000 Charlie Root
-** Last update Fri Feb 23 17:08:48 2001 Charlie Root
-*/
-
-
-#include "mlx_int.h"
-
-
-
-
-int mlx_flush_event(t_xvar *xvar)
-{
- XEvent ev;
-
- while (XPending(xvar->display))
- {
- XNextEvent(xvar->display,&ev);
- }
-}
diff --git a/libs/minilibx-linux-master/mlx_get_color_value.c b/libs/minilibx-linux-master/mlx_get_color_value.c
deleted file mode 100644
index b620970..0000000
--- a/libs/minilibx-linux-master/mlx_get_color_value.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-** mlx_get_color_value.c for MiniLibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Mon Jul 31 19:01:33 2000 Charlie Root
-** Last update Thu Oct 4 15:04:13 2001 Charlie Root
-*/
-
-
-#include "mlx_int.h"
-
-
-int mlx_get_color_value(t_xvar *xvar,int color)
-{
- return(mlx_int_get_good_color(xvar,color));
-}
-
-int mlx_int_get_good_color(t_xvar *xvar,int color)
-{
- XColor xc;
-
- if (xvar->depth>=24)
- return (color);
- xc.red = (color>>8)&0xFF00;
- xc.green = color&0xFF00;
- xc.blue = (color<<8)&0xFF00;
- xc.pixel = ((xc.red>>(16-xvar->decrgb[1]))<decrgb[0])+
- ((xc.green>>(16-xvar->decrgb[3]))<decrgb[2])+
- ((xc.blue>>(16-xvar->decrgb[5]))<decrgb[4]);
- return (xc.pixel);
-}
diff --git a/libs/minilibx-linux-master/mlx_get_data_addr.c b/libs/minilibx-linux-master/mlx_get_data_addr.c
deleted file mode 100644
index 45e7a85..0000000
--- a/libs/minilibx-linux-master/mlx_get_data_addr.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-** mlx_get_data_addr.c for MiniLibX in raytraceur
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Mon Aug 14 15:45:57 2000 Charlie Root
-** Last update Thu Sep 27 19:05:25 2001 Charlie Root
-*/
-
-
-
-#include "mlx_int.h"
-
-
-char *mlx_get_data_addr(t_img *img,int *bits_per_pixel,
- int *size_line,int *endian)
-{
- *bits_per_pixel = img->bpp;
- *size_line = img->size_line;
- *endian = img->image->byte_order;
- return (img->data);
-}
diff --git a/libs/minilibx-linux-master/mlx_hook.c b/libs/minilibx-linux-master/mlx_hook.c
deleted file mode 100644
index 98e509a..0000000
--- a/libs/minilibx-linux-master/mlx_hook.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-** mlx_hook.c for MiniLibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Thu Aug 3 11:49:06 2000 Charlie Root
-** Last update Fri Jan 28 17:05:28 2005 Olivier Crouzet
-*/
-
-
-#include "mlx_int.h"
-
-
-
-
-int mlx_hook(t_win_list *win, int x_event, int x_mask,
- int (*funct)(),void *param)
-{
- win->hooks[x_event].hook = funct;
- win->hooks[x_event].param = param;
- win->hooks[x_event].mask = x_mask;
-}
-
-
-int mlx_do_key_autorepeatoff(t_xvar *xvar)
-{
- XAutoRepeatOff(xvar->display);
-}
-
-int mlx_do_key_autorepeaton(t_xvar *xvar)
-{
- XAutoRepeatOn(xvar->display);
-}
-
-
-int mlx_do_sync(t_xvar *xvar)
-{
- XSync(xvar->display, False);
-}
diff --git a/libs/minilibx-linux-master/mlx_init.c b/libs/minilibx-linux-master/mlx_init.c
deleted file mode 100644
index 2ca8422..0000000
--- a/libs/minilibx-linux-master/mlx_init.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-** mlx_init.c for MiniLibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Mon Jul 31 16:52:42 2000 Charlie Root
-** Last update Fri Jan 28 17:05:09 2005 Olivier Crouzet
-*/
-
-
-#include "mlx_int.h"
-
-
-
-void *mlx_init()
-{
- t_xvar *xvar;
-
- if (!(xvar = malloc(sizeof(*xvar))))
- return ((void*)0);
- if ((xvar->display = XOpenDisplay("")) == 0)
- {
- free(xvar);
- return ((void*)0);
- }
- xvar->screen = DefaultScreen(xvar->display);
- xvar->root = DefaultRootWindow(xvar->display);
- xvar->cmap = DefaultColormap(xvar->display,xvar->screen);
- xvar->depth = DefaultDepth(xvar->display,xvar->screen);
- if (mlx_int_get_visual(xvar)==-1)
- {
- printf(ERR_NO_TRUECOLOR);
- exit(1);
- }
- xvar->win_list = 0;
- xvar->loop_hook = 0;
- xvar->loop_param = (void *)0;
- xvar->do_flush = 1;
- xvar->wm_delete_window = XInternAtom (xvar->display, "WM_DELETE_WINDOW", False);
- mlx_int_deal_shm(xvar);
- if (xvar->private_cmap)
- xvar->cmap = XCreateColormap(xvar->display,xvar->root,
- xvar->visual,AllocNone);
- mlx_int_rgb_conversion(xvar);
- return (xvar);
-}
-
-
-/*
-** pshm_format of -1 : Not XYBitmap|XYPixmap|ZPixmap
-** alpha libX need a check of the DISPLAY env var, or shm is allowed
-** in remote Xserver connections.
-*/
-
-int mlx_int_deal_shm(t_xvar *xvar)
-{
- int use_pshm;
- int bidon;
- char *dpy;
- char buff[33];
-
- xvar->use_xshm = XShmQueryVersion(xvar->display,&bidon,&bidon,&(use_pshm));
- if (xvar->use_xshm && use_pshm)
- xvar->pshm_format = XShmPixmapFormat(xvar->display);
- else
- xvar->pshm_format = -1;
- gethostname(buff,32);
- dpy = getenv(ENV_DISPLAY);
- if (dpy && strlen(dpy) && *dpy!=':' && strncmp(dpy,buff,strlen(buff)) &&
- strncmp(dpy,LOCALHOST,strlen(LOCALHOST)) )
- {
- xvar->pshm_format = -1;
- xvar->use_xshm = 0;
- }
-}
-
-/*
-** TrueColor Visual is needed to have *_mask correctly set
-*/
-
-int mlx_int_rgb_conversion(t_xvar *xvar)
-{
- bzero(xvar->decrgb,sizeof(int)*6);
- while (!(xvar->visual->red_mask&1))
- { xvar->visual->red_mask >>= 1; xvar->decrgb[0] ++; }
- while (xvar->visual->red_mask&1)
- { xvar->visual->red_mask >>= 1; xvar->decrgb[1] ++; }
- while (!(xvar->visual->green_mask&1))
- { xvar->visual->green_mask >>= 1; xvar->decrgb[2] ++; }
- while (xvar->visual->green_mask&1)
- { xvar->visual->green_mask >>= 1; xvar->decrgb[3] ++; }
- while (!(xvar->visual->blue_mask&1))
- { xvar->visual->blue_mask >>= 1; xvar->decrgb[4] ++; }
- while (xvar->visual->blue_mask&1)
- { xvar->visual->blue_mask >>= 1; xvar->decrgb[5] ++; }
-}
diff --git a/libs/minilibx-linux-master/mlx_int.h b/libs/minilibx-linux-master/mlx_int.h
deleted file mode 100644
index 58c22c7..0000000
--- a/libs/minilibx-linux-master/mlx_int.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
-** mlx_int.h for mlx in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Mon Jul 31 16:45:48 2000 Charlie Root
-** Last update Wed May 25 16:44:16 2011 Olivier Crouzet
-*/
-
-
-
-/*
-** Internal settings for MiniLibX
-*/
-
-#ifndef MLX_INT_H
-
-# define MLX_INT_H
-
-# include
-# include
-# include
-# include
-# include
-# include
-# include
-# include
-# include
-# include
-# include
-# include
-/* #include */
-
-
-# define MLX_TYPE_SHM_PIXMAP 3
-# define MLX_TYPE_SHM 2
-# define MLX_TYPE_XIMAGE 1
-
-# define MLX_MAX_EVENT LASTEvent
-
-
-# define ENV_DISPLAY "DISPLAY"
-# define LOCALHOST "localhost"
-# define ERR_NO_TRUECOLOR "MinilibX Error : No TrueColor Visual available.\n"
-# define WARN_SHM_ATTACH "MinilibX Warning : X server can't attach shared memory.\n"
-
-
-typedef struct s_xpm_col
-{
- int name;
- int col;
-} t_xpm_col;
-
-
-struct s_col_name
-{
- char *name;
- int color;
-};
-
-typedef struct s_event_list
-{
- int mask;
- int (*hook)();
- void *param;
-} t_event_list;
-
-
-typedef struct s_win_list
-{
- Window window;
- GC gc;
- struct s_win_list *next;
- int (*mouse_hook)();
- int (*key_hook)();
- int (*expose_hook)();
- void *mouse_param;
- void *key_param;
- void *expose_param;
- t_event_list hooks[MLX_MAX_EVENT];
-} t_win_list;
-
-
-typedef struct s_img
-{
- XImage *image;
- Pixmap pix;
- GC gc;
- int size_line;
- int bpp;
- int width;
- int height;
- int type;
- int format;
- char *data;
- XShmSegmentInfo shm;
-} t_img;
-
-typedef struct s_xvar
-{
- Display *display;
- Window root;
- int screen;
- int depth;
- Visual *visual;
- Colormap cmap;
- int private_cmap;
- t_win_list *win_list;
- int (*loop_hook)();
- void *loop_param;
- int use_xshm;
- int pshm_format;
- int do_flush;
- int decrgb[6];
- Atom wm_delete_window;
-} t_xvar;
-
-
-int mlx_int_do_nothing();
-int mlx_get_color_value();
-int mlx_int_get_good_color();
-int mlx_int_find_in_pcm();
-int mlx_int_anti_resize_win();
-int mlx_int_wait_first_expose();
-int mlx_int_rgb_conversion();
-int mlx_int_deal_shm();
-void *mlx_int_new_xshm_image();
-char **mlx_int_str_to_wordtab();
-void *mlx_new_image();
-int shm_att_pb();
-int mlx_int_get_visual(t_xvar *xvar);
-int mlx_int_set_win_event_mask(t_xvar *xvar);
-int mlx_int_str_str_cote(char *str,char *find,int len);
-int mlx_int_str_str(char *str,char *find,int len);
-
-
-#endif
diff --git a/libs/minilibx-linux-master/mlx_int_anti_resize_win.c b/libs/minilibx-linux-master/mlx_int_anti_resize_win.c
deleted file mode 100644
index 2f20b44..0000000
--- a/libs/minilibx-linux-master/mlx_int_anti_resize_win.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-** mlx_int_anti_resize_win.c for MiniLibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Tue Aug 8 14:31:05 2000 Charlie Root
-** Last update Tue Sep 25 15:56:58 2001 Charlie Root
-*/
-
-#include "mlx_int.h"
-
-
-int mlx_int_anti_resize_win(t_xvar *xvar,Window win,int w,int h)
-{
- XSizeHints hints;
- long toto;
-
- XGetWMNormalHints(xvar->display,win,&hints,&toto);
- hints.width = w;
- hints.height = h;
- hints.min_width = w;
- hints.min_height = h;
- hints.max_width = w;
- hints.max_height = h;
- hints.flags = PPosition | PSize | PMinSize | PMaxSize;
- XSetWMNormalHints(xvar->display,win,&hints);
-}
diff --git a/libs/minilibx-linux-master/mlx_int_do_nothing.c b/libs/minilibx-linux-master/mlx_int_do_nothing.c
deleted file mode 100644
index 49524e4..0000000
--- a/libs/minilibx-linux-master/mlx_int_do_nothing.c
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
-** mlx_int_do_nothing.c for MiniLibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Tue Aug 8 12:58:24 2000 Charlie Root
-** Last update Tue Sep 25 15:56:22 2001 Charlie Root
-*/
-
-
-
-int mlx_int_do_nothing(void *param)
-{
-
-}
diff --git a/libs/minilibx-linux-master/mlx_int_get_visual.c b/libs/minilibx-linux-master/mlx_int_get_visual.c
deleted file mode 100644
index 440a7ca..0000000
--- a/libs/minilibx-linux-master/mlx_int_get_visual.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-** mlx_int_get_visual.c for MinilibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Wed Oct 3 17:01:51 2001 Charlie Root
-** Last update Thu Oct 4 15:00:45 2001 Charlie Root
-*/
-
-
-
-#include "mlx_int.h"
-
-
-/*
-** We need a private colormap for non-default Visual.
-*/
-
-
-int mlx_int_get_visual(t_xvar *xvar)
-{
- XVisualInfo *vi;
- XVisualInfo template;
- int nb_item;
-
- xvar->private_cmap = 0;
- xvar->visual = DefaultVisual(xvar->display,xvar->screen);
- if (xvar->visual->class == TrueColor)
- return (0);
- template.class = TrueColor;
- template.depth = xvar->depth;
- if (!(vi = XGetVisualInfo(xvar->display,VisualDepthMask|VisualClassMask,
- &template,&nb_item)) )
- return (-1);
- xvar->visual = vi->visual;
- xvar->private_cmap = 1;
- return (0);
-}
diff --git a/libs/minilibx-linux-master/mlx_int_param_event.c b/libs/minilibx-linux-master/mlx_int_param_event.c
deleted file mode 100644
index 8756a22..0000000
--- a/libs/minilibx-linux-master/mlx_int_param_event.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-** mlx_int_param_event.c for MinilibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Mon Jul 31 16:37:50 2000 Charlie Root
-** Last update Wed Oct 6 13:14:52 2004 Olivier Crouzet
-*/
-
-#include "mlx_int.h"
-
-int mlx_int_param_undef()
-{
-}
-
-int mlx_int_param_KeyPress(t_xvar *xvar, XEvent *ev, t_win_list *win)
-{
- win->hooks[KeyPress].hook(XkbKeycodeToKeysym(xvar->display,
- ev->xkey.keycode, 0, 0),
- win->hooks[KeyPress].param);
-}
-
-int mlx_int_param_KeyRelease(t_xvar *xvar, XEvent *ev, t_win_list *win)
-{
- win->hooks[KeyRelease].hook(XkbKeycodeToKeysym(xvar->display,
- ev->xkey.keycode, 0, 0),
- win->hooks[KeyRelease].param);
-}
-
-int mlx_int_param_ButtonPress(t_xvar *xvar, XEvent *ev, t_win_list *win)
-{
- win->hooks[ButtonPress].hook(ev->xbutton.button,ev->xbutton.x,ev->xbutton.y,
- win->hooks[ButtonPress].param);
-}
-
-int mlx_int_param_ButtonRelease(t_xvar *xvar, XEvent *ev, t_win_list *win)
-{
- win->hooks[ButtonRelease].hook(ev->xbutton.button,
- ev->xbutton.x, ev->xbutton.y,
- win->hooks[ButtonRelease].param);
-}
-
-int mlx_int_param_MotionNotify(t_xvar *xvar, XEvent *ev, t_win_list *win)
-{
- win->hooks[MotionNotify].hook(ev->xbutton.x,ev->xbutton.y,
- win->hooks[MotionNotify].param);
-}
-
-int mlx_int_param_Expose(t_xvar *xvar, XEvent *ev, t_win_list *win)
-{
- if (!ev->xexpose.count)
- win->hooks[Expose].hook(win->hooks[Expose].param);
-}
-
-
-int mlx_int_param_generic(t_xvar *xvar, XEvent *ev, t_win_list *win)
-{
- win->hooks[ev->type].hook(win->hooks[ev->type].param);
-}
-
-int (*(mlx_int_param_event[]))() =
-{
- mlx_int_param_undef, /* 0 */
- mlx_int_param_undef,
- mlx_int_param_KeyPress,
- mlx_int_param_KeyRelease, /* 3 */
- mlx_int_param_ButtonPress,
- mlx_int_param_ButtonRelease,
- mlx_int_param_MotionNotify, /* 6 */
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_Expose, /* 12 */
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic,
- mlx_int_param_generic
-};
diff --git a/libs/minilibx-linux-master/mlx_int_set_win_event_mask.c b/libs/minilibx-linux-master/mlx_int_set_win_event_mask.c
deleted file mode 100644
index 55650cd..0000000
--- a/libs/minilibx-linux-master/mlx_int_set_win_event_mask.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-** mlx_int_set_win_event_mask.c for MiniLibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Thu Aug 3 11:49:06 2000 Charlie Root
-** Last update Fri Feb 23 17:07:42 2001 Charlie Root
-*/
-
-
-#include "mlx_int.h"
-
-
-
-
-int mlx_int_set_win_event_mask(t_xvar *xvar)
-{
- t_win_list *win;
- int mask;
- int i;
- XSetWindowAttributes xwa;
-
- win = xvar->win_list;
- while (win)
- {
- xwa.event_mask = 0;
- i = MLX_MAX_EVENT;
- while (i--)
- xwa.event_mask |= win->hooks[i].mask;
- XChangeWindowAttributes(xvar->display, win->window, CWEventMask, &xwa);
- win = win->next;
- }
-}
diff --git a/libs/minilibx-linux-master/mlx_int_wait_first_expose.c b/libs/minilibx-linux-master/mlx_int_wait_first_expose.c
deleted file mode 100644
index 0d549ee..0000000
--- a/libs/minilibx-linux-master/mlx_int_wait_first_expose.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-** mlx_int_wait_first_expose.c for minilibx in
-**
-** Made by olivier crouzet
-** Login
-**
-** Started on Tue Oct 17 09:26:45 2000 olivier crouzet
-** Last update Fri Feb 23 17:27:10 2001 Charlie Root
-*/
-
-
-
-#include "mlx_int.h"
-
-
-
-int mlx_int_wait_first_expose(t_xvar *xvar,Window win)
-{
- XEvent ev;
-
- XWindowEvent(xvar->display,win,ExposureMask,&ev);
- XPutBackEvent(xvar->display,&ev);
-}
diff --git a/libs/minilibx-linux-master/mlx_key_hook.c b/libs/minilibx-linux-master/mlx_key_hook.c
deleted file mode 100644
index eea6484..0000000
--- a/libs/minilibx-linux-master/mlx_key_hook.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-** mlx_key_hook.c for MiniLibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Thu Aug 3 11:49:06 2000 Charlie Root
-** Last update Fri Feb 23 17:10:09 2001 Charlie Root
-*/
-
-
-#include "mlx_int.h"
-
-
-
-
-int mlx_key_hook(t_win_list *win,int (*funct)(),void *param)
-{
- win->hooks[KeyRelease].hook = funct;
- win->hooks[KeyRelease].param = param;
- win->hooks[KeyRelease].mask = KeyReleaseMask;
-}
diff --git a/libs/minilibx-linux-master/mlx_lib_xpm.c b/libs/minilibx-linux-master/mlx_lib_xpm.c
deleted file mode 100644
index b8cf184..0000000
--- a/libs/minilibx-linux-master/mlx_lib_xpm.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-** mlx_xpm.c for minilibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Fri Dec 8 11:07:24 2000 Charlie Root
-** Last update Thu Oct 4 16:00:22 2001 Charlie Root
-*/
-
-
-#include "mlx_int.h"
-
-
-
-
-void *mlx_int_xpm_f_image(t_xvar *xvar,int *width,int *height,
- int (*xpm_func)(),void *param)
-{
- XImage *img1;
- XImage *img2;
- t_img *im2;
- XpmAttributes xpm_att;
-
- xpm_att.visual = xvar->visual;
- xpm_att.colormap = xvar->cmap;
- xpm_att.depth = xvar->depth;
- xpm_att.bitmap_format = ZPixmap;
- xpm_att.valuemask = XpmDepth|XpmBitmapFormat|XpmVisual|XpmColormap;
- if (xpm_func(xvar->display,param,&img1,&img2,&xpm_att))
- return ((void *)0);
- if (img2)
- XDestroyImage(img2);
-
- if (!(im2 = (void *)mlx_new_image(xvar,img1->width,img1->height)))
- {
- XDestroyImage(img1);
- return ((void *)0);
- }
- *width = img1->width;
- *height = img1->height;
- if (mlx_int_egal_img(im2->image,img1))
- {
- bcopy(img1->data,im2->data,img1->height*img1->bytes_per_line);
- XDestroyImage(img1);
- return (im2);
- }
- if (im2->type==MLX_TYPE_SHM_PIXMAP)
- {
- XFreePixmap(xvar->display,im2->pix);
- im2->pix = XCreatePixmap(xvar->display,xvar->root,
- *width,*height,xvar->depth);
- }
- if (im2->type>MLX_TYPE_XIMAGE)
- {
- XShmDetach(xvar->display,&(im2->shm));
- shmdt(im2->data);
- }
- XDestroyImage(im2->image);
- im2->image = img1;
- im2->data = img1->data;
- im2->type = MLX_TYPE_XIMAGE;
- im2->size_line = img1->bytes_per_line;
- im2->bpp = img1->bits_per_pixel;
- return (im2);
-}
-
-
-int mlx_int_egal_img(XImage *img1,XImage *img2)
-{
- if (img1->width!=img2->width || img1->height!=img2->height ||
- img1->xoffset!=img2->xoffset || img1->format!=img2->format ||
- img1->byte_order!=img2->byte_order ||
- img1->bitmap_unit!=img2->bitmap_unit ||
- img1->bitmap_bit_order!=img2->bitmap_bit_order ||
- img1->bitmap_pad!=img2->bitmap_pad || img1->depth!=img2->depth ||
- img1->bytes_per_line!=img2->bytes_per_line ||
- img1->bits_per_pixel!=img2->bits_per_pixel ||
- img1->red_mask!=img2->red_mask || img1->green_mask!=img2->green_mask ||
- img1->blue_mask!=img2->blue_mask )
- return (0);
- return (1);
-}
-
-
-void *mlx_xpm_file_to_image(t_xvar *xvar,char *filename,
- int *width,int *height)
-{
- return (mlx_int_xpm_f_image(xvar,width,height,XpmReadFileToImage,filename));
-}
-
-
-void *mlx_xpm_to_image(t_xvar *xvar,char **data,int *width,int *height)
-{
- return (mlx_int_xpm_f_image(xvar,width,height,XpmCreateImageFromData,(void *)data));
-}
diff --git a/libs/minilibx-linux-master/mlx_loop.c b/libs/minilibx-linux-master/mlx_loop.c
deleted file mode 100644
index c5f83be..0000000
--- a/libs/minilibx-linux-master/mlx_loop.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-** mlx_loop.c for MiniLibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Wed Aug 2 18:58:11 2000 Charlie Root
-** Last update Fri Sep 30 14:47:41 2005 Olivier Crouzet
-*/
-
-
-#include "mlx_int.h"
-
-extern int (*(mlx_int_param_event[]))();
-
-
-int mlx_loop(t_xvar *xvar)
-{
- XEvent ev;
- t_win_list *win;
-
- mlx_int_set_win_event_mask(xvar);
- xvar->do_flush = 0;
- while (42)
- {
- while (!xvar->loop_hook || XPending(xvar->display))
- {
- XNextEvent(xvar->display,&ev);
- win = xvar->win_list;
- while (win && (win->window!=ev.xany.window))
- win = win->next;
- if (win && ev.type < MLX_MAX_EVENT)
- {
- if (ev.type == ClientMessage && (Atom)ev.xclient.data.l[0] == xvar->wm_delete_window)
- XDestroyWindow(xvar->display, win->window);
- if (win->hooks[ev.type].hook)
- mlx_int_param_event[ev.type](xvar, &ev, win);
- }
- }
- XSync(xvar->display, False);
- xvar->loop_hook(xvar->loop_param);
- }
-}
diff --git a/libs/minilibx-linux-master/mlx_loop_hook.c b/libs/minilibx-linux-master/mlx_loop_hook.c
deleted file mode 100644
index 1f8b9ed..0000000
--- a/libs/minilibx-linux-master/mlx_loop_hook.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-** mlx_loop_hook.c for MiniLibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Thu Aug 3 11:49:06 2000 Charlie Root
-** Last update Fri Feb 23 17:11:39 2001 Charlie Root
-*/
-
-
-#include "mlx_int.h"
-
-
-
-
-int mlx_loop_hook(t_xvar *xvar,int (*funct)(),void *param)
-{
- xvar->loop_hook = funct;
- xvar->loop_param = param;
-}
diff --git a/libs/minilibx-linux-master/mlx_mouse.c b/libs/minilibx-linux-master/mlx_mouse.c
deleted file mode 100644
index ce0d4c9..0000000
--- a/libs/minilibx-linux-master/mlx_mouse.c
+++ /dev/null
@@ -1,48 +0,0 @@
-#include "mlx_int.h"
-
-int mlx_mouse_move(t_xvar *xvar, t_win_list *win, int x, int y)
-{
- XWarpPointer(xvar->display, None, win->window, 0, 0, 0, 0, x, y);
- return (0);
-}
-
-int mlx_mouse_hide(t_xvar *xvar, t_win_list *win)
-{
- static char data[1] = {0};
- Cursor cursor;
- Pixmap blank;
- XColor dummy;
-
- blank = XCreateBitmapFromData(xvar->display, win->window, data, 1, 1);
- cursor = XCreatePixmapCursor(xvar->display, blank, blank, &dummy, &dummy, 0, 0);
- XDefineCursor(xvar->display, win->window, cursor);
- XFreePixmap(xvar->display, blank);
- XFreeCursor(xvar->display, cursor);
-}
-
-int mlx_mouse_show(t_xvar *xvar, t_win_list *win)
-{
- XUndefineCursor(xvar->display, win->window);
-}
-
-/*
-** Queries the position of the mouse pointer relative to the origin of the
-** specified window and saves it to the provided location.
-**
-** If the pointer is not on the same screen as the specified window, both
-** win_x_return and win_y_return are set to zero and the function returns 0.
-*/
-
-int mlx_mouse_get_pos(t_xvar *xvar, t_win_list *win, \
- int *win_x_return, int *win_y_return)
-{
- Window root_return;
- Window child_return;
- int root_x_return;
- int root_y_return;
- unsigned mask_return;
-
- return (XQueryPointer(xvar->display, win->window, \
- &root_return, &child_return, &root_x_return, &root_y_return, \
- win_x_return, win_y_return, &mask_return));
-}
diff --git a/libs/minilibx-linux-master/mlx_mouse_hook.c b/libs/minilibx-linux-master/mlx_mouse_hook.c
deleted file mode 100644
index cb567ab..0000000
--- a/libs/minilibx-linux-master/mlx_mouse_hook.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-** mlx_mouse_hook.c for MiniLibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Thu Aug 3 11:49:06 2000 Charlie Root
-** Last update Fri Feb 23 17:11:05 2001 Charlie Root
-*/
-
-
-#include "mlx_int.h"
-
-
-
-
-int mlx_mouse_hook(t_win_list *win,int (*funct)(),void *param)
-{
- win->hooks[ButtonPress].hook = funct;
- win->hooks[ButtonPress].param = param;
- win->hooks[ButtonPress].mask = ButtonPressMask;
-}
diff --git a/libs/minilibx-linux-master/mlx_new_image.c b/libs/minilibx-linux-master/mlx_new_image.c
deleted file mode 100644
index 9967401..0000000
--- a/libs/minilibx-linux-master/mlx_new_image.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
-** mlx_new_image.c for MiniLibX in raytraceur
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Mon Aug 14 15:29:14 2000 Charlie Root
-** Last update Wed May 25 16:46:31 2011 Olivier Crouzet
-*/
-
-
-
-
-#include "mlx_int.h"
-
-/*
-** To handle X errors
-*/
-
-#define X_ShmAttach 1
-
-int mlx_X_error;
-
-int shm_att_pb(Display *d,XErrorEvent *ev)
-{
- if (ev->request_code==146 && ev->minor_code==X_ShmAttach)
- write(2,WARN_SHM_ATTACH,strlen(WARN_SHM_ATTACH));
- mlx_X_error = 1;
-}
-
-
-/*
-** Data malloc : width+32 ( bitmap_pad=32 ), *4 = *32 / 8bit
-*/
-
-
-void *mlx_int_new_xshm_image(t_xvar *xvar,int width,int height,int format)
-{
- t_img *img;
- int (*save_handler)();
-
- if (!(img = malloc(sizeof(*img))))
- return ((void *)0);
- bzero(img,sizeof(*img));
- img->data = 0;
- img->image = XShmCreateImage(xvar->display,xvar->visual,xvar->depth,
- format,img->data,&(img->shm),width,height);
- if (!img->image)
- {
- free(img);
- return ((void *)0);
- }
- img->width = width;
- img->height = height;
- img->size_line = img->image->bytes_per_line;
- img->bpp = img->image->bits_per_pixel;
- img->format = format;
- img->shm.shmid = shmget(IPC_PRIVATE,(width+32)*height*4,IPC_CREAT|0777);
- if (img->shm.shmid==-1)
- {
- XDestroyImage(img->image);
- free(img);
- return ((void *)0);
- }
- img->data = img->shm.shmaddr = img->image->data = shmat(img->shm.shmid,0,0);
- if (img->data==(void *)-1)
- {
- shmctl(img->shm.shmid,IPC_RMID,0);
- XDestroyImage(img->image);
- free(img);
- return ((void *)0);
- }
- img->shm.readOnly = False;
- mlx_X_error = 0;
- save_handler = XSetErrorHandler(shm_att_pb);
- if (!XShmAttach(xvar->display,&(img->shm)) ||
- 0&XSync(xvar->display,False) || mlx_X_error)
- {
- XSetErrorHandler(save_handler);
- shmdt(img->data);
- shmctl(img->shm.shmid,IPC_RMID,0);
- XDestroyImage(img->image);
- free(img);
- return ((void *)0);
- }
- XSetErrorHandler(save_handler);
- shmctl(img->shm.shmid,IPC_RMID,0);
- if (xvar->pshm_format==format)
- {
- img->pix = XShmCreatePixmap(xvar->display,xvar->root,img->shm.shmaddr,
- &(img->shm),width,height,xvar->depth);
- img->type = MLX_TYPE_SHM_PIXMAP;
- }
- else
- {
- img->pix = XCreatePixmap(xvar->display,xvar->root,
- width,height,xvar->depth);
- img->type = MLX_TYPE_SHM;
- }
- if (xvar->do_flush)
- XFlush(xvar->display);
- return (img);
-}
-
-
-
-void *mlx_int_new_image(t_xvar *xvar,int width, int height,int format)
-{
- t_img *img;
-
- if (!(img = malloc(sizeof(*img))) ||
- !(img->data = malloc((width+32)*height*4)))
- return ((void *)0);
- bzero(img->data,(width+32)*height*4);
- img->image = XCreateImage(xvar->display,xvar->visual,xvar->depth,format,0,
- img->data,width,height,32,0);
- if (!img->image)
- {
- free(img->data);
- free(img);
- return ((void *)0);
- }
- img->gc = 0;
- img->size_line = img->image->bytes_per_line;
- img->bpp = img->image->bits_per_pixel;
- img->width = width;
- img->height = height;
- img->pix = XCreatePixmap(xvar->display,xvar->root,width,height,xvar->depth);
- img->format = format;
- img->type = MLX_TYPE_XIMAGE;
- if (xvar->do_flush)
- XFlush(xvar->display);
- return (img);
-}
-
-
-void *mlx_new_image(t_xvar *xvar,int width, int height)
-{
- t_img *img;
-
- if (xvar->use_xshm)
- if (img = mlx_int_new_xshm_image(xvar,width,height,ZPixmap))
- return (img);
- return (mlx_int_new_image(xvar,width,height,ZPixmap));
-}
-
-void *mlx_new_image2(t_xvar *xvar,int width, int height)
-{
- t_img *img;
-
- if (xvar->use_xshm)
- if (img = mlx_int_new_xshm_image(xvar,width,height,XYPixmap))
- return (img);
- return (mlx_int_new_image(xvar,width,height,XYPixmap));
-}
diff --git a/libs/minilibx-linux-master/mlx_new_window.c b/libs/minilibx-linux-master/mlx_new_window.c
deleted file mode 100644
index 3f05914..0000000
--- a/libs/minilibx-linux-master/mlx_new_window.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-** mlx_new_window.c for MiniLibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Mon Jul 31 17:29:02 2000 Charlie Root
-** Last update Thu Oct 4 15:44:43 2001 Charlie Root
-*/
-
-
-/*
-** We do not use White/BlackPixel macro, TrueColor Visual make sure
-** 0 is black & -1 is white
-**
-** With mlx_int_wait_first_expose, no flush is needed.
-*/
-
-#include "mlx_int.h"
-
-
-void *mlx_new_window(t_xvar *xvar,int size_x,int size_y,char *title)
-{
- t_win_list *new_win;
- XSetWindowAttributes xswa;
- XGCValues xgcv;
-
- xswa.background_pixel = 0;
- xswa.border_pixel = -1;
- xswa.colormap = xvar->cmap;
- /*
- xswa.event_mask = ButtonPressMask | ButtonReleaseMask | ExposureMask |
- KeyPressMask | KeyReleaseMask | StructureNotifyMask;
- */
- /* xswa.event_mask = ExposureMask; */
- xswa.event_mask = 0xFFFFFF; /* all events */
- if (!(new_win = malloc(sizeof(*new_win))))
- return ((void *)0);
- new_win->window = XCreateWindow(xvar->display,xvar->root,0,0,size_x,size_y,
- 0,CopyFromParent,InputOutput,xvar->visual,
- CWEventMask|CWBackPixel|CWBorderPixel|
- CWColormap,&xswa);
- mlx_int_anti_resize_win(xvar,new_win->window,size_x,size_y);
- XStoreName(xvar->display,new_win->window,title);
- XSetWMProtocols(xvar->display, new_win->window, &(xvar->wm_delete_window), 1);
- xgcv.foreground = -1;
- xgcv.function = GXcopy;
- xgcv.plane_mask = AllPlanes;
- new_win->gc = XCreateGC(xvar->display,new_win->window,
- GCFunction|GCPlaneMask|GCForeground,&xgcv);
- new_win->next = xvar->win_list;
- xvar->win_list = new_win;
- /*
- new_win->mouse_hook = mlx_int_do_nothing;
- new_win->key_hook = mlx_int_do_nothing;
- new_win->expose_hook = mlx_int_do_nothing;
- */
- bzero(&(new_win->hooks), sizeof(new_win->hooks));
- XMapRaised(xvar->display,new_win->window);
- mlx_int_wait_first_expose(xvar,new_win->window);
- return (new_win);
-}
diff --git a/libs/minilibx-linux-master/mlx_pixel_put.c b/libs/minilibx-linux-master/mlx_pixel_put.c
deleted file mode 100644
index c411f36..0000000
--- a/libs/minilibx-linux-master/mlx_pixel_put.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- ** mlx_pixel_put.c for MiniLibX in
- **
- ** Made by Charlie Root
- ** Login
- **
- ** Started on Mon Jul 31 19:01:33 2000 Charlie Root
-** Last update Tue Sep 25 17:09:49 2001 Charlie Root
- */
-
-
-#include "mlx_int.h"
-
-
-
-int mlx_pixel_put(t_xvar *xvar,t_win_list *win,
- int x,int y,int color)
-{
- XGCValues xgcv;
-
- xgcv.foreground = mlx_int_get_good_color(xvar,color);
- XChangeGC(xvar->display,win->gc,GCForeground,&xgcv);
- XDrawPoint(xvar->display,win->window,win->gc,x,y);
- if (xvar->do_flush)
- XFlush(xvar->display);
-}
diff --git a/libs/minilibx-linux-master/mlx_put_image_to_window.c b/libs/minilibx-linux-master/mlx_put_image_to_window.c
deleted file mode 100644
index 86ba3f4..0000000
--- a/libs/minilibx-linux-master/mlx_put_image_to_window.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-** mlx_put_image_to_window.c for MiniLibX in raytraceur
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Mon Aug 14 15:55:49 2000 Charlie Root
-** Last update Sun Oct 2 09:53:00 2005 Olivier Crouzet
-*/
-
-
-
-#include "mlx_int.h"
-
-
-int mlx_put_image_to_window(t_xvar *xvar,t_win_list *win,t_img *img,
- int x,int y)
-{
- GC gc;
-
- gc = win->gc;
- if (img->gc)
- {
- gc = img->gc;
- XSetClipOrigin(xvar->display, gc, x, y);
- }
- if (img->type==MLX_TYPE_SHM)
- XShmPutImage(xvar->display,img->pix, win->gc, img->image,0,0,0,0,
- img->width,img->height,False);
- if (img->type==MLX_TYPE_XIMAGE)
- XPutImage(xvar->display,img->pix, win->gc, img->image,0,0,0,0,
- img->width,img->height);
- XCopyArea(xvar->display,img->pix,win->window, gc,
- 0,0,img->width,img->height,x,y);
- if (xvar->do_flush)
- XFlush(xvar->display);
-}
diff --git a/libs/minilibx-linux-master/mlx_screen_size.c b/libs/minilibx-linux-master/mlx_screen_size.c
deleted file mode 100644
index 835730d..0000000
--- a/libs/minilibx-linux-master/mlx_screen_size.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "mlx_int.h"
-
-int mlx_get_screen_size(void *mlx_ptr, int *sizex, int *sizey)
-{
- XWindowAttributes xwAttr;
- Status ret;
- t_xvar *xvar;
-
- xvar = mlx_ptr;
- ret = XGetWindowAttributes(xvar->display, xvar->root, &xwAttr);
- (*sizex) = xwAttr.width;
- (*sizey) = xwAttr.height;
-}
diff --git a/libs/minilibx-linux-master/mlx_set_font.c b/libs/minilibx-linux-master/mlx_set_font.c
deleted file mode 100644
index 111e3b8..0000000
--- a/libs/minilibx-linux-master/mlx_set_font.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* mlx_set_font.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: amalliar +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2020/09/30 13:30:47 by amalliar #+# #+# */
-/* Updated: 2020/09/30 17:08:36 by amalliar ### ########.fr */
-/* */
-/* ************************************************************************** */
-
-#include "mlx_int.h"
-
-/*
-** Allows to specify the font that will be used by mlx_string_put.
-**
-** Note: only fixed-width bitmap fonts are supported by Xlib, refer to xfontsel
-** utility to get valid font names for this function.
-*/
-
-void mlx_set_font(t_xvar *xvar, t_win_list *win, char *name)
-{
- static Font font = 0;
-
- if (font)
- XUnloadFont(xvar->display, font);
- font = XLoadFont(xvar->display, name);
- XSetFont(xvar->display, win->gc, font);
-}
diff --git a/libs/minilibx-linux-master/mlx_string_put.c b/libs/minilibx-linux-master/mlx_string_put.c
deleted file mode 100644
index 8492a09..0000000
--- a/libs/minilibx-linux-master/mlx_string_put.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- ** mlx_string_put.c for MiniLibX in
- **
- ** Made by Charlie Root
- ** Login
- **
- ** Started on Mon Jul 31 19:01:33 2000 Charlie Root
-** Last update Tue Sep 25 17:11:47 2001 Charlie Root
- */
-
-
-#include "mlx_int.h"
-
-
-
-int mlx_string_put(t_xvar *xvar,t_win_list *win,
- int x,int y,int color,char *string)
-{
- XGCValues xgcv;
-
- xgcv.foreground = mlx_int_get_good_color(xvar,color);
- XChangeGC(xvar->display,win->gc,GCForeground,&xgcv);
- XDrawString(xvar->display,win->window,win->gc,x,y,string,strlen(string));
- if (xvar->do_flush)
- XFlush(xvar->display);
-}
diff --git a/libs/minilibx-linux-master/mlx_xpm.c b/libs/minilibx-linux-master/mlx_xpm.c
deleted file mode 100644
index 4a527f6..0000000
--- a/libs/minilibx-linux-master/mlx_xpm.c
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- ** xpm-read.c for MinilibX in
- **
- ** Made by Charlie Root
- ** Login
- **
- ** Started on Tue Dec 11 15:25:27 2001 olivier crouzet
- ** Last update Sat Oct 1 14:56:13 2005 Olivier Crouzet
- */
-
-
-#include "mlx_int.h"
-
-extern struct s_col_name mlx_col_name[];
-
-
-#define RETURN { if (colors) free(colors); if (tab) free(tab); \
- if (colors_direct) free(colors_direct); \
- if (img) {XDestroyImage(img->image); \
- XFreePixmap(xvar->display,img->pix);free(img);} \
- return ((void *)0);}
-
-
-
-
-char *mlx_int_get_line(char *ptr,int *pos,int size)
-{
- int pos2;
- int pos3;
- int pos4;
-
- if ((pos2 = mlx_int_str_str(ptr+*pos,"\"",size-*pos))==-1)
- return ((char *)0);
- if ((pos3 = mlx_int_str_str(ptr+*pos+pos2+1,"\"",size-*pos-pos2-1))==-1)
- return ((char *)0);
- *(ptr+*pos+pos2) = 0;
- *(ptr+*pos+pos2+1+pos3) = 0;
- pos4 = *pos+pos2+1;
- *pos += pos2+pos3+2;
- return (ptr+pos4);
-}
-
-
-unsigned int strlcpy_is_not_posix(char *dest, char *src, unsigned int size)
-{
- unsigned count;
- unsigned i;
-
- count = 0;
- while (src[count] != '\0')
- ++count;
- i = 0;
- while (src[i] != '\0' && i < (size - 1))
- {
- dest[i] = src[i];
- ++i;
- }
- dest[i] = '\0';
- return (count);
-}
-
-char *mlx_int_static_line(char **xpm_data,int *pos,int size)
-{
- static char *copy = 0;
- static int len = 0;
- int len2;
- char *str;
-
- str = xpm_data[(*pos)++];
- if ((len2 = strlen(str))>len)
- {
- if (copy)
- free(copy);
- if (!(copy = malloc(len2+1)))
- return ((char *)0);
- len = len2;
- }
- strlcpy_is_not_posix(copy, str, len2);
-
- return (copy);
-}
-
-
-int mlx_int_get_col_name(char *str,int size)
-{
- int result;
-
- result = 0;
- while (size--)
- result = (result<<8)+*(str++);
-
- return (result);
-}
-
-int mlx_int_get_text_rgb(char *name, char *end)
-{
- int i;
- char buff[64];
-
- if (*name == '#')
- return (strtol(name+1,0,16));
- if (end)
- {
- snprintf(buff, 64, "%s %s", name, end);
- name = buff;
- }
- i = 0;
- while (mlx_col_name[i].name)
- {
- if (!strcasecmp(mlx_col_name[i].name, name))
- return (mlx_col_name[i].color);
- i ++;
- }
- return (0);
-}
-
-
-int mlx_int_xpm_set_pixel(t_img *img, char *data, int opp, int col, int x)
-{
- int dec;
- unsigned int ucol;
-
- if (opp == 4 && img->image->byte_order)
- ucol = col | 0x000000FF;
- else if (opp == 4)
- ucol = col | 0xFF000000;
- else
- ucol = col;
- dec = opp;
- while (dec--)
- {
- if (img->image->byte_order)
- *(data+x*opp+dec) = ucol&0xFF;
- else
- *(data+x*opp+opp-dec-1) = ucol&0xFF;
- ucol >>= 8;
- }
-}
-
-
-void *mlx_int_parse_xpm(t_xvar *xvar,void *info,int info_size,char *(*f)())
-{
- int pos;
- char *line;
- char **tab;
- char *data;
- char *clip_data;
- int nc;
- int opp;
- int cpp;
- int col;
- int rgb_col;
- int col_name;
- int method;
- int x;
- int i;
- int j;
- t_img *img;
- t_xpm_col *colors;
- int *colors_direct;
- int width;
- int height;
- XImage *clip_img;
- XGCValues xgcv;
- Pixmap clip_pix;
-
- colors = 0;
- colors_direct = 0;
- img = 0;
- tab = 0;
- pos = 0;
- if (!(line = f(info,&pos,info_size)) ||
- !(tab = mlx_int_str_to_wordtab(line)) || !(width = atoi(tab[0])) ||
- !(height = atoi(tab[1])) || !(nc = atoi(tab[2])) ||
- !(cpp = atoi(tab[3])) )
- RETURN;
- free(tab);
- tab = 0;
-
- method = 0;
- if (cpp<=2)
- {
- method = 1;
- if (!(colors_direct = malloc((cpp==2?65536:256)*sizeof(int))))
- RETURN;
- }
- else
- if (!(colors = malloc(nc*sizeof(*colors))))
- RETURN;
-
- clip_data = 0;
-
- i = nc;
- while (i--)
- {
- if (!(line = f(info,&pos,info_size)) ||
- !(tab = mlx_int_str_to_wordtab(line+cpp)) )
- RETURN;
- j = 0;
- while (tab[j] && strcmp(tab[j++],"c"));
-
- if (!tab[j])
- RETURN;
-
- if ((rgb_col = mlx_int_get_text_rgb(tab[j], tab[j+1]))==-1)
- {
- if (!(clip_data = malloc(4*width*height)) || /* ok, nice size .. */
- !(clip_img = XCreateImage(xvar->display, xvar->visual,
- 1, XYPixmap, 0, clip_data,
- width, height, 8, (width+7)/8)) )
- RETURN;
- memset(clip_data, 0xFF, 4*width*height);
- }
-
- if (method)
- colors_direct[mlx_int_get_col_name(line,cpp)] =
- rgb_col>=0?mlx_get_color_value(xvar, rgb_col):rgb_col;
- else
- {
- colors[i].name = mlx_int_get_col_name(line,cpp);
- colors[i].col = rgb_col>=0?mlx_get_color_value(xvar,rgb_col):rgb_col;
- }
- free(tab);
- }
-
- if (!(img = mlx_new_image(xvar,width,height)))
- RETURN;
- opp = img->bpp/8;
-
-
- i = height;
- data = img->data;
- while (i--)
- {
- if (!(line = f(info,&pos,info_size)))
- RETURN;
- x = 0;
- while (xsize_line;
- }
- if (clip_data)
- {
- if (!(clip_pix = XCreatePixmap(xvar->display, xvar->root,
- width, height, 1)) )
- RETURN;
- img->gc = XCreateGC(xvar->display, clip_pix, 0, &xgcv);
- XPutImage(xvar->display, clip_pix, img->gc, clip_img,
- 0, 0, 0, 0, width, height);
- XFreeGC(xvar->display, img->gc);
- xgcv.clip_mask = clip_pix;
- xgcv.function = GXcopy;
- xgcv.plane_mask = AllPlanes;
- img->gc = XCreateGC(xvar->display, xvar->root, GCClipMask|GCFunction|
- GCPlaneMask, &xgcv);
- XSync(xvar->display, False);
- XDestroyImage(clip_img);
- }
- if (colors)
- free(colors);
- if (colors_direct)
- free(colors_direct);
- return (img);
-}
-
-
-int mlx_int_file_get_rid_comment(char *ptr, int size)
-{
- int com_begin;
- int com_end;
-
- while ((com_begin = mlx_int_str_str_cote(ptr,"/*",size))!=-1)
- {
- com_end = mlx_int_str_str(ptr+com_begin+2,"*/",size-com_begin-2);
- memset(ptr+com_begin,' ',com_end+4);
- }
- while ((com_begin = mlx_int_str_str_cote(ptr,"//",size))!=-1)
- {
- com_end = mlx_int_str_str(ptr+com_begin+2,"\n",size-com_begin-2);
- memset(ptr+com_begin,' ',com_end+3);
- }
-}
-
-
-void *mlx_xpm_file_to_image(t_xvar *xvar,char *file,int *width,int *height)
-{
- int fd;
- int size;
- char *ptr;
- t_img *img;
-
- fd = -1;
- if ((fd = open(file,O_RDONLY))==-1 || (size = lseek(fd,0,SEEK_END))==-1 ||
- (ptr = mmap(0,size,PROT_WRITE|PROT_READ,MAP_PRIVATE,fd,0))==
- (void *)MAP_FAILED)
- {
- if (fd>=0)
- close(fd);
- return ((void *)0);
- }
- mlx_int_file_get_rid_comment(ptr, size);
- if (img = mlx_int_parse_xpm(xvar,ptr,size,mlx_int_get_line))
- {
- *width = img->width;
- *height = img->height;
- }
- munmap(ptr,size);
- close(fd);
- return (img);
-}
-
-void *mlx_xpm_to_image(t_xvar *xvar,char **xpm_data,int *width,int *height)
-{
- t_img *img;
-
- if (img = mlx_int_parse_xpm(xvar,xpm_data,0,mlx_int_static_line))
- {
- *width = img->width;
- *height = img->height;
- }
- return (img);
-}
diff --git a/libs/minilibx-linux-master/rgb2c.pl b/libs/minilibx-linux-master/rgb2c.pl
deleted file mode 100755
index 9ef39a0..0000000
--- a/libs/minilibx-linux-master/rgb2c.pl
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/perl
-#
-## rgb2c.pl for MiniLibX in /home/boulon/work/c/raytraceur/minilibx
-##
-## Made by Olivier Crouzet
-## Login
-##
-## Started on Tue Oct 5 16:33:46 2004 Olivier Crouzet
-## Last update Tue Oct 5 16:36:11 2004 Olivier Crouzet
-##
-
-
-#
-# Generate a .c file with encoded colors, from the XFree86 rgb.txt file.
-#
-
-open(RGB, "/usr/X11/lib/X11/rgb.txt");
-
-
-printf("/*\n** This is a generated file with rgb2c.pl and rgb.txt from\n");
-printf("** the XFree86 distribution.\n*/\n\n");
-printf("struct s_col_name mlx_col_name[] =\n{\n");
-
-while ()
-{
- @tab = split;
- if ($tab[0] ne "!")
- {
- $color = $tab[3];
- if ("$tab[4]" ne "")
- {
- $color = "$tab[3] $tab[4]";
- }
- printf(" { \"%s\" , 0x%x },\n", $color, $tab[0]*65536+$tab[1]*256+$tab[2]);
- }
-}
-
-printf(" { 0, 0 }\n};\n");
diff --git a/libs/minilibx-linux-master/test/Makefile.gen b/libs/minilibx-linux-master/test/Makefile.gen
deleted file mode 100644
index 2fcca89..0000000
--- a/libs/minilibx-linux-master/test/Makefile.gen
+++ /dev/null
@@ -1,26 +0,0 @@
-INC=/usr/include
-HT=Linux
-DOCP=do_cp
-
-
-
-INCLIB=$(INC)/../lib
-
-CC=gcc
-
-CFLAGS= -I$(INC) -O3 -I..
-
-NAME= mlx-test
-SRC = main.c
-OBJ = $(SRC:.c=.o)
-
-all :$(NAME)
-
-$(NAME) :$(OBJ)
- $(CC) -o $(NAME) $(OBJ) -L.. -lmlx -L$(INCLIB) -lXext -lX11 -lm -lbsd
-
-clean :
- rm -f $(NAME) $(OBJ) *~ core *.core
-
-
-re : clean all
diff --git a/libs/minilibx-linux-master/test/Makefile.mk b/libs/minilibx-linux-master/test/Makefile.mk
deleted file mode 100644
index ca55cd3..0000000
--- a/libs/minilibx-linux-master/test/Makefile.mk
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-INC=%%%%
-
-INCLIB=$(INC)/../lib
-
-CC=gcc
-
-CFLAGS= -I$(INC) -O3 -I..
-
-NAME= mlx-test
-SRC = main.c
-OBJ = $(SRC:.c=.o)
-
-all :$(NAME)
-
-$(NAME) :$(OBJ)
- $(CC) -o $(NAME) $(OBJ) -L.. -lmlx -L$(INCLIB) -lXext -lX11 -lm -lbsd
-
-clean :
- rm -f $(NAME) $(OBJ) *~ core *.core
-
-
-re : clean all
diff --git a/libs/minilibx-linux-master/test/main.c b/libs/minilibx-linux-master/test/main.c
deleted file mode 100644
index 578eaae..0000000
--- a/libs/minilibx-linux-master/test/main.c
+++ /dev/null
@@ -1,287 +0,0 @@
-
-#include "mlx.h"
-#include "mlx_int.h"
-
-#define WIN1_SX 242
-#define WIN1_SY 242
-#define IM1_SX 42
-#define IM1_SY 42
-#define IM3_SX 242
-#define IM3_SY 242
-
-void *mlx;
-void *win1;
-void *win2;
-void *win3;
-void *im1;
-void *im2;
-void *im3;
-void *im4;
-int bpp1;
-int bpp2;
-int bpp3;
-int bpp4;
-int sl1;
-int sl2;
-int sl3;
-int sl4;
-int endian1;
-int endian2;
-int endian3;
-int endian4;
-char *data1;
-char *data2;
-char *data3;
-char *data4;
-int xpm1_x;
-int xpm1_y;
-
-int local_endian;
-
-int color_map_1(void *win,int w,int h);
-int color_map_2(unsigned char *data,int bpp,int sl,int w,int h,int endian, int type);
-
-int expose_win1(void *p)
-{
- mlx_put_image_to_window(mlx,win1,im3,0,0);
-}
-
-int expose_win2(void *p)
-{
- mlx_put_image_to_window(mlx,win2,im4,0,0);
- mlx_put_image_to_window(mlx,win2,im2,0,0);
-}
-
-int key_win1(int key,void *p)
-{
- printf("Key in Win1 : %d\n",key);
- if (key==0xFF1B)
- exit(0);
-}
-
-int key_win2(int key,void *p)
-{
- printf("Key in Win2 : %d\n",key);
- if (key==0xFF1B)
- exit(0);
-}
-
-int key_win3(int key,void *p)
-{
- printf("Key in Win3 : %d\n",key);
- if (key==0xFF1B)
- mlx_destroy_window(mlx,win3);
-}
-
-int mouse_win1(int button,int x,int y, void *p)
-{
- printf("Mouse in Win1, button %d at %dx%d.\n",button,x,y);
-}
-
-int mouse_win2(int button,int x,int y, void *p)
-{
- printf("Mouse in Win2, button %d at %dx%d.\n",button,x,y);
-}
-
-int mouse_win3(int x,int y, void *p)
-{
- printf("Mouse moving in Win3, at %dx%d.\n",x,y);
-}
-
-
-int main()
-{
- int a;
-
- printf("MinilibX Test Program\n");
- a = 0x11223344;
- if (((unsigned char *)&a)[0] == 0x11)
- local_endian = 1;
- else
- local_endian = 0;
- printf(" => Local Endian : %d\n",local_endian);
-
- printf(" => Connection ...");
- if (!(mlx = mlx_init()))
- {
- printf(" !! KO !!\n");
- exit(1);
- }
- printf("OK (use_xshm %d pshm_format %d)\n",((t_xvar *)mlx)->use_xshm,((t_xvar *)mlx)->pshm_format);
-
- printf(" => Window1 %dx%d \"Title 1\" ...",WIN1_SX,WIN1_SY);
- if (!(win1 = mlx_new_window(mlx,WIN1_SX,WIN1_SY,"Title1")))
- {
- printf(" !! KO !!\n");
- exit(1);
- }
- printf("OK\n");
-
- printf(" => Colormap sans event ...");
- color_map_1(win1,WIN1_SX,WIN1_SY);
- printf("OK\n");
- sleep(2);
-
- printf(" => Clear Window ...");
- mlx_clear_window(mlx,win1);
- printf("OK\n");
- sleep(2);
-
- printf(" => Image1 ZPixmap %dx%d ...",IM1_SX,IM1_SY);
- if (!(im1 = mlx_new_image(mlx,IM1_SX,IM1_SY)))
- {
- printf(" !! KO !!\n");
- exit(1);
- }
- data1 = mlx_get_data_addr(im1,&bpp1,&sl1,&endian1);
- printf("OK (bpp1: %d, sizeline1: %d endian: %d type: %d)\n",bpp1,sl1,endian1,
- ((t_img *)im1)->type);
-
- printf(" => Fill Image1 ...");
- color_map_2(data1,bpp1,sl1,IM1_SX,IM1_SY,endian1, 1);
- printf("OK (pixmap : %d)\n",(int)((t_img *)im1)->pix);
-
- printf(" => Put Image1 ...");
- mlx_put_image_to_window(mlx,win1,im1,20,20);
- printf("OK\n");
- sleep(2);
-
- printf(" => Destroy Image1 ... ");
- mlx_destroy_image(mlx, im1);
- printf("OK\n");
- sleep(2);
-
- printf(" => Image3 ZPixmap %dx%d ...",IM3_SX,IM3_SY);
- if (!(im3 = mlx_new_image(mlx,IM3_SX,IM3_SY)))
- {
- printf(" !! KO !!\n");
- exit(1);
- }
- data3 = mlx_get_data_addr(im3,&bpp3,&sl3,&endian3);
- printf("OK (bpp3 %d, sizeline3 %d endian3 %d type %d)\n",bpp3,sl3,endian3,
- ((t_img *)im3)->type);
-
- printf(" => Fill Image3 ...");
- color_map_2(data3,bpp3,sl3,IM3_SX,IM3_SY,endian3, 1);
- printf("OK (pixmap : %d)\n",(int)((t_img *)im3)->pix);
-
- printf(" => Put Image3 ...");
- mlx_put_image_to_window(mlx,win1,im3,20,20);
- printf("OK\n");
- sleep(2);
-
- printf(" => String ...");
- mlx_string_put(mlx,win1,5,WIN1_SY/2,0xFF99FF,"String output");
- mlx_string_put(mlx,win1,15,WIN1_SY/2+20,0x00FFFF,"MinilibX test");
- printf("OK\n");
- sleep(2);
-
- printf(" => Xpm from file ...");
- if (!(im2 = mlx_xpm_file_to_image(mlx,"open.xpm",&xpm1_x,&xpm1_y)))
- {
- printf(" !! KO !!\n");
- exit(1);
- }
- data2 = mlx_get_data_addr(im2,&bpp2,&sl2,&endian2);
- printf("OK (xpm %dx%d)(img bpp2: %d, sizeline2: %d endian: %d type: %d)\n",
- xpm1_x,xpm1_y,bpp2,sl2,endian2,((t_img *)im2)->type);
- sleep(2);
-
- printf(" => Put xpm ...");
- mlx_put_image_to_window(mlx,win1,im2,0,0);
- mlx_put_image_to_window(mlx,win1,im2,100,100);
- printf("OK\n");
- sleep(2);
-
- printf(" => 2nd window,");
- win2 = mlx_new_window(mlx,WIN1_SX,WIN1_SY,"Title2");
- if (!(im4 = mlx_new_image(mlx,IM3_SX, IM3_SY)))
- {
- printf(" !! KO !!\n");
- exit(1);
- }
- data4 = mlx_get_data_addr(im4,&bpp4,&sl4,&endian4);
- color_map_2(data4,bpp4,sl4,IM3_SX,IM3_SY,endian4, 2);
-
- printf(" 3rd window, Installing hooks ...");
- win3 = mlx_new_window(mlx,WIN1_SX,WIN1_SY,"Title3");
- mlx_expose_hook(win1,expose_win1,0);
- mlx_mouse_hook(win1,mouse_win1,0);
- mlx_key_hook(win1,key_win1,0);
- mlx_expose_hook(win2,expose_win2,0);
- mlx_mouse_hook(win2,mouse_win2,0);
- mlx_key_hook(win2,key_win2,0);
- mlx_key_hook(win3,key_win3,0);
-
- mlx_hook(win3, MotionNotify, PointerMotionMask, mouse_win3, 0);
-
- printf("OK\nNow in Loop. Just play. Esc in 3 to destroy, 1&2 to quit.\n");
-
- mlx_loop(mlx);
-}
-
-
-int color_map_1(void *win,int w,int h)
-{
- int x;
- int y;
- int color;
-
- x = w;
- while (x--)
- {
- y = h;
- while (y--)
- {
- color = (x*255)/w+((((w-x)*255)/w)<<16)+(((y*255)/h)<<8);
- mlx_pixel_put(mlx,win,x,y,color);
- }
- }
-}
-
-
-int color_map_2(unsigned char *data,int bpp,int sl,int w,int h,int endian, int type)
-{
- int x;
- int y;
- int opp;
- int dec;
- int color;
- int color2;
- unsigned char *ptr;
-
- opp = bpp/8;
- printf("(opp : %d) ",opp);
- y = h;
- while (y--)
- {
- ptr = data+y*sl;
- x = w;
- while (x--)
- {
- if (type==2)
- color = (y*255)/w+((((w-x)*255)/w)<<16)
- +(((y*255)/h)<<8);
- else
- color = (x*255)/w+((((w-x)*255)/w)<<16)+(((y*255)/h)<<8);
- color2 = mlx_get_color_value(mlx,color);
- dec = opp;
- while (dec--)
- if (endian==local_endian)
- {
- if (endian)
- *(ptr+x*opp+dec) = ((unsigned char *)(&color2))[4-opp+dec];
- else
- *(ptr+x*opp+dec) = ((unsigned char *)(&color2))[dec];
- }
- else
- {
- if (endian)
- *(ptr+x*opp+dec) = ((unsigned char *)(&color2))[opp-1-dec];
- else
- *(ptr+x*opp+dec) = ((unsigned char *)(&color2))[3-dec];
- }
- }
- }
-
-}
diff --git a/libs/minilibx-linux-master/test/mlx-test b/libs/minilibx-linux-master/test/mlx-test
deleted file mode 100755
index b7c7fef..0000000
Binary files a/libs/minilibx-linux-master/test/mlx-test and /dev/null differ
diff --git a/libs/minilibx-linux-master/test/new_win.c b/libs/minilibx-linux-master/test/new_win.c
deleted file mode 100644
index 62bed4b..0000000
--- a/libs/minilibx-linux-master/test/new_win.c
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-#include "mlx.h"
-
-
-void *mlx;
-void *win1;
-void *win2;
-
-
-
-int gere_mouse(int x,int y,int button,void*toto)
-{
- printf("Mouse event - new win\n");
- mlx_destroy_window(mlx,win1);
- win1 = mlx_new_window(mlx,random()%500,random()%500,"new win");
- mlx_mouse_hook(win1,gere_mouse,0);
-}
-
-
-int main()
-{
- srandom(time(0));
- mlx = mlx_init();
- win1 = mlx_new_window(mlx,300,300,"win1");
- win2 = mlx_new_window(mlx,600,600,"win2");
- mlx_mouse_hook(win1,gere_mouse,0);
- mlx_mouse_hook(win2,gere_mouse,0);
- mlx_loop(mlx);
-}
diff --git a/libs/minilibx-linux-master/test/open.xpm b/libs/minilibx-linux-master/test/open.xpm
deleted file mode 100644
index 87be371..0000000
--- a/libs/minilibx-linux-master/test/open.xpm
+++ /dev/null
@@ -1,1439 +0,0 @@
-/* XPM */
-static char * open30_2_xpm[] = {
-"64 64 1372 2",
-" c None",
-". c #08090D",
-"+ c #1A1E23",
-"@ c #1F2124",
-"# c #060809",
-"$ c #1A1E21",
-"% c #4F606C",
-"& c #3D4145",
-"* c #868D93",
-"= c #454E56",
-"- c #627481",
-"; c #667C8A",
-"> c #2D3031",
-", c #D7E1E7",
-"' c #4D5157",
-") c #8997A5",
-"! c #282E31",
-"~ c #333B41",
-"{ c #A5C6DB",
-"] c #718C9B",
-"^ c #000000",
-"/ c #181B1F",
-"( c #262828",
-"_ c #D2DEE7",
-": c #B8C5D0",
-"< c #151719",
-"[ c #08090B",
-"} c #272B30",
-"| c #2D3037",
-"1 c #26282C",
-"2 c #1A1D1F",
-"3 c #B1CADB",
-"4 c #56646E",
-"5 c #080809",
-"6 c #080A0C",
-"7 c #1E2126",
-"8 c #98B7C9",
-"9 c #A2CAE2",
-"0 c #7FA1B5",
-"a c #06080A",
-"b c #252729",
-"c c #A7ADB2",
-"d c #272B2E",
-"e c #1E2023",
-"f c #C8D8E5",
-"g c #C9DDED",
-"h c #8996A3",
-"i c #6B7782",
-"j c #C7DFF0",
-"k c #CCE0F0",
-"l c #AFC1CF",
-"m c #47535B",
-"n c #B0D3E8",
-"o c #7E99A9",
-"p c #738493",
-"q c #97B4C7",
-"r c #53606A",
-"s c #6E8996",
-"t c #A1CBE3",
-"u c #9CC6DE",
-"v c #90B5CB",
-"w c #171D22",
-"x c #1E2629",
-"y c #020202",
-"z c #ABB3BA",
-"A c #BBC4C8",
-"B c #222323",
-"C c #141617",
-"D c #5D6164",
-"E c #ACB5BC",
-"F c #676D74",
-"G c #BDD4E5",
-"H c #B3D1E7",
-"I c #B0D1E7",
-"J c #728A99",
-"K c #94AEBF",
-"L c #B1D1E7",
-"M c #505C64",
-"N c #7B98A9",
-"O c #A1CBE0",
-"P c #99C3D9",
-"Q c #475863",
-"R c #A0C9DE",
-"S c #9CC6DA",
-"T c #9ECAE1",
-"U c #9CC5DD",
-"V c #9AC4DC",
-"W c #263137",
-"X c #3C4A55",
-"Y c #658190",
-"Z c #66686B",
-"` c #7D8085",
-" . c #363839",
-".. c #797E81",
-"+. c #D2DBE1",
-"@. c #DDE9F4",
-"#. c #CADEEF",
-"$. c #778593",
-"%. c #AED0E5",
-"&. c #9EC9DE",
-"*. c #9EC8DF",
-"=. c #9BC1D8",
-"-. c #9EC8DE",
-";. c #6B8596",
-">. c #9BC5DC",
-",. c #9BC6DF",
-"'. c #9CC5DC",
-"). c #688595",
-"!. c #6B8698",
-"~. c #9CC4DC",
-"{. c #9BC4DC",
-"]. c #9DC5DD",
-"^. c #647D8C",
-"/. c #485864",
-"(. c #161A1D",
-"_. c #36444C",
-":. c #95BDD5",
-"<. c #566E7E",
-"[. c #A4AAAD",
-"}. c #E9F2F7",
-"|. c #DEEAF6",
-"1. c #B5D4E9",
-"2. c #A9CFE3",
-"3. c #90B3C9",
-"4. c #9FCAE1",
-"5. c #9BC4DD",
-"6. c #7490A2",
-"7. c #99C2DB",
-"8. c #81A5BA",
-"9. c #9CC5DE",
-"0. c #98C1DA",
-"a. c #5F7889",
-"b. c #96BFD8",
-"c. c #44545F",
-"d. c #565A5E",
-"e. c #DFE6EC",
-"f. c #E6EEF7",
-"g. c #D6E4F2",
-"h. c #BFD6E9",
-"i. c #A9CCE3",
-"j. c #9FC8DD",
-"k. c #9DC6DD",
-"l. c #9CC4DD",
-"m. c #7D9FB0",
-"n. c #98C0D6",
-"o. c #9AC5DD",
-"p. c #97BFD8",
-"q. c #9BC5DF",
-"r. c #2D3840",
-"s. c #626567",
-"t. c #E7ECF5",
-"u. c #E1EAF5",
-"v. c #CEE3F3",
-"w. c #B7D6EA",
-"x. c #A4CBE0",
-"y. c #8AAFC5",
-"z. c #647F90",
-"A. c #648092",
-"B. c #89B0C7",
-"C. c #9CC6DF",
-"D. c #5D7486",
-"E. c #7B9BAF",
-"F. c #84A8BF",
-"G. c #9BC5DD",
-"H. c #96BED5",
-"I. c #4B5D69",
-"J. c #9BC5DE",
-"K. c #536B77",
-"L. c #2E3B41",
-"M. c #1B2124",
-"N. c #3F4F58",
-"O. c #4D5152",
-"P. c #E7EEF3",
-"Q. c #E2EAF5",
-"R. c #CEE2F2",
-"S. c #BAD5E9",
-"T. c #9DC2D7",
-"U. c #5C7281",
-"V. c #232A31",
-"W. c #08090A",
-"X. c #121418",
-"Y. c #131619",
-"Z. c #131719",
-"`. c #87ACC3",
-" + c #7B9BAE",
-".+ c #87ADC3",
-"++ c #8FB5CB",
-"@+ c #678295",
-"#+ c #96C0D8",
-"$+ c #607787",
-"%+ c #6B8595",
-"&+ c #96C1DB",
-"*+ c #6A8595",
-"=+ c #35424A",
-"-+ c #7090A1",
-";+ c #15191C",
-">+ c #2D3033",
-",+ c #DDE5EB",
-"'+ c #D2E3F1",
-")+ c #BAD7EB",
-"!+ c #A9CFE5",
-"~+ c #272F35",
-"{+ c #1C2227",
-"]+ c #4F697B",
-"^+ c #6B8FA9",
-"/+ c #759CB6",
-"(+ c #7BA0BB",
-"_+ c #80A5BC",
-":+ c #88B0C8",
-"<+ c #96C3DB",
-"[+ c #8FB6CD",
-"}+ c #80A1B3",
-"|+ c #556876",
-"1+ c #96BFD7",
-"2+ c #566B77",
-"3+ c #93B8CD",
-"4+ c #637A8D",
-"5+ c #9DC6DE",
-"6+ c #8FB4CA",
-"7+ c #55697A",
-"8+ c #6F8F9F",
-"9+ c #91BDD5",
-"0+ c #283239",
-"a+ c #050406",
-"b+ c #767B80",
-"c+ c #BDC6CE",
-"d+ c #D4E5F3",
-"e+ c #C1D7EA",
-"f+ c #A7CDE4",
-"g+ c #9FC9DE",
-"h+ c #668596",
-"i+ c #6D90AA",
-"j+ c #5C7994",
-"k+ c #60849F",
-"l+ c #6286A1",
-"m+ c #688CA8",
-"n+ c #7298B2",
-"o+ c #82A8C2",
-"p+ c #8FBAD5",
-"q+ c #96C2DB",
-"r+ c #89ADC4",
-"s+ c #96BED6",
-"t+ c #99C2DA",
-"u+ c #6C899A",
-"v+ c #92BBD2",
-"w+ c #9AC4DD",
-"x+ c #5B717D",
-"y+ c #9EC6DE",
-"z+ c #8BB1C9",
-"A+ c #718EA0",
-"B+ c #94C3DB",
-"C+ c #536B78",
-"D+ c #3E505F",
-"E+ c #4E6373",
-"F+ c #2C333C",
-"G+ c #070708",
-"H+ c #040404",
-"I+ c #1A1C1E",
-"J+ c #202326",
-"K+ c #050606",
-"L+ c #23292E",
-"M+ c #A1C0D4",
-"N+ c #9FC9DD",
-"O+ c #97C2DB",
-"P+ c #80A8C1",
-"Q+ c #668AA6",
-"R+ c #4B5D72",
-"S+ c #4C647A",
-"T+ c #5F80A0",
-"U+ c #60859E",
-"V+ c #678AA6",
-"W+ c #739BB5",
-"X+ c #85AEC7",
-"Y+ c #92BDD7",
-"Z+ c #96BFD5",
-"`+ c #627B8A",
-" @ c #89B1C9",
-".@ c #2B353C",
-"+@ c #7597B2",
-"@@ c #779CB8",
-"#@ c #52697C",
-"$@ c #1D2328",
-"%@ c #445663",
-"&@ c #5E7A8D",
-"*@ c #252F37",
-"=@ c #090909",
-"-@ c #859BB2",
-";@ c #859DB8",
-">@ c #6E8396",
-",@ c #252C33",
-"'@ c #9CC4D7",
-")@ c #92C0D9",
-"!@ c #79A0BA",
-"~@ c #6487A3",
-"{@ c #566979",
-"]@ c #8CB0C2",
-"^@ c #51697C",
-"/@ c #60849D",
-"(@ c #6D8EAC",
-"_@ c #7BA0BC",
-":@ c #8AB4CE",
-"<@ c #95C2DB",
-"[@ c #9AC5DC",
-"}@ c #95C1DA",
-"|@ c #607B8C",
-"1@ c #597488",
-"2@ c #7EA6BF",
-"3@ c #597587",
-"4@ c #455664",
-"5@ c #668598",
-"6@ c #82A9C4",
-"7@ c #617F92",
-"8@ c #1A2328",
-"9@ c #2B3137",
-"0@ c #728FAC",
-"a@ c #51657B",
-"b@ c #6B8AA8",
-"c@ c #8EAEC7",
-"d@ c #A8C8E2",
-"e@ c #92BDD6",
-"f@ c #769DBA",
-"g@ c #526E87",
-"h@ c #7490A0",
-"i@ c #A6CDE4",
-"j@ c #97BFD4",
-"k@ c #55697D",
-"l@ c #6286A0",
-"m@ c #7399B3",
-"n@ c #84ACC5",
-"o@ c #92BFD9",
-"p@ c #99C4DC",
-"q@ c #94C0DA",
-"r@ c #4F6575",
-"s@ c #7DA5BF",
-"t@ c #7FA2BC",
-"u@ c #8FB6CE",
-"v@ c #95C3DB",
-"w@ c #8EB8D2",
-"x@ c #6A879D",
-"y@ c #111318",
-"z@ c #252A30",
-"A@ c #81868C",
-"B@ c #A5ABAD",
-"C@ c #70767C",
-"D@ c #38434F",
-"E@ c #637F9B",
-"F@ c #516980",
-"G@ c #799AB5",
-"H@ c #A5C3D9",
-"I@ c #93BDD6",
-"J@ c #779EBA",
-"K@ c #445A6B",
-"L@ c #93B5C9",
-"M@ c #B6D3E8",
-"N@ c #AECFE4",
-"O@ c #95BDD2",
-"P@ c #52687A",
-"Q@ c #6486A3",
-"R@ c #7092B0",
-"S@ c #90BCD6",
-"T@ c #97C4DC",
-"U@ c #A0C9E0",
-"V@ c #99C5DD",
-"W@ c #86AEC6",
-"X@ c #8FBAD4",
-"Y@ c #91BDD6",
-"Z@ c #7094AC",
-"`@ c #2A353E",
-" # c #0B0E10",
-".# c #888D90",
-"+# c #787D82",
-"@# c #465360",
-"## c #56697F",
-"$# c #A6CADD",
-"%# c #5A7382",
-" c #6C8CAA",
-"*# c #A5BED3",
-"=# c #A7CAE0",
-"-# c #94C1DA",
-";# c #7EA4BF",
-"># c #415160",
-",# c #9DC3D5",
-"'# c #B3CFE1",
-")# c #AAC3D4",
-"!# c #A8CDE4",
-"~# c #89ACBE",
-"{# c #567088",
-"]# c #6C91AC",
-"^# c #81A7C2",
-"/# c #96C4DC",
-"(# c #85A9BD",
-"_# c #708C9B",
-":# c #5A6E7B",
-"<# c #6C8695",
-"[# c #97C3DB",
-"}# c #8BB5CE",
-"|# c #425461",
-"1# c #63819E",
-"2# c #415465",
-"3# c #0B0D0E",
-"4# c #607387",
-"5# c #687D8C",
-"6# c #B8D6E9",
-"7# c #7893A2",
-"8# c #576F85",
-"9# c #A7BACF",
-"0# c #B0CEE5",
-"a# c #98C4DC",
-"b# c #88B1CA",
-"c# c #36444E",
-"d# c #8FA0AD",
-"e# c #73818D",
-"f# c #596D81",
-"g# c #B4D0E4",
-"h# c #A3CDE2",
-"i# c #658296",
-"j# c #6A8DAB",
-"k# c #7BA5C0",
-"l# c #94BAD2",
-"m# c #6D899B",
-"n# c #99C3DC",
-"o# c #8EB9D2",
-"p# c #7AA0BA",
-"q# c #6C8FAB",
-"r# c #6484A1",
-"s# c #1F252C",
-"t# c #121619",
-"u# c #7E96B0",
-"v# c #7A8A96",
-"w# c #BCD7EA",
-"x# c #A0C5D9",
-"y# c #3C4B57",
-"z# c #A9BACD",
-"A# c #BCD5E8",
-"B# c #84A6BA",
-"C# c #8EA1AE",
-"D# c #CFD1D4",
-"E# c #ECF6FA",
-"F# c #ABB7C2",
-"G# c #556F84",
-"H# c #57626A",
-"I# c #5C7078",
-"J# c #6C8AA7",
-"K# c #80A6C0",
-"L# c #91B8D0",
-"M# c #94BFD8",
-"N# c #87B0CA",
-"O# c #7CA2BB",
-"P# c #7097AF",
-"Q# c #495E6F",
-"R# c #0C0E11",
-"S# c #3A3F43",
-"T# c #8AA3BB",
-"U# c #778592",
-"V# c #C0D8EB",
-"W# c #B3D5E9",
-"X# c #404A53",
-"Y# c #B2C2D3",
-"Z# c #96A1AC",
-"`# c #9DB2C3",
-" $ c #AEBECE",
-".$ c #EDEFF3",
-"+$ c #F7FAFC",
-"@$ c #B6BFC7",
-"#$ c #556E85",
-"$$ c #121314",
-"%$ c #2B2E2F",
-"&$ c #555A5E",
-"*$ c #3B4C5B",
-"=$ c #6F8EA4",
-"-$ c #92BED8",
-";$ c #9DC7DF",
-">$ c #87ACC1",
-",$ c #546A78",
-"'$ c #516874",
-")$ c #4E6570",
-"!$ c #4D6271",
-"~$ c #4C6271",
-"{$ c #4E677A",
-"]$ c #38454E",
-"^$ c #6C7278",
-"/$ c #86A1B6",
-"($ c #5C656C",
-"_$ c #A4B0BA",
-":$ c #555D64",
-"<$ c #657178",
-"[$ c #A6B0B5",
-"}$ c #939CA1",
-"|$ c #D4E4F1",
-"1$ c #A0BACE",
-"2$ c #B9C7D7",
-"3$ c #F6F7F9",
-"4$ c #C6CED1",
-"5$ c #506A7C",
-"6$ c #060607",
-"7$ c #676A6B",
-"8$ c #91999F",
-"9$ c #7CA3BE",
-"0$ c #96BCD4",
-"a$ c #5B717E",
-"b$ c #4B5F6C",
-"c$ c #455864",
-"d$ c #5B717F",
-"e$ c #81A5B9",
-"f$ c #98C4DD",
-"g$ c #93BFD8",
-"h$ c #87B1CA",
-"i$ c #7BA1BC",
-"j$ c #5A7489",
-"k$ c #222A33",
-"l$ c #838A92",
-"m$ c #9DADBC",
-"n$ c #ECF0F5",
-"o$ c #F1F9FB",
-"p$ c #818A8D",
-"q$ c #4A5155",
-"r$ c #6A6F72",
-"s$ c #7E898F",
-"t$ c #E6F1F7",
-"u$ c #CADCED",
-"v$ c #A0B7CC",
-"w$ c #C6D1DF",
-"x$ c #AFB3B4",
-"y$ c #5F707D",
-"z$ c #CBCFD1",
-"A$ c #F4F5F6",
-"B$ c #66737F",
-"C$ c #87B2CB",
-"D$ c #90B7CD",
-"E$ c #596E7B",
-"F$ c #586F7E",
-"G$ c #8BB0C8",
-"H$ c #91BED6",
-"I$ c #83ADC7",
-"J$ c #6D8EA7",
-"K$ c #3F5161",
-"L$ c #2D3A45",
-"M$ c #1F2020",
-"N$ c #BDC5CC",
-"O$ c #E0EDF5",
-"P$ c #BBCAD8",
-"Q$ c #E1E4E7",
-"R$ c #5E6368",
-"S$ c #5B5F62",
-"T$ c #D9E7F3",
-"U$ c #A4C3D6",
-"V$ c #89A3B3",
-"W$ c #7B91A1",
-"X$ c #627990",
-"Y$ c #42505A",
-"Z$ c #CACCCE",
-"`$ c #F9F9F9",
-" % c #FDFDFD",
-".% c #BCBEC0",
-"+% c #5C7689",
-"@% c #8DB9D3",
-"#% c #8FB5CC",
-"$% c #536471",
-"%% c #98C1D9",
-"&% c #91BED7",
-"*% c #81AAC5",
-"=% c #597386",
-"-% c #41535F",
-";% c #6486A2",
-">% c #4D667D",
-",% c #070809",
-"'% c #44484E",
-")% c #BEC8D0",
-"!% c #8096A6",
-"~% c #516473",
-"{% c #A9ACAF",
-"]% c #8B8F91",
-"^% c #A8B3BD",
-"/% c #C5DAEB",
-"(% c #9FC8E1",
-"_% c #8FBCD6",
-":% c #81A8C2",
-"<% c #6C90AC",
-"[% c #56728C",
-"}% c #585B5F",
-"|% c #CBCDCD",
-"1% c #C1C3C6",
-"2% c #4F565F",
-"3% c #82ABC3",
-"4% c #93BCD3",
-"5% c #95BED7",
-"6% c #8EB9D3",
-"7% c #5B788B",
-"8% c #627E91",
-"9% c #7FA7C1",
-"0% c #6C91AB",
-"a% c #546F87",
-"b% c #6F7376",
-"c% c #D5E2EF",
-"d% c #A9C4D8",
-"e% c #81A1BA",
-"f% c #333940",
-"g% c #5F6B76",
-"h% c #C0D5E8",
-"i% c #AACCE2",
-"j% c #8EB8D3",
-"k% c #7FA5BF",
-"l% c #7095B0",
-"m% c #4E697E",
-"n% c #07090A",
-"o% c #0D0F10",
-"p% c #7193A6",
-"q% c #96C3DC",
-"r% c #8EBCD7",
-"s% c #91BDD7",
-"t% c #8FBBD6",
-"u% c #7699AD",
-"v% c #4D626F",
-"w% c #252D33",
-"x% c #101215",
-"y% c #0C0D0E",
-"z% c #0A0C0E",
-"A% c #06090A",
-"B% c #7F8488",
-"C% c #D7E3F1",
-"D% c #B6D0E4",
-"E% c #A3C2D7",
-"F% c #596872",
-"G% c #A9BED0",
-"H% c #B4D0E5",
-"I% c #9EC8DC",
-"J% c #8FB9D4",
-"K% c #85ADC7",
-"L% c #7FA4BE",
-"M% c #4B606F",
-"N% c #4E6372",
-"O% c #89B6D0",
-"P% c #92C1DA",
-"Q% c #9DC7DD",
-"R% c #95C0DA",
-"S% c #94BED8",
-"T% c #8BB8D1",
-"U% c #7AA0B9",
-"V% c #4E667A",
-"W% c #344151",
-"X% c #0C0D0F",
-"Y% c #8A8F92",
-"Z% c #D4E6F5",
-"`% c #BCD5E9",
-" & c #8599A5",
-".& c #939DA6",
-"+& c #C4DAEB",
-"@& c #89A6B9",
-"#& c #7D9FB5",
-"$& c #98C3DC",
-"%& c #95C0D9",
-"&& c #7CA2B9",
-"*& c #7697AE",
-"=& c #698498",
-"-& c #7394A8",
-";& c #9EC7DF",
-">& c #8DB1C4",
-",& c #6B8594",
-"'& c #50636C",
-")& c #50626C",
-"!& c #7F9FB1",
-"~& c #93B8D0",
-"{& c #627A88",
-"]& c #90B6CC",
-"^& c #93BDD7",
-"/& c #87AFC9",
-"(& c #7291A7",
-"_& c #384651",
-":& c #121618",
-"<& c #12171B",
-"[& c #4F6986",
-"}& c #597998",
-"|& c #324052",
-"1& c #969CA1",
-"2& c #D6E6F5",
-"3& c #C6DCEE",
-"4& c #505A64",
-"5& c #82929F",
-"6& c #99ABBB",
-"7& c #A1B9CA",
-"8& c #87A0B0",
-"9& c #718EA1",
-"0& c #8DB2C9",
-"a& c #8BAEC4",
-"b& c #586D7D",
-"c& c #97C0D9",
-"d& c #8DB3C9",
-"e& c #95B8CD",
-"f& c #9DC0D6",
-"g& c #6F8B9C",
-"h& c #354249",
-"i& c #464E54",
-"j& c #8A98A5",
-"k& c #AABAC7",
-"l& c #86939E",
-"m& c #41494F",
-"n& c #4A5861",
-"o& c #97C1DA",
-"p& c #5E7888",
-"q& c #5C7482",
-"r& c #88ACC2",
-"s& c #91BFD7",
-"t& c #799CB5",
-"u& c #47596A",
-"v& c #0D0F12",
-"w& c #1A2127",
-"x& c #56778D",
-"y& c #688BA9",
-"z& c #5D7F9E",
-"A& c #547391",
-"B& c #0E1013",
-"C& c #9DA6AB",
-"D& c #C8DCED",
-"E& c #7A8996",
-"F& c #B5CEE0",
-"G& c #BCDBEC",
-"H& c #B9D5EA",
-"I& c #8BA2B2",
-"J& c #6C8A9D",
-"K& c #97BFD7",
-"L& c #3E4E59",
-"M& c #92B5CB",
-"N& c #535F68",
-"O& c #454F56",
-"P& c #6F7C87",
-"Q& c #ABC0D1",
-"R& c #C7DCEE",
-"S& c #C5DBED",
-"T& c #C2D7EA",
-"U& c #BFD8EA",
-"V& c #BCD7EB",
-"W& c #62717B",
-"X& c #5B6F7B",
-"Y& c #95C3DC",
-"Z& c #8BB2C9",
-"`& c #485761",
-" * c #42525F",
-".* c #6686A1",
-"+* c #587896",
-"@* c #1B2129",
-"#* c #5C7A94",
-"$* c #7DA2BD",
-"%* c #84AEC7",
-"&* c #749BB5",
-"** c #5C7E9C",
-"=* c #27343F",
-"-* c #A4A9B2",
-";* c #D9E7F4",
-">* c #C8DBEC",
-",* c #B1C8DA",
-"'* c #5D6C76",
-")* c #A8C5D8",
-"!* c #A6BDD0",
-"~* c #B9D6EA",
-"{* c #B9D4E9",
-"]* c #8198A8",
-"^* c #8AADC3",
-"/* c #8CB1CA",
-"(* c #96C2D8",
-"_* c #A3C7DF",
-":* c #ADCDE3",
-"<* c #ABD0E4",
-"[* c #ADCFE3",
-"}* c #AACEE4",
-"|* c #A4CDE3",
-"1* c #A1CBE1",
-"2* c #A3CCE3",
-"3* c #A2C9DF",
-"4* c #41515A",
-"5* c #81A2B5",
-"6* c #94C0D7",
-"7* c #5E7789",
-"8* c #526777",
-"9* c #516777",
-"0* c #6B8CA5",
-"a* c #759CBA",
-"b* c #658AA5",
-"c* c #587798",
-"d* c #1B242B",
-"e* c #0E1110",
-"f* c #101214",
-"g* c #202931",
-"h* c #59758E",
-"i* c #799FBB",
-"j* c #84B1CA",
-"k* c #86ACC6",
-"l* c #354758",
-"m* c #A0A6AE",
-"n* c #DAE6F2",
-"o* c #C4DCEE",
-"p* c #B4D2E8",
-"q* c #3E4A53",
-"r* c #698091",
-"s* c #5D7581",
-"t* c #A3CAE0",
-"u* c #A6CFE5",
-"v* c #A5CCE5",
-"w* c #718A9C",
-"x* c #98C3DB",
-"y* c #83ABC7",
-"z* c #2E3B46",
-"A* c #33414A",
-"B* c #678398",
-"C* c #8AB3CE",
-"D* c #93BED7",
-"E* c #97C4DB",
-"F* c #42525E",
-"G* c #88ACC0",
-"H* c #789EB9",
-"I* c #7A9FBB",
-"J* c #7EA2BD",
-"K* c #779DB5",
-"L* c #577081",
-"M* c #5B7B9B",
-"N* c #1D2229",
-"O* c #547390",
-"P* c #54728D",
-"Q* c #6082A0",
-"R* c #688EA9",
-"S* c #6689A7",
-"T* c #6086A0",
-"U* c #6285A1",
-"V* c #6B8DAA",
-"W* c #718FAB",
-"X* c #3E5568",
-"Y* c #969DA1",
-"Z* c #DBE8F4",
-"`* c #95ACBD",
-" = c #758B9A",
-".= c #A4C9DE",
-"+= c #698190",
-"@= c #667E8A",
-"#= c #7D99AA",
-"$= c #7B9BAD",
-"%= c #6F8C9A",
-"&= c #536976",
-"*= c #84ADC6",
-"== c #6D92AD",
-"-= c #62829E",
-";= c #43576A",
-">= c #2F3B46",
-",= c #5C788A",
-"'= c #86AFC8",
-")= c #93BED8",
-"!= c #93BAD5",
-"~= c #93BAD2",
-"{= c #92BCD4",
-"]= c #7EA2B6",
-"^= c #3D4D56",
-"/= c #485B67",
-"(= c #7596A9",
-"_= c #8CBBD4",
-":= c #90BCD5",
-"<= c #91BFD9",
-"[= c #789BAD",
-"}= c #465B6A",
-"|= c #59789A",
-"1= c #5D7F9D",
-"2= c #5E839C",
-"3= c #59799A",
-"4= c #415569",
-"5= c #2D3A46",
-"6= c #2E3B49",
-"7= c #4A647C",
-"8= c #587690",
-"9= c #39485A",
-"0= c #7F8589",
-"a= c #D9E8F5",
-"b= c #CCDEEE",
-"c= c #8597A5",
-"d= c #B3D2E3",
-"e= c #9BB3C4",
-"f= c #B2CEE1",
-"g= c #B2D1E7",
-"h= c #ABCFE6",
-"i= c #94B7CB",
-"j= c #495C6A",
-"k= c #688498",
-"l= c #617B8A",
-"m= c #85ADC8",
-"n= c #78A0B9",
-"o= c #62819B",
-"p= c #2E3843",
-"q= c #485A6C",
-"r= c #67889C",
-"s= c #8AB5CF",
-"t= c #8EB9D1",
-"u= c #6C899B",
-"v= c #6E91A7",
-"w= c #678399",
-"x= c #6888A1",
-"y= c #323E48",
-"z= c #5B7585",
-"A= c #98C5DD",
-"B= c #83ACC1",
-"C= c #2D373F",
-"D= c #4B637C",
-"E= c #567694",
-"F= c #26313C",
-"G= c #15191F",
-"H= c #4D647A",
-"I= c #252F39",
-"J= c #5D6163",
-"K= c #DDE9F5",
-"L= c #CEDFEE",
-"M= c #8898A5",
-"N= c #B0CBDC",
-"O= c #BFDAEC",
-"P= c #BFDBEC",
-"Q= c #BBDAEC",
-"R= c #BAD7EA",
-"S= c #6B808F",
-"T= c #7297B0",
-"U= c #8CB8D1",
-"V= c #95C1D9",
-"W= c #91BCD6",
-"X= c #86AEC8",
-"Y= c #7496B3",
-"Z= c #6587A2",
-"`= c #384958",
-" - c #323F4B",
-".- c #546A7C",
-"+- c #6C88A1",
-"@- c #779AB1",
-"#- c #658297",
-"$- c #3B4A58",
-"%- c #33404B",
-"&- c #202830",
-"*- c #577287",
-"=- c #86B1CC",
-"-- c #86ACC0",
-";- c #6E8797",
-">- c #9CC7DF",
-",- c #92BCD5",
-"'- c #91BCD5",
-")- c #8EB6CE",
-"!- c #344453",
-"~- c #263039",
-"{- c #364452",
-"]- c #2B3643",
-"^- c #2A2D2E",
-"/- c #E1EBF4",
-"(- c #D2E4F3",
-"_- c #A0B2C3",
-":- c #8094A1",
-"<- c #BAD8EB",
-"[- c #B8D6EA",
-"}- c #485A6A",
-"|- c #789FB9",
-"1- c #90BBD3",
-"2- c #94C4DC",
-"3- c #88B3CD",
-"4- c #7A9EB9",
-"5- c #698BA8",
-"6- c #4D677C",
-"7- c #151A1E",
-"8- c #1A2125",
-"9- c #171C21",
-"0- c #1D2329",
-"a- c #1D262E",
-"b- c #486073",
-"c- c #6A8CAA",
-"d- c #7CA2BE",
-"e- c #90BDD7",
-"f- c #9AC5DE",
-"g- c #7493A2",
-"h- c #708B99",
-"i- c #8CB7D1",
-"j- c #7494AB",
-"k- c #68889F",
-"l- c #6A8FA5",
-"m- c #7BA2BC",
-"n- c #171D21",
-"o- c #1D262F",
-"p- c #212B36",
-"q- c #09090B",
-"r- c #BBC2C9",
-"s- c #D4E4F2",
-"t- c #C1D9EB",
-"u- c #44515A",
-"v- c #92B5C9",
-"w- c #6B8795",
-"x- c #4E687E",
-"y- c #7EA6C0",
-"z- c #91BED8",
-"A- c #93BFD9",
-"B- c #8CB5D0",
-"C- c #7DA4BE",
-"D- c #6F92AE",
-"E- c #6687A5",
-"F- c #526C85",
-"G- c #415669",
-"H- c #384655",
-"I- c #6589A4",
-"J- c #6E92AE",
-"K- c #80A8C2",
-"L- c #92BCD6",
-"M- c #91BFD8",
-"N- c #799AAF",
-"O- c #6A8796",
-"P- c #81AAC3",
-"Q- c #577187",
-"R- c #1F2930",
-"S- c #192027",
-"T- c #1B2227",
-"U- c #0D1010",
-"V- c #0E1012",
-"W- c #070709",
-"X- c #5C6062",
-"Y- c #DCE8F3",
-"Z- c #C4DCEF",
-"`- c #9BB3C6",
-" ; c #3A424F",
-".; c #313A44",
-"+; c #35424C",
-"@; c #374655",
-"#; c #6E91AD",
-"$; c #87B2CC",
-"%; c #799EBA",
-"&; c #618298",
-"*; c #7095AF",
-"=; c #435663",
-"-; c #80A7C0",
-";; c #95C4DC",
-">; c #779CB3",
-",; c #526D7E",
-"'; c #516A7A",
-"); c #526B7B",
-"!; c #465764",
-"~; c #34414E",
-"{; c #5C7E9A",
-"]; c #2B3741",
-"^; c #4B657F",
-"/; c #5C7D9C",
-"(; c #557088",
-"_; c #0F0F10",
-":; c #B9C2CA",
-"<; c #CCDFEF",
-"[; c #B4CDE1",
-"}; c #8DAEC8",
-"|; c #6F93AE",
-"1; c #678CA6",
-"2; c #6E92AF",
-"3; c #81A8C1",
-"4; c #8FBBD5",
-"5; c #8DB9D2",
-"6; c #6D8FA2",
-"7; c #586F82",
-"8; c #394851",
-"9; c #86B0C6",
-"0; c #85AFC8",
-"a; c #6F94AF",
-"b; c #698DA8",
-"c; c #6889A7",
-"d; c #5E7E9F",
-"e; c #475D75",
-"f; c #2E3C4A",
-"g; c #5D7E9D",
-"h; c #405465",
-"i; c #36393B",
-"j; c #D7E5F1",
-"k; c #A4C5DC",
-"l; c #668496",
-"m; c #7595AB",
-"n; c #7798AE",
-"o; c #97C2DA",
-"p; c #789DB3",
-"q; c #8BB1C8",
-"r; c #93C0D9",
-"s; c #8BB5CF",
-"t; c #85AFC9",
-"u; c #82AAC6",
-"v; c #5F7C95",
-"w; c #1E252C",
-"x; c #54728E",
-"y; c #587899",
-"z; c #5A7B9B",
-"A; c #2D3843",
-"B; c #798086",
-"C; c #D1E3F1",
-"D; c #B7D3E8",
-"E; c #7E98AB",
-"F; c #181C1F",
-"G; c #46525F",
-"H; c #80A1B8",
-"I; c #99C3DB",
-"J; c #85ACC2",
-"K; c #21272D",
-"L; c #0A0B0D",
-"M; c #53718C",
-"N; c #577797",
-"O; c #1B2229",
-"P; c #0D0E0F",
-"Q; c #B3BDC4",
-"R; c #CADDED",
-"S; c #B4D3E7",
-"T; c #2B3339",
-"U; c #2F3840",
-"V; c #7899AC",
-"W; c #93C1D9",
-"X; c #8FBCD5",
-"Y; c #8BB6D1",
-"Z; c #8DB8D2",
-"`; c #92BFD8",
-" > c #678092",
-".> c #547089",
-"+> c #5C7F9B",
-"@> c #1F262E",
-"#> c #202223",
-"$> c #B1BECB",
-"%> c #C3D9EB",
-"&> c #7B8D99",
-"*> c #708B9A",
-"=> c #85ABC1",
-"-> c #7FA3BA",
-";> c #92BBD3",
-">> c #7CA0B4",
-",> c #97BDD4",
-"'> c #657E8F",
-")> c #93BDD4",
-"!> c #88ADC7",
-"~> c #6F94AE",
-"{> c #526A7E",
-"]> c #65849B",
-"^> c #799DBB",
-"/> c #84AFC9",
-"(> c #8FB9D2",
-"_> c #323C45",
-":> c #516C84",
-"<> c #658AA4",
-"[> c #5B7C9B",
-"}> c #2E3A49",
-"|> c #2A3038",
-"1> c #252D3A",
-"2> c #1B1E20",
-"3> c #ADBFCF",
-"4> c #C0D6E7",
-"5> c #B0CDE2",
-"6> c #8EB3C9",
-"7> c #526975",
-"8> c #6B899D",
-"9> c #597183",
-"0> c #90BAD5",
-"a> c #94C2DA",
-"b> c #82ABC5",
-"c> c #495E6E",
-"d> c #82A8C3",
-"e> c #81A4BA",
-"f> c #7594A5",
-"g> c #87ABC3",
-"h> c #4D6573",
-"i> c #6689A6",
-"j> c #526E85",
-"k> c #243037",
-"l> c #607B96",
-"m> c #7699B6",
-"n> c #789EB5",
-"o> c #303D48",
-"p> c #7498B4",
-"q> c #7094AF",
-"r> c #597792",
-"s> c #242F39",
-"t> c #1A1D25",
-"u> c #374553",
-"v> c #4D677D",
-"w> c #14191E",
-"x> c #040505",
-"y> c #171A1D",
-"z> c #8A9FAD",
-"A> c #BCD9EC",
-"B> c #B5D3E7",
-"C> c #A2CAE1",
-"D> c #9DC7DE",
-"E> c #9EC7DD",
-"F> c #3B4A57",
-"G> c #455867",
-"H> c #98C2DB",
-"I> c #85B0CC",
-"J> c #7496B2",
-"K> c #4C606F",
-"L> c #6E8EA3",
-"M> c #7EA0B6",
-"N> c #91BBD3",
-"O> c #8DB7D1",
-"P> c #90BAD4",
-"Q> c #96C1DA",
-"R> c #3B4853",
-"S> c #688AA5",
-"T> c #4C657A",
-"U> c #1B2026",
-"V> c #2B3C44",
-"W> c #5F7A90",
-"X> c #587284",
-"Y> c #536978",
-"Z> c #88B1CC",
-"`> c #759AB8",
-" , c #617E9A",
-"., c #556F85",
-"+, c #20272E",
-"@, c #323D48",
-"#, c #333E4A",
-"$, c #060707",
-"%, c #4A5159",
-"&, c #ACC3D5",
-"*, c #ACCFE5",
-"=, c #5A6874",
-"-, c #AACDE1",
-";, c #9CC6DC",
-">, c #35414C",
-",, c #769AB2",
-"', c #80AAC5",
-"), c #6F92AB",
-"!, c #38464F",
-"~, c #7EA4B9",
-"{, c #97C3DC",
-"], c #7A9FB6",
-"^, c #3F505C",
-"/, c #6D8DA6",
-"(, c #1E282E",
-"_, c #080909",
-":, c #090A0C",
-"<, c #344452",
-"[, c #3B4857",
-"}, c #7799AE",
-"|, c #8DB6D1",
-"1, c #66869E",
-"2, c #3D4957",
-"3, c #536C84",
-"4, c #353F4C",
-"5, c #111215",
-"6, c #65727E",
-"7, c #A6BCCD",
-"8, c #5D6972",
-"9, c #AED0E6",
-"0, c #99C5DC",
-"a, c #8DB5D0",
-"b, c #8DB5CE",
-"c, c #90BBD5",
-"d, c #84AAC5",
-"e, c #8EBBD5",
-"f, c #80A7C1",
-"g, c #6C8DA2",
-"h, c #85AFC6",
-"i, c #61839B",
-"j, c #374352",
-"k, c #576D83",
-"l, c #80A6C1",
-"m, c #81A4BB",
-"n, c #111315",
-"o, c #111418",
-"p, c #4C6378",
-"q, c #33424C",
-"r, c #37454D",
-"s, c #8DB4CF",
-"t, c #7397B3",
-"u, c #3A495A",
-"v, c #0D0F13",
-"w, c #27303A",
-"x, c #272E36",
-"y, c #0F1012",
-"z, c #90A4B2",
-"A, c #A8CBE2",
-"B, c #91BCD4",
-"C, c #80ABC3",
-"D, c #567083",
-"E, c #67899D",
-"F, c #94C2DB",
-"G, c #95C1DB",
-"H, c #779CB2",
-"I, c #60849E",
-"J, c #64849F",
-"K, c #1A1F22",
-"L, c #405061",
-"M, c #79A1BD",
-"N, c #324051",
-"O, c #6183A1",
-"P, c #6B8FAD",
-"Q, c #6485A2",
-"R, c #34444F",
-"S, c #060606",
-"T, c #2D3339",
-"U, c #B2CBDF",
-"V, c #94BCD5",
-"W, c #7DA2BA",
-"X, c #3F5264",
-"Y, c #5A7991",
-"Z, c #7195B3",
-"`, c #7BA5BD",
-" ' c #81AAC6",
-".' c #88B2CC",
-"+' c #8EBBD4",
-"@' c #8AB2CC",
-"#' c #82ADC7",
-"$' c #7092A5",
-"%' c #95C2DA",
-"&' c #41525F",
-"*' c #6387A3",
-"=' c #475F72",
-"-' c #21282F",
-";' c #5B7288",
-">' c #0D0F11",
-",' c #0B0E11",
-"'' c #212C36",
-")' c #26323C",
-"!' c #161B20",
-"~' c #55616D",
-"{' c #9BB9D0",
-"]' c #799EB6",
-"^' c #27313A",
-"/' c #1A222B",
-"(' c #5D7E99",
-"_' c #6587A4",
-":' c #6789A6",
-"<' c #6B8EAB",
-"[' c #628097",
-"}' c #6D8B9D",
-"|' c #769AAF",
-"1' c #6E91A9",
-"2' c #6C8EAD",
-"3' c #6E91AF",
-"4' c #3C4D59",
-"5' c #8BB1CB",
-"6' c #232D32",
-"7' c #13171B",
-"8' c #232B32",
-"9' c #839AAF",
-"0' c #789BB3",
-"a' c #283138",
-"b' c #0C0E0F",
-"c' c #242B33",
-"d' c #3D4D5B",
-"e' c #435768",
-"f' c #4B6176",
-"g' c #283137",
-"h' c #8DB4CC",
-"i' c #41535E",
-"j' c #405362",
-"k' c #3C4F60",
-"l' c #3C4E5B",
-"m' c #2B353E",
-"n' c #526876",
-"o' c #92BAD3",
-"p' c #1B1F23",
-"q' c #31383F",
-"r' c #7F9CB6",
-"s' c #21292F",
-"t' c #29333F",
-"u' c #1F252E",
-"v' c #090A0E",
-"w' c #4D626E",
-"x' c #96BDD3",
-"y' c #191D20",
-"z' c #13181B",
-"A' c #80A4BC",
-"B' c #1B2027",
-"C' c #5D7182",
-"D' c #2C383F",
-"E' c #364857",
-"F' c #1A2028",
-"G' c #333F49",
-"H' c #7FA2B5",
-"I' c #4A5E6E",
-"J' c #232E35",
-"K' c #252D35",
-"L' c #2F3A41",
-"M' c #0A0B0E",
-"N' c #14191D",
-"O' c #5A717F",
-"P' c #212931",
-"Q' c #222B34",
-"R' c #101216",
-"S' c #21272B",
-" ",
-" ",
-" ",
-" . ",
-" + ",
-" @ # $ % ",
-" & * = - ; ",
-" > , ' ) ! ~ { ] ",
-" ^ / ( _ : < [ } | 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 C D E F G H I J K L M N O P Q R S T U U V W X Y ",
-" Z ` ...+.@.#.$.%.O &.*.=.-.;.>.,.'.).!.~.~.~.{.].^./.(._.:.<. ",
-" b [.}.|.#.1.2.3.4.{.~.~.~.~.5.6.5.~.7.8.{.~.~.~.~.9.0.a.b.].c. ",
-" d.e.f.g.h.i.j.k.{.~.~.~.~.l.~.m.% n.~.o.{.{.~.~.~.~.p.V 9.~.q.r. ",
-" s.t.u.v.w.x.u y.z.A.B.5.~.~.5.C.D.E.F.~.~.G.~.~.~.G.H.I.J.~.~.J.K.L. M.N. ",
-" O.P.Q.R.S.T.U.V.W.X.Y.Z.`.~.~.5. +.+++@+U ~.~.~.~.~.#+$+%+,.~.~.G.&+*+=+-+;+ ",
-" >+,+Q.'+)+!+~+{+]+^+/+(+_+:+<+~.[+}+U 9.|+5.~.~.~.~.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+5.U ~.U r+s+~.~.~.t+u+v+w+x+y+~.z+A+t+B+C+D+E+ F+G+ ",
-" H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+V ~.~.~.~.U ~.~.~.o.9.{.Z+`+9.~.~.~.V @.@+@@@#@ $@%@&@*@ ",
-" =@-@;@>@,@'@'.)@!@~@{@]@^@/@l+(@_@:@<@~.~.~.U {.~.~.~.{.~.~.{.[@~.~.~.~.}@|@1@2@3@4@5@6@7@8@ ",
-" 9@0@a@b@c@d@-.e@f@g@h@i@j@k@l@V+m@n@o@p@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.q@r@s@t@u@v@w@x@y@ ",
-"z@A@B@C@D@E@X F@G@H@R I@J@K@L@M@N@O@P@Q@R@o+S@T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.9.U@V@W@X@<+V Y@Z@`@ # ",
-" .#+#@###$#%#*#=#-#;#>#,#'#)#!#~#{#]#^#S@/#~.~.~.~.~.~.~.~.~.~.~.~.~.U (#_#:#<#p@{.[#}#|#1#2# ",
-" 3#4#5#6#7#8#9#0#a#b#c#d#e#f#g#h#i#j#k#S@/#~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.l#m#9.{.~.n#o#p#q#r#s# ",
-" t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#I#% J#K#S@T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.L#0.l.~.~.{.M#N#O#P#Q#R# ",
-" S#T#U#V#W#X#Y#Z#`# $.$+$@$#$$$%$&$*$=$-$a#~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.o.o.;$9.G.~.>$,$'$)$!$~${$]$ ",
-" ^$/$($_$:$<$[$}$|$1$2$3$4$5$6$7$8$9$:+<+~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.G.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$M#p@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.;$D$E$F$G$H$I$J$K$L$ ",
-" M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$`$ %.%+%@%<+{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.#%$%%%p@&%*%=%-%;%>%,% ",
-" '%)%!%~%{%]%^%/%(%_%:%<%[%}%|%1%2%3%-$T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.4%5%U p@6%7%8%9%0%a%y ",
-" b%c%d%e%f%g%h%i%G.[#j%k%l%m%n%o%p%@%q%{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.~.~.~.~.~.~.V G.}@r%s%t%u%v%w%M.x%y%z%A% ",
-" B%C%D%E%F%G%H%I%V o.<@J%K%L%M%N%O%P%p@~.~.~.~.~.~.~.~.~.U ~.~.U 9.Q%{.~.~.~.~.~.{.%%U {.~.~.{.v@R%S%T%U%V%W% X%$ ",
-" Y%Z%`% &.&+&@&U ~.{.$&%&&&*&=&-&T@~.~.~.~.~.~.~.~.~.~.~.;&>&,&'&)&!&5+~.~.~.~.{.~&{&]&9.~.p@^&/&(&_&:& <&[&}&|& ",
-" 1&2&3&4&5&6&7&8&9&l.~.{.V 0&a&b&c&~.~.~.~.~.~.~.5.d&e&f&g&h&i&j&k&l&m&n&~.~.G.~.~.~.o&p&q&r&s&t&u&v& w&x&y&z&A&B& ",
-" C&2&D&E&F&G&G&H&I&J&U ~.~.U K&L&,.~.~.~.~.~.~.~.U M&N&O&P&Q&R&S&T&U&V&W&X&].{.~.~.{./#Y&Z&`& *.*+*@* (.#*$*%*&***=* ",
-" -*;*>*,*'*)*!*~*{*]*^*~.5.{.5./*U ~.~.~.~.~.~.{.[#(*_*:*<*[*[*}*|*1*2*3*4*5*U ~.~.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*1+~.~.~.~.~.~.~.~.~.~.~.x*y*z*A*B*C*D*E*V U ~.G.~.:.F*G*l.{.R%X+H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*X* ",
-" Y*Z*D&`* =.=+=@=#=$=%=&={.~.~.~.~.~.~.~.~.~.~.<+*===-=;=>=,='=)=[#p@!=~={=]=^=/=(=a#&%_=:=<=-#[=}=k$|=1=2=3=4=5=6=7=8=9= ",
-" 0=a=b=c=d=e=f=g=h=i=j=k=l=5.~.~.~.~.~.~.~.~.~.V -$m=n===o=p=q=r=s=t=:+u=v=w=x=y=z=A=J.V U ~.V [#B=C=D=1=E=F= G=H=I= ",
-" J=K=L=M=N=O=P=Q=R=S=T=U=V=5.U ~.~.~.~.~.~.~.~.~.{.x*W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-9.x*)=,-'-)-c.!-~- {-]- ",
-" ^-/-(-_-:-<-<-[-%.}-|-1-T@~.{.~.~.~.~.~.~.~.~.~.~.V 2-^&3-4-5-6-7-8-9-0-a-b-c-d-e-f-g-h-V@i-j-k-l-T=m-7@n- o-p- ",
-" q-r-s-t-u-v-!+2*w-x-y-z-V ~.~.~.~.~.~.~.~.~.~.~.~.~.~./#A-B-C-D-E-F-G-H-I-J-K-L-<@M-W=N-O-P-Q-R-<&S-T-U-V- W- ",
-" X-Y-Z-`- ;.;+;@;#;$;q+~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~./#v@W=N#%;&;*;=;-;s=-#;;>;,;';);!;~;{;];^;/;(;H+ ",
-" _;:;<;[;};|;1;2;3;4;{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.T@-#5;6;7;8;9;[#V <+0;a;b;c;E-d;e;f;|=g;h; ",
-" i;j;V#k;F.l;m;n;o;~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.~.{.p@S@s=p;q;~.~.{.r;s;t;u;~$v;w;x;y;z;A; ",
-" H+B;C;D;E;F;G;H;~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.U ~.~.V E*E*V ~.~.~.{.T@/#I;J;K;L;M;y;N;O; ",
-" P;Q;R;S;T;U;~.{.~.~.~.~.~.~.~.~.l.U {.p@~.~.{.V ~.~.5+V;].~.~.~.~.{.{.p@W;X;Y;Z;`;/# >W..>+>N;@> ",
-" #>$>%>&>*>G.~.~.~.~.~.~.~.~.{.`.=>V=->;>~.n##&>>T@,>'>].~.~.~.~.~.)>!>i$~>{>]>^>/>(>_>:><>[>}> |>1> ",
-" 2>3>4>5>U@U ~.~.~.~.~.~.~.{.6>7>8>9>0>a#a>b>c>d>e>f>~.~.~.V ~.~.g>h>i>1=j>,%k>l>m>n>o>p>q>r>s>t>u>v>w> ",
-" x>y>z>A>B>C>5+D>E>~.~.~.~.{.%&F>G>3;s%{.H>I>J>K>L>M>~.V N>O>P>x*Q>R>S>T>U> X%V>W>X>Y>Z>P-`> ,.,+, ",
-" @,#,$,%,&,1.*,=,-,;,{.p@V {.X@>,,,Z;V ~.5.`;',),!,~,~.{,],^,/,/&-$F$(,_, :,<,[,},<@|,1,2, ",
-" B&3,4, 5,6,7,8,9,0,`;a,b,B+c,d,s=<+~.~.~.a#e,f,g,h,V -#9$i,j,k,l,m,n, o,p,q,r,s,t,u,v, ",
-" w,x, y,z,A,B,C,D,E,o@F,G,<+~.~.~.~.~.;;P>j%}@p@H,]#I,J,K,L,M,=+ N,O,P,Q,R,S, ",
-" T,U,V,W,X,Y,Z,`, '.'+'x*~.{.O+@%@'#'$'%'a#&'*'='-' ~;;'>' ,''')'!' ",
-" ~'{']'^'/'('_'_':'<'['}'{.V |'1'2'3'4'5'}@6'7' 8'K; ",
-" v&9'0'a' b'c'd'e'f'1@g'h'G.i'j'k'l'm'n'o'p' y ",
-" q'r's' t'u'H+ v'w'x'y' z'A'B' ",
-" C'D' E'F' G'H' I'J' ",
-" K'L' M' N'O' P'Q' ",
-" R' S' ",
-" ",
-" ",
-" ",
-" "};
diff --git a/libs/minilibx-linux-master/test/open24.xpm b/libs/minilibx-linux-master/test/open24.xpm
deleted file mode 100644
index f363254..0000000
--- a/libs/minilibx-linux-master/test/open24.xpm
+++ /dev/null
@@ -1,230 +0,0 @@
-/* XPM */
-static char *open[] = {
-/* width height num_colors chars_per_pixel */
-" 45 55 168 2",
-/* colors */
-".. s None c None",
-".# c #450304",
-".a c #ce7e7c",
-".b c #b94344",
-".c c #b65254",
-".d c #780204",
-".e c #b04c4c",
-".f c #b00204",
-".g c #8a8a64",
-".h c #969a24",
-".i c #b6b60c",
-".j c #cac614",
-".k c #cece34",
-".l c #cace54",
-".m c #caca94",
-".n c #c24e4c",
-".o c #aa0204",
-".p c #9e4244",
-".q c #bc0204",
-".r c #a40204",
-".s c #9e262c",
-".t c #8c3a3c",
-".u c #5c1414",
-".v c #5b0204",
-".w c #700204",
-".x c #722214",
-".y c #b52624",
-".z c #8e3234",
-".A c #b60204",
-".B c #c20204",
-".C c #860204",
-".D c #560304",
-".E c #800204",
-".F c #9e0204",
-".G c #920204",
-".H c #620204",
-".I c #a41314",
-".J c #996a6c",
-".K c #920d09",
-".L c #c80204",
-".M c #690204",
-".N c #980204",
-".O c #984c4c",
-".P c #e2dedc",
-".Q c #ae5e5c",
-".R c #bc6a6c",
-".S c #a21a1c",
-".T c #8a0a04",
-".U c #671e1c",
-".V c #941b1c",
-".W c #b8b4b4",
-".X c #e8e6e4",
-".Y c #ccb4b4",
-".Z c #c07c7c",
-".0 c #f3f2eb",
-".1 c #b49696",
-".2 c #521614",
-".3 c #9e5a5c",
-".4 c #d4d4d4",
-".5 c #a7a5a1",
-".6 c #dec4c4",
-".7 c #e4d6d4",
-".8 c #f4f2f4",
-".9 c #cccac4",
-"#. c #9a161c",
-"## c #8c0204",
-"#a c #862c2c",
-"#b c #7e5e5c",
-"#c c #a39694",
-"#d c #6b6667",
-"#e c #322624",
-"#f c #b09e9c",
-"#g c #b23234",
-"#h c #500304",
-"#i c #222224",
-"#j c #2e322c",
-"#k c #925c5c",
-"#l c #721a1c",
-"#m c #6e6e6c",
-"#n c #0a0a0c",
-"#o c #b2b2b4",
-"#p c #8e6264",
-"#q c #884444",
-"#r c #8c5c5c",
-"#s c #121214",
-"#t c #b2aeac",
-"#u c #c21e1c",
-"#v c #6e0e0c",
-"#w c #623e3c",
-"#x c #b64e4c",
-"#y c #bc3634",
-"#z c #624e1c",
-"#A c #6e727c",
-"#B c #824e4c",
-"#C c #8b8d87",
-"#D c #a09674",
-"#E c #766844",
-"#F c #7a663c",
-"#G c #828c90",
-"#H c #beb6a4",
-"#I c #3a0204",
-"#J c #8e9298",
-"#K c #562529",
-"#L c #7c3838",
-"#M c #bab294",
-"#N c #7e4644",
-"#O c #929a9c",
-"#P c #762a2c",
-"#Q c #a60e0c",
-"#R c #ae1e1c",
-"#S c #460a0c",
-"#T c #a6aaa4",
-"#U c #6a4a4c",
-"#V c #784c50",
-"#W c #761214",
-"#X c #9e1e1c",
-"#Y c #988c90",
-"#Z c #821e1c",
-"#0 c #7a1618",
-"#1 c #7a6e74",
-"#2 c #7e7a77",
-"#3 c #808688",
-"#4 c #828284",
-"#5 c #828279",
-"#6 c #827a64",
-"#7 c #7e765c",
-"#8 c #864a34",
-"#9 c #825a44",
-"a. c #766e54",
-"a# c #7e7e74",
-"aa c #806464",
-"ab c #7e724c",
-"ac c #766634",
-"ad c #765a2c",
-"ae c #8e7e54",
-"af c #a69e8c",
-"ag c #c7c2ac",
-"ah c #9a2a1c",
-"ai c #aa3a3c",
-"aj c #979894",
-"ak c #70684c",
-"al c #62522c",
-"am c #6e5e3c",
-"an c #92866c",
-"ao c #968e6c",
-"ap c #826e54",
-"aq c #84765c",
-"ar c #86522c",
-"as c #7e4624",
-"at c #7e3614",
-"au c #6e5254",
-"av c #712e2c",
-"aw c #7a5654",
-"ax c #82727c",
-"ay c #a63634",
-"az c #8a6a6c",
-"aA c #863534",
-"aB c #5c1a18",
-"aC c #6a2c2c",
-"aD c #5e0e14",
-"aE c #868684",
-"aF c #922624",
-"aG c #901614",
-"aH c #c21614",
-"aI c #520e0c",
-"aJ c #805654",
-"aK c #b00c0c",
-"aL c #c2221c",
-/* pixels */
-"..........................................................................................",
-"..........................................................................................",
-".....................................#.a.#................................................",
-"...................................#.b.c.#.#.#.#...........#.d............................",
-".................................#.e.f.f.#.g.h.i.j.k.l.m...f.n............................",
-".................................d.f.o.f.#.#.#.d.d.#.#.#...f.f.d..........................",
-".................................p.q.q.r.s.t.u.v.w.x.d.d.#.d.r.y.d........................",
-".................................z.A.B.q.C.D.E.F.G.E.H.E.I.F.q.A.d........................",
-".................................J.G.f.G.w.K.f.L.B.B.r.M.f.B.L.A.d........................",
-".................................d.w.N.M.O.P.Q.B.B.o.R.S.E.q.q.T.d........................",
-".................................d.U.M.V.W.X.Y.q.B.Z.0.1.E.r.N.d..........................",
-".................................d.2.r.3.4.5.6.A.f.7.8.9#.###a.#..........................",
-"................................#b.d.L#c#d#e#f.N.V.5#d.4#g.E.d............................",
-"...............................d#h.r.L#f#i#j#k.M#l#m#n#o.b.r.d............................",
-"...............................d#h##.q#g#p#q##.q.N#r#s#t#u.q#v.#..........................",
-"..............#j................#w.w.C.r.q##.r.B.f.T#x#y.L.r.M.d..........................",
-"............#j#z#j#A#A#j.........d.D.r.M.C.f.r.r.r.q.B.C.N.E#B............................",
-"..........#j#C#D#E#z#F#G#j.......d.d.#.G##.w.M.M.C.C.d.G.r.u.d............................",
-"....................#E#H#C#j.........d#I.w.F.f.o.o.o.N.M.#.d..............................",
-"......................#E#j#J#j......#K.M.#.#.v.w.M.v.##h.H#L.d............................",
-"..........................#M#j.......v.F.q.r.d.w.w.C.E.M.v.M#N.d..........................",
-"..........................#E#O#j#j#K##.f.L.L.L.B.q.f##.M.v.w.w#P.d.#...d.d................",
-"............................#C#E.#.v.o.B.L.L.q.q.q.q.N.M.D#h.M.N.r#Q#R#S.H.J.#............",
-"............................#j#T#U.C.q.q.o.G.F.f.q.A.N.d.v.v##.o.q.L.r.C.A###k............",
-"..............................#C#V.N.A.N.f.q.F.C.E.f.F.E.H#n#W.K.I#X#a.z.V.q.d#p.d........",
-"................................#Y.r.K#Z.K.q.A.G.w#0#b#1#2#3#4#5#5#6#6#7#8.q.G#9..........",
-"..................#j#oa..5#j..#J#Ja##4#4aa.o.A##.E.xabacadae#Daf#M#Magah.r.qai.#..........",
-"................aja#akalamanaoapaqaaarasat.r.o.E.w.T.T.E.H.#...........#.d.d.#............",
-"...........E....#j#j#C#M#j#n#naa#V.O.f.N.F.q.G.d.w.r.C.d.H.#...............#..............",
-"...........#.F.F.J#n#n#n#n#n#nauav#p.q.N.d.d.w.M.F.F.E.d.U................................",
-".........E.F.E.E.d.z#n.d#n#n#naw.Uax.r##.d.w.D.M.r.N.E.w.d................................",
-".........E.F.......d.Fay.E.F#naz.2#A.D#h.r.f.w##.r##.d.H.M................................",
-".........F.#...........E.E.F.baAaB#A.#.E.f.r.w.N.N.E.waC.#................................",
-".........F.#...............d.F.E#K#d.H.G.F.G.w.N##.d.D.#..................................",
-".........F.#....................#Aau.v.E##.w.E.E.w.H.d.......d..av.d......................",
-".........E.#..................#j#GaC.M.H.M.d.d.w.H.#.d.d.#aC.w.C##.E.d....................",
-"...........F.................5#O...#aD.w.d.w.H.D.M######.G.F.o.f.o.N.3....................",
-"...........F.E...........5aEakak.....#.##h#h.v.N.o.f.q.L.L.L.L.L.q.faF....................",
-"...........E.E......#E#C.5aq#j.....#.v.N.F.d.N.r.F.r.F#Q.I.o.q.L.L.L.y....................",
-".............E.....................#.E.B.qaG.d.d.d.....#.#.....d#x.b......................",
-".............E.F...................E.w.L.LaG.#............................................",
-"...............E.E.................EaA.q.qaG.#............................................",
-"...............E.F.E.................E.r.r#Z.#............................................",
-".................E.F.E...............E.G.NaA..............................................",
-".................E#uaH.................w.dav..............................................",
-"...................E.E.............EaI.M.w.v.#............................................",
-"...................................E.D.d.E.waJ............................................",
-".....................................C.N.N##.M............................................",
-"..................................#W.f.q.A.f.G#q..........................................",
-".....................................q.L.L.L.q.V.#........................................",
-"...................................#.daK.q.qaL.d..........................................",
-".......................................#.#.#..............................................",
-"..........................................................................................",
-"..........................................................................................",
-".........................................................................................."
-};
diff --git a/libs/minilibx-linux-master/test/open30.xpm b/libs/minilibx-linux-master/test/open30.xpm
deleted file mode 100644
index 87be371..0000000
--- a/libs/minilibx-linux-master/test/open30.xpm
+++ /dev/null
@@ -1,1439 +0,0 @@
-/* XPM */
-static char * open30_2_xpm[] = {
-"64 64 1372 2",
-" c None",
-". c #08090D",
-"+ c #1A1E23",
-"@ c #1F2124",
-"# c #060809",
-"$ c #1A1E21",
-"% c #4F606C",
-"& c #3D4145",
-"* c #868D93",
-"= c #454E56",
-"- c #627481",
-"; c #667C8A",
-"> c #2D3031",
-", c #D7E1E7",
-"' c #4D5157",
-") c #8997A5",
-"! c #282E31",
-"~ c #333B41",
-"{ c #A5C6DB",
-"] c #718C9B",
-"^ c #000000",
-"/ c #181B1F",
-"( c #262828",
-"_ c #D2DEE7",
-": c #B8C5D0",
-"< c #151719",
-"[ c #08090B",
-"} c #272B30",
-"| c #2D3037",
-"1 c #26282C",
-"2 c #1A1D1F",
-"3 c #B1CADB",
-"4 c #56646E",
-"5 c #080809",
-"6 c #080A0C",
-"7 c #1E2126",
-"8 c #98B7C9",
-"9 c #A2CAE2",
-"0 c #7FA1B5",
-"a c #06080A",
-"b c #252729",
-"c c #A7ADB2",
-"d c #272B2E",
-"e c #1E2023",
-"f c #C8D8E5",
-"g c #C9DDED",
-"h c #8996A3",
-"i c #6B7782",
-"j c #C7DFF0",
-"k c #CCE0F0",
-"l c #AFC1CF",
-"m c #47535B",
-"n c #B0D3E8",
-"o c #7E99A9",
-"p c #738493",
-"q c #97B4C7",
-"r c #53606A",
-"s c #6E8996",
-"t c #A1CBE3",
-"u c #9CC6DE",
-"v c #90B5CB",
-"w c #171D22",
-"x c #1E2629",
-"y c #020202",
-"z c #ABB3BA",
-"A c #BBC4C8",
-"B c #222323",
-"C c #141617",
-"D c #5D6164",
-"E c #ACB5BC",
-"F c #676D74",
-"G c #BDD4E5",
-"H c #B3D1E7",
-"I c #B0D1E7",
-"J c #728A99",
-"K c #94AEBF",
-"L c #B1D1E7",
-"M c #505C64",
-"N c #7B98A9",
-"O c #A1CBE0",
-"P c #99C3D9",
-"Q c #475863",
-"R c #A0C9DE",
-"S c #9CC6DA",
-"T c #9ECAE1",
-"U c #9CC5DD",
-"V c #9AC4DC",
-"W c #263137",
-"X c #3C4A55",
-"Y c #658190",
-"Z c #66686B",
-"` c #7D8085",
-" . c #363839",
-".. c #797E81",
-"+. c #D2DBE1",
-"@. c #DDE9F4",
-"#. c #CADEEF",
-"$. c #778593",
-"%. c #AED0E5",
-"&. c #9EC9DE",
-"*. c #9EC8DF",
-"=. c #9BC1D8",
-"-. c #9EC8DE",
-";. c #6B8596",
-">. c #9BC5DC",
-",. c #9BC6DF",
-"'. c #9CC5DC",
-"). c #688595",
-"!. c #6B8698",
-"~. c #9CC4DC",
-"{. c #9BC4DC",
-"]. c #9DC5DD",
-"^. c #647D8C",
-"/. c #485864",
-"(. c #161A1D",
-"_. c #36444C",
-":. c #95BDD5",
-"<. c #566E7E",
-"[. c #A4AAAD",
-"}. c #E9F2F7",
-"|. c #DEEAF6",
-"1. c #B5D4E9",
-"2. c #A9CFE3",
-"3. c #90B3C9",
-"4. c #9FCAE1",
-"5. c #9BC4DD",
-"6. c #7490A2",
-"7. c #99C2DB",
-"8. c #81A5BA",
-"9. c #9CC5DE",
-"0. c #98C1DA",
-"a. c #5F7889",
-"b. c #96BFD8",
-"c. c #44545F",
-"d. c #565A5E",
-"e. c #DFE6EC",
-"f. c #E6EEF7",
-"g. c #D6E4F2",
-"h. c #BFD6E9",
-"i. c #A9CCE3",
-"j. c #9FC8DD",
-"k. c #9DC6DD",
-"l. c #9CC4DD",
-"m. c #7D9FB0",
-"n. c #98C0D6",
-"o. c #9AC5DD",
-"p. c #97BFD8",
-"q. c #9BC5DF",
-"r. c #2D3840",
-"s. c #626567",
-"t. c #E7ECF5",
-"u. c #E1EAF5",
-"v. c #CEE3F3",
-"w. c #B7D6EA",
-"x. c #A4CBE0",
-"y. c #8AAFC5",
-"z. c #647F90",
-"A. c #648092",
-"B. c #89B0C7",
-"C. c #9CC6DF",
-"D. c #5D7486",
-"E. c #7B9BAF",
-"F. c #84A8BF",
-"G. c #9BC5DD",
-"H. c #96BED5",
-"I. c #4B5D69",
-"J. c #9BC5DE",
-"K. c #536B77",
-"L. c #2E3B41",
-"M. c #1B2124",
-"N. c #3F4F58",
-"O. c #4D5152",
-"P. c #E7EEF3",
-"Q. c #E2EAF5",
-"R. c #CEE2F2",
-"S. c #BAD5E9",
-"T. c #9DC2D7",
-"U. c #5C7281",
-"V. c #232A31",
-"W. c #08090A",
-"X. c #121418",
-"Y. c #131619",
-"Z. c #131719",
-"`. c #87ACC3",
-" + c #7B9BAE",
-".+ c #87ADC3",
-"++ c #8FB5CB",
-"@+ c #678295",
-"#+ c #96C0D8",
-"$+ c #607787",
-"%+ c #6B8595",
-"&+ c #96C1DB",
-"*+ c #6A8595",
-"=+ c #35424A",
-"-+ c #7090A1",
-";+ c #15191C",
-">+ c #2D3033",
-",+ c #DDE5EB",
-"'+ c #D2E3F1",
-")+ c #BAD7EB",
-"!+ c #A9CFE5",
-"~+ c #272F35",
-"{+ c #1C2227",
-"]+ c #4F697B",
-"^+ c #6B8FA9",
-"/+ c #759CB6",
-"(+ c #7BA0BB",
-"_+ c #80A5BC",
-":+ c #88B0C8",
-"<+ c #96C3DB",
-"[+ c #8FB6CD",
-"}+ c #80A1B3",
-"|+ c #556876",
-"1+ c #96BFD7",
-"2+ c #566B77",
-"3+ c #93B8CD",
-"4+ c #637A8D",
-"5+ c #9DC6DE",
-"6+ c #8FB4CA",
-"7+ c #55697A",
-"8+ c #6F8F9F",
-"9+ c #91BDD5",
-"0+ c #283239",
-"a+ c #050406",
-"b+ c #767B80",
-"c+ c #BDC6CE",
-"d+ c #D4E5F3",
-"e+ c #C1D7EA",
-"f+ c #A7CDE4",
-"g+ c #9FC9DE",
-"h+ c #668596",
-"i+ c #6D90AA",
-"j+ c #5C7994",
-"k+ c #60849F",
-"l+ c #6286A1",
-"m+ c #688CA8",
-"n+ c #7298B2",
-"o+ c #82A8C2",
-"p+ c #8FBAD5",
-"q+ c #96C2DB",
-"r+ c #89ADC4",
-"s+ c #96BED6",
-"t+ c #99C2DA",
-"u+ c #6C899A",
-"v+ c #92BBD2",
-"w+ c #9AC4DD",
-"x+ c #5B717D",
-"y+ c #9EC6DE",
-"z+ c #8BB1C9",
-"A+ c #718EA0",
-"B+ c #94C3DB",
-"C+ c #536B78",
-"D+ c #3E505F",
-"E+ c #4E6373",
-"F+ c #2C333C",
-"G+ c #070708",
-"H+ c #040404",
-"I+ c #1A1C1E",
-"J+ c #202326",
-"K+ c #050606",
-"L+ c #23292E",
-"M+ c #A1C0D4",
-"N+ c #9FC9DD",
-"O+ c #97C2DB",
-"P+ c #80A8C1",
-"Q+ c #668AA6",
-"R+ c #4B5D72",
-"S+ c #4C647A",
-"T+ c #5F80A0",
-"U+ c #60859E",
-"V+ c #678AA6",
-"W+ c #739BB5",
-"X+ c #85AEC7",
-"Y+ c #92BDD7",
-"Z+ c #96BFD5",
-"`+ c #627B8A",
-" @ c #89B1C9",
-".@ c #2B353C",
-"+@ c #7597B2",
-"@@ c #779CB8",
-"#@ c #52697C",
-"$@ c #1D2328",
-"%@ c #445663",
-"&@ c #5E7A8D",
-"*@ c #252F37",
-"=@ c #090909",
-"-@ c #859BB2",
-";@ c #859DB8",
-">@ c #6E8396",
-",@ c #252C33",
-"'@ c #9CC4D7",
-")@ c #92C0D9",
-"!@ c #79A0BA",
-"~@ c #6487A3",
-"{@ c #566979",
-"]@ c #8CB0C2",
-"^@ c #51697C",
-"/@ c #60849D",
-"(@ c #6D8EAC",
-"_@ c #7BA0BC",
-":@ c #8AB4CE",
-"<@ c #95C2DB",
-"[@ c #9AC5DC",
-"}@ c #95C1DA",
-"|@ c #607B8C",
-"1@ c #597488",
-"2@ c #7EA6BF",
-"3@ c #597587",
-"4@ c #455664",
-"5@ c #668598",
-"6@ c #82A9C4",
-"7@ c #617F92",
-"8@ c #1A2328",
-"9@ c #2B3137",
-"0@ c #728FAC",
-"a@ c #51657B",
-"b@ c #6B8AA8",
-"c@ c #8EAEC7",
-"d@ c #A8C8E2",
-"e@ c #92BDD6",
-"f@ c #769DBA",
-"g@ c #526E87",
-"h@ c #7490A0",
-"i@ c #A6CDE4",
-"j@ c #97BFD4",
-"k@ c #55697D",
-"l@ c #6286A0",
-"m@ c #7399B3",
-"n@ c #84ACC5",
-"o@ c #92BFD9",
-"p@ c #99C4DC",
-"q@ c #94C0DA",
-"r@ c #4F6575",
-"s@ c #7DA5BF",
-"t@ c #7FA2BC",
-"u@ c #8FB6CE",
-"v@ c #95C3DB",
-"w@ c #8EB8D2",
-"x@ c #6A879D",
-"y@ c #111318",
-"z@ c #252A30",
-"A@ c #81868C",
-"B@ c #A5ABAD",
-"C@ c #70767C",
-"D@ c #38434F",
-"E@ c #637F9B",
-"F@ c #516980",
-"G@ c #799AB5",
-"H@ c #A5C3D9",
-"I@ c #93BDD6",
-"J@ c #779EBA",
-"K@ c #445A6B",
-"L@ c #93B5C9",
-"M@ c #B6D3E8",
-"N@ c #AECFE4",
-"O@ c #95BDD2",
-"P@ c #52687A",
-"Q@ c #6486A3",
-"R@ c #7092B0",
-"S@ c #90BCD6",
-"T@ c #97C4DC",
-"U@ c #A0C9E0",
-"V@ c #99C5DD",
-"W@ c #86AEC6",
-"X@ c #8FBAD4",
-"Y@ c #91BDD6",
-"Z@ c #7094AC",
-"`@ c #2A353E",
-" # c #0B0E10",
-".# c #888D90",
-"+# c #787D82",
-"@# c #465360",
-"## c #56697F",
-"$# c #A6CADD",
-"%# c #5A7382",
-" c #6C8CAA",
-"*# c #A5BED3",
-"=# c #A7CAE0",
-"-# c #94C1DA",
-";# c #7EA4BF",
-"># c #415160",
-",# c #9DC3D5",
-"'# c #B3CFE1",
-")# c #AAC3D4",
-"!# c #A8CDE4",
-"~# c #89ACBE",
-"{# c #567088",
-"]# c #6C91AC",
-"^# c #81A7C2",
-"/# c #96C4DC",
-"(# c #85A9BD",
-"_# c #708C9B",
-":# c #5A6E7B",
-"<# c #6C8695",
-"[# c #97C3DB",
-"}# c #8BB5CE",
-"|# c #425461",
-"1# c #63819E",
-"2# c #415465",
-"3# c #0B0D0E",
-"4# c #607387",
-"5# c #687D8C",
-"6# c #B8D6E9",
-"7# c #7893A2",
-"8# c #576F85",
-"9# c #A7BACF",
-"0# c #B0CEE5",
-"a# c #98C4DC",
-"b# c #88B1CA",
-"c# c #36444E",
-"d# c #8FA0AD",
-"e# c #73818D",
-"f# c #596D81",
-"g# c #B4D0E4",
-"h# c #A3CDE2",
-"i# c #658296",
-"j# c #6A8DAB",
-"k# c #7BA5C0",
-"l# c #94BAD2",
-"m# c #6D899B",
-"n# c #99C3DC",
-"o# c #8EB9D2",
-"p# c #7AA0BA",
-"q# c #6C8FAB",
-"r# c #6484A1",
-"s# c #1F252C",
-"t# c #121619",
-"u# c #7E96B0",
-"v# c #7A8A96",
-"w# c #BCD7EA",
-"x# c #A0C5D9",
-"y# c #3C4B57",
-"z# c #A9BACD",
-"A# c #BCD5E8",
-"B# c #84A6BA",
-"C# c #8EA1AE",
-"D# c #CFD1D4",
-"E# c #ECF6FA",
-"F# c #ABB7C2",
-"G# c #556F84",
-"H# c #57626A",
-"I# c #5C7078",
-"J# c #6C8AA7",
-"K# c #80A6C0",
-"L# c #91B8D0",
-"M# c #94BFD8",
-"N# c #87B0CA",
-"O# c #7CA2BB",
-"P# c #7097AF",
-"Q# c #495E6F",
-"R# c #0C0E11",
-"S# c #3A3F43",
-"T# c #8AA3BB",
-"U# c #778592",
-"V# c #C0D8EB",
-"W# c #B3D5E9",
-"X# c #404A53",
-"Y# c #B2C2D3",
-"Z# c #96A1AC",
-"`# c #9DB2C3",
-" $ c #AEBECE",
-".$ c #EDEFF3",
-"+$ c #F7FAFC",
-"@$ c #B6BFC7",
-"#$ c #556E85",
-"$$ c #121314",
-"%$ c #2B2E2F",
-"&$ c #555A5E",
-"*$ c #3B4C5B",
-"=$ c #6F8EA4",
-"-$ c #92BED8",
-";$ c #9DC7DF",
-">$ c #87ACC1",
-",$ c #546A78",
-"'$ c #516874",
-")$ c #4E6570",
-"!$ c #4D6271",
-"~$ c #4C6271",
-"{$ c #4E677A",
-"]$ c #38454E",
-"^$ c #6C7278",
-"/$ c #86A1B6",
-"($ c #5C656C",
-"_$ c #A4B0BA",
-":$ c #555D64",
-"<$ c #657178",
-"[$ c #A6B0B5",
-"}$ c #939CA1",
-"|$ c #D4E4F1",
-"1$ c #A0BACE",
-"2$ c #B9C7D7",
-"3$ c #F6F7F9",
-"4$ c #C6CED1",
-"5$ c #506A7C",
-"6$ c #060607",
-"7$ c #676A6B",
-"8$ c #91999F",
-"9$ c #7CA3BE",
-"0$ c #96BCD4",
-"a$ c #5B717E",
-"b$ c #4B5F6C",
-"c$ c #455864",
-"d$ c #5B717F",
-"e$ c #81A5B9",
-"f$ c #98C4DD",
-"g$ c #93BFD8",
-"h$ c #87B1CA",
-"i$ c #7BA1BC",
-"j$ c #5A7489",
-"k$ c #222A33",
-"l$ c #838A92",
-"m$ c #9DADBC",
-"n$ c #ECF0F5",
-"o$ c #F1F9FB",
-"p$ c #818A8D",
-"q$ c #4A5155",
-"r$ c #6A6F72",
-"s$ c #7E898F",
-"t$ c #E6F1F7",
-"u$ c #CADCED",
-"v$ c #A0B7CC",
-"w$ c #C6D1DF",
-"x$ c #AFB3B4",
-"y$ c #5F707D",
-"z$ c #CBCFD1",
-"A$ c #F4F5F6",
-"B$ c #66737F",
-"C$ c #87B2CB",
-"D$ c #90B7CD",
-"E$ c #596E7B",
-"F$ c #586F7E",
-"G$ c #8BB0C8",
-"H$ c #91BED6",
-"I$ c #83ADC7",
-"J$ c #6D8EA7",
-"K$ c #3F5161",
-"L$ c #2D3A45",
-"M$ c #1F2020",
-"N$ c #BDC5CC",
-"O$ c #E0EDF5",
-"P$ c #BBCAD8",
-"Q$ c #E1E4E7",
-"R$ c #5E6368",
-"S$ c #5B5F62",
-"T$ c #D9E7F3",
-"U$ c #A4C3D6",
-"V$ c #89A3B3",
-"W$ c #7B91A1",
-"X$ c #627990",
-"Y$ c #42505A",
-"Z$ c #CACCCE",
-"`$ c #F9F9F9",
-" % c #FDFDFD",
-".% c #BCBEC0",
-"+% c #5C7689",
-"@% c #8DB9D3",
-"#% c #8FB5CC",
-"$% c #536471",
-"%% c #98C1D9",
-"&% c #91BED7",
-"*% c #81AAC5",
-"=% c #597386",
-"-% c #41535F",
-";% c #6486A2",
-">% c #4D667D",
-",% c #070809",
-"'% c #44484E",
-")% c #BEC8D0",
-"!% c #8096A6",
-"~% c #516473",
-"{% c #A9ACAF",
-"]% c #8B8F91",
-"^% c #A8B3BD",
-"/% c #C5DAEB",
-"(% c #9FC8E1",
-"_% c #8FBCD6",
-":% c #81A8C2",
-"<% c #6C90AC",
-"[% c #56728C",
-"}% c #585B5F",
-"|% c #CBCDCD",
-"1% c #C1C3C6",
-"2% c #4F565F",
-"3% c #82ABC3",
-"4% c #93BCD3",
-"5% c #95BED7",
-"6% c #8EB9D3",
-"7% c #5B788B",
-"8% c #627E91",
-"9% c #7FA7C1",
-"0% c #6C91AB",
-"a% c #546F87",
-"b% c #6F7376",
-"c% c #D5E2EF",
-"d% c #A9C4D8",
-"e% c #81A1BA",
-"f% c #333940",
-"g% c #5F6B76",
-"h% c #C0D5E8",
-"i% c #AACCE2",
-"j% c #8EB8D3",
-"k% c #7FA5BF",
-"l% c #7095B0",
-"m% c #4E697E",
-"n% c #07090A",
-"o% c #0D0F10",
-"p% c #7193A6",
-"q% c #96C3DC",
-"r% c #8EBCD7",
-"s% c #91BDD7",
-"t% c #8FBBD6",
-"u% c #7699AD",
-"v% c #4D626F",
-"w% c #252D33",
-"x% c #101215",
-"y% c #0C0D0E",
-"z% c #0A0C0E",
-"A% c #06090A",
-"B% c #7F8488",
-"C% c #D7E3F1",
-"D% c #B6D0E4",
-"E% c #A3C2D7",
-"F% c #596872",
-"G% c #A9BED0",
-"H% c #B4D0E5",
-"I% c #9EC8DC",
-"J% c #8FB9D4",
-"K% c #85ADC7",
-"L% c #7FA4BE",
-"M% c #4B606F",
-"N% c #4E6372",
-"O% c #89B6D0",
-"P% c #92C1DA",
-"Q% c #9DC7DD",
-"R% c #95C0DA",
-"S% c #94BED8",
-"T% c #8BB8D1",
-"U% c #7AA0B9",
-"V% c #4E667A",
-"W% c #344151",
-"X% c #0C0D0F",
-"Y% c #8A8F92",
-"Z% c #D4E6F5",
-"`% c #BCD5E9",
-" & c #8599A5",
-".& c #939DA6",
-"+& c #C4DAEB",
-"@& c #89A6B9",
-"#& c #7D9FB5",
-"$& c #98C3DC",
-"%& c #95C0D9",
-"&& c #7CA2B9",
-"*& c #7697AE",
-"=& c #698498",
-"-& c #7394A8",
-";& c #9EC7DF",
-">& c #8DB1C4",
-",& c #6B8594",
-"'& c #50636C",
-")& c #50626C",
-"!& c #7F9FB1",
-"~& c #93B8D0",
-"{& c #627A88",
-"]& c #90B6CC",
-"^& c #93BDD7",
-"/& c #87AFC9",
-"(& c #7291A7",
-"_& c #384651",
-":& c #121618",
-"<& c #12171B",
-"[& c #4F6986",
-"}& c #597998",
-"|& c #324052",
-"1& c #969CA1",
-"2& c #D6E6F5",
-"3& c #C6DCEE",
-"4& c #505A64",
-"5& c #82929F",
-"6& c #99ABBB",
-"7& c #A1B9CA",
-"8& c #87A0B0",
-"9& c #718EA1",
-"0& c #8DB2C9",
-"a& c #8BAEC4",
-"b& c #586D7D",
-"c& c #97C0D9",
-"d& c #8DB3C9",
-"e& c #95B8CD",
-"f& c #9DC0D6",
-"g& c #6F8B9C",
-"h& c #354249",
-"i& c #464E54",
-"j& c #8A98A5",
-"k& c #AABAC7",
-"l& c #86939E",
-"m& c #41494F",
-"n& c #4A5861",
-"o& c #97C1DA",
-"p& c #5E7888",
-"q& c #5C7482",
-"r& c #88ACC2",
-"s& c #91BFD7",
-"t& c #799CB5",
-"u& c #47596A",
-"v& c #0D0F12",
-"w& c #1A2127",
-"x& c #56778D",
-"y& c #688BA9",
-"z& c #5D7F9E",
-"A& c #547391",
-"B& c #0E1013",
-"C& c #9DA6AB",
-"D& c #C8DCED",
-"E& c #7A8996",
-"F& c #B5CEE0",
-"G& c #BCDBEC",
-"H& c #B9D5EA",
-"I& c #8BA2B2",
-"J& c #6C8A9D",
-"K& c #97BFD7",
-"L& c #3E4E59",
-"M& c #92B5CB",
-"N& c #535F68",
-"O& c #454F56",
-"P& c #6F7C87",
-"Q& c #ABC0D1",
-"R& c #C7DCEE",
-"S& c #C5DBED",
-"T& c #C2D7EA",
-"U& c #BFD8EA",
-"V& c #BCD7EB",
-"W& c #62717B",
-"X& c #5B6F7B",
-"Y& c #95C3DC",
-"Z& c #8BB2C9",
-"`& c #485761",
-" * c #42525F",
-".* c #6686A1",
-"+* c #587896",
-"@* c #1B2129",
-"#* c #5C7A94",
-"$* c #7DA2BD",
-"%* c #84AEC7",
-"&* c #749BB5",
-"** c #5C7E9C",
-"=* c #27343F",
-"-* c #A4A9B2",
-";* c #D9E7F4",
-">* c #C8DBEC",
-",* c #B1C8DA",
-"'* c #5D6C76",
-")* c #A8C5D8",
-"!* c #A6BDD0",
-"~* c #B9D6EA",
-"{* c #B9D4E9",
-"]* c #8198A8",
-"^* c #8AADC3",
-"/* c #8CB1CA",
-"(* c #96C2D8",
-"_* c #A3C7DF",
-":* c #ADCDE3",
-"<* c #ABD0E4",
-"[* c #ADCFE3",
-"}* c #AACEE4",
-"|* c #A4CDE3",
-"1* c #A1CBE1",
-"2* c #A3CCE3",
-"3* c #A2C9DF",
-"4* c #41515A",
-"5* c #81A2B5",
-"6* c #94C0D7",
-"7* c #5E7789",
-"8* c #526777",
-"9* c #516777",
-"0* c #6B8CA5",
-"a* c #759CBA",
-"b* c #658AA5",
-"c* c #587798",
-"d* c #1B242B",
-"e* c #0E1110",
-"f* c #101214",
-"g* c #202931",
-"h* c #59758E",
-"i* c #799FBB",
-"j* c #84B1CA",
-"k* c #86ACC6",
-"l* c #354758",
-"m* c #A0A6AE",
-"n* c #DAE6F2",
-"o* c #C4DCEE",
-"p* c #B4D2E8",
-"q* c #3E4A53",
-"r* c #698091",
-"s* c #5D7581",
-"t* c #A3CAE0",
-"u* c #A6CFE5",
-"v* c #A5CCE5",
-"w* c #718A9C",
-"x* c #98C3DB",
-"y* c #83ABC7",
-"z* c #2E3B46",
-"A* c #33414A",
-"B* c #678398",
-"C* c #8AB3CE",
-"D* c #93BED7",
-"E* c #97C4DB",
-"F* c #42525E",
-"G* c #88ACC0",
-"H* c #789EB9",
-"I* c #7A9FBB",
-"J* c #7EA2BD",
-"K* c #779DB5",
-"L* c #577081",
-"M* c #5B7B9B",
-"N* c #1D2229",
-"O* c #547390",
-"P* c #54728D",
-"Q* c #6082A0",
-"R* c #688EA9",
-"S* c #6689A7",
-"T* c #6086A0",
-"U* c #6285A1",
-"V* c #6B8DAA",
-"W* c #718FAB",
-"X* c #3E5568",
-"Y* c #969DA1",
-"Z* c #DBE8F4",
-"`* c #95ACBD",
-" = c #758B9A",
-".= c #A4C9DE",
-"+= c #698190",
-"@= c #667E8A",
-"#= c #7D99AA",
-"$= c #7B9BAD",
-"%= c #6F8C9A",
-"&= c #536976",
-"*= c #84ADC6",
-"== c #6D92AD",
-"-= c #62829E",
-";= c #43576A",
-">= c #2F3B46",
-",= c #5C788A",
-"'= c #86AFC8",
-")= c #93BED8",
-"!= c #93BAD5",
-"~= c #93BAD2",
-"{= c #92BCD4",
-"]= c #7EA2B6",
-"^= c #3D4D56",
-"/= c #485B67",
-"(= c #7596A9",
-"_= c #8CBBD4",
-":= c #90BCD5",
-"<= c #91BFD9",
-"[= c #789BAD",
-"}= c #465B6A",
-"|= c #59789A",
-"1= c #5D7F9D",
-"2= c #5E839C",
-"3= c #59799A",
-"4= c #415569",
-"5= c #2D3A46",
-"6= c #2E3B49",
-"7= c #4A647C",
-"8= c #587690",
-"9= c #39485A",
-"0= c #7F8589",
-"a= c #D9E8F5",
-"b= c #CCDEEE",
-"c= c #8597A5",
-"d= c #B3D2E3",
-"e= c #9BB3C4",
-"f= c #B2CEE1",
-"g= c #B2D1E7",
-"h= c #ABCFE6",
-"i= c #94B7CB",
-"j= c #495C6A",
-"k= c #688498",
-"l= c #617B8A",
-"m= c #85ADC8",
-"n= c #78A0B9",
-"o= c #62819B",
-"p= c #2E3843",
-"q= c #485A6C",
-"r= c #67889C",
-"s= c #8AB5CF",
-"t= c #8EB9D1",
-"u= c #6C899B",
-"v= c #6E91A7",
-"w= c #678399",
-"x= c #6888A1",
-"y= c #323E48",
-"z= c #5B7585",
-"A= c #98C5DD",
-"B= c #83ACC1",
-"C= c #2D373F",
-"D= c #4B637C",
-"E= c #567694",
-"F= c #26313C",
-"G= c #15191F",
-"H= c #4D647A",
-"I= c #252F39",
-"J= c #5D6163",
-"K= c #DDE9F5",
-"L= c #CEDFEE",
-"M= c #8898A5",
-"N= c #B0CBDC",
-"O= c #BFDAEC",
-"P= c #BFDBEC",
-"Q= c #BBDAEC",
-"R= c #BAD7EA",
-"S= c #6B808F",
-"T= c #7297B0",
-"U= c #8CB8D1",
-"V= c #95C1D9",
-"W= c #91BCD6",
-"X= c #86AEC8",
-"Y= c #7496B3",
-"Z= c #6587A2",
-"`= c #384958",
-" - c #323F4B",
-".- c #546A7C",
-"+- c #6C88A1",
-"@- c #779AB1",
-"#- c #658297",
-"$- c #3B4A58",
-"%- c #33404B",
-"&- c #202830",
-"*- c #577287",
-"=- c #86B1CC",
-"-- c #86ACC0",
-";- c #6E8797",
-">- c #9CC7DF",
-",- c #92BCD5",
-"'- c #91BCD5",
-")- c #8EB6CE",
-"!- c #344453",
-"~- c #263039",
-"{- c #364452",
-"]- c #2B3643",
-"^- c #2A2D2E",
-"/- c #E1EBF4",
-"(- c #D2E4F3",
-"_- c #A0B2C3",
-":- c #8094A1",
-"<- c #BAD8EB",
-"[- c #B8D6EA",
-"}- c #485A6A",
-"|- c #789FB9",
-"1- c #90BBD3",
-"2- c #94C4DC",
-"3- c #88B3CD",
-"4- c #7A9EB9",
-"5- c #698BA8",
-"6- c #4D677C",
-"7- c #151A1E",
-"8- c #1A2125",
-"9- c #171C21",
-"0- c #1D2329",
-"a- c #1D262E",
-"b- c #486073",
-"c- c #6A8CAA",
-"d- c #7CA2BE",
-"e- c #90BDD7",
-"f- c #9AC5DE",
-"g- c #7493A2",
-"h- c #708B99",
-"i- c #8CB7D1",
-"j- c #7494AB",
-"k- c #68889F",
-"l- c #6A8FA5",
-"m- c #7BA2BC",
-"n- c #171D21",
-"o- c #1D262F",
-"p- c #212B36",
-"q- c #09090B",
-"r- c #BBC2C9",
-"s- c #D4E4F2",
-"t- c #C1D9EB",
-"u- c #44515A",
-"v- c #92B5C9",
-"w- c #6B8795",
-"x- c #4E687E",
-"y- c #7EA6C0",
-"z- c #91BED8",
-"A- c #93BFD9",
-"B- c #8CB5D0",
-"C- c #7DA4BE",
-"D- c #6F92AE",
-"E- c #6687A5",
-"F- c #526C85",
-"G- c #415669",
-"H- c #384655",
-"I- c #6589A4",
-"J- c #6E92AE",
-"K- c #80A8C2",
-"L- c #92BCD6",
-"M- c #91BFD8",
-"N- c #799AAF",
-"O- c #6A8796",
-"P- c #81AAC3",
-"Q- c #577187",
-"R- c #1F2930",
-"S- c #192027",
-"T- c #1B2227",
-"U- c #0D1010",
-"V- c #0E1012",
-"W- c #070709",
-"X- c #5C6062",
-"Y- c #DCE8F3",
-"Z- c #C4DCEF",
-"`- c #9BB3C6",
-" ; c #3A424F",
-".; c #313A44",
-"+; c #35424C",
-"@; c #374655",
-"#; c #6E91AD",
-"$; c #87B2CC",
-"%; c #799EBA",
-"&; c #618298",
-"*; c #7095AF",
-"=; c #435663",
-"-; c #80A7C0",
-";; c #95C4DC",
-">; c #779CB3",
-",; c #526D7E",
-"'; c #516A7A",
-"); c #526B7B",
-"!; c #465764",
-"~; c #34414E",
-"{; c #5C7E9A",
-"]; c #2B3741",
-"^; c #4B657F",
-"/; c #5C7D9C",
-"(; c #557088",
-"_; c #0F0F10",
-":; c #B9C2CA",
-"<; c #CCDFEF",
-"[; c #B4CDE1",
-"}; c #8DAEC8",
-"|; c #6F93AE",
-"1; c #678CA6",
-"2; c #6E92AF",
-"3; c #81A8C1",
-"4; c #8FBBD5",
-"5; c #8DB9D2",
-"6; c #6D8FA2",
-"7; c #586F82",
-"8; c #394851",
-"9; c #86B0C6",
-"0; c #85AFC8",
-"a; c #6F94AF",
-"b; c #698DA8",
-"c; c #6889A7",
-"d; c #5E7E9F",
-"e; c #475D75",
-"f; c #2E3C4A",
-"g; c #5D7E9D",
-"h; c #405465",
-"i; c #36393B",
-"j; c #D7E5F1",
-"k; c #A4C5DC",
-"l; c #668496",
-"m; c #7595AB",
-"n; c #7798AE",
-"o; c #97C2DA",
-"p; c #789DB3",
-"q; c #8BB1C8",
-"r; c #93C0D9",
-"s; c #8BB5CF",
-"t; c #85AFC9",
-"u; c #82AAC6",
-"v; c #5F7C95",
-"w; c #1E252C",
-"x; c #54728E",
-"y; c #587899",
-"z; c #5A7B9B",
-"A; c #2D3843",
-"B; c #798086",
-"C; c #D1E3F1",
-"D; c #B7D3E8",
-"E; c #7E98AB",
-"F; c #181C1F",
-"G; c #46525F",
-"H; c #80A1B8",
-"I; c #99C3DB",
-"J; c #85ACC2",
-"K; c #21272D",
-"L; c #0A0B0D",
-"M; c #53718C",
-"N; c #577797",
-"O; c #1B2229",
-"P; c #0D0E0F",
-"Q; c #B3BDC4",
-"R; c #CADDED",
-"S; c #B4D3E7",
-"T; c #2B3339",
-"U; c #2F3840",
-"V; c #7899AC",
-"W; c #93C1D9",
-"X; c #8FBCD5",
-"Y; c #8BB6D1",
-"Z; c #8DB8D2",
-"`; c #92BFD8",
-" > c #678092",
-".> c #547089",
-"+> c #5C7F9B",
-"@> c #1F262E",
-"#> c #202223",
-"$> c #B1BECB",
-"%> c #C3D9EB",
-"&> c #7B8D99",
-"*> c #708B9A",
-"=> c #85ABC1",
-"-> c #7FA3BA",
-";> c #92BBD3",
-">> c #7CA0B4",
-",> c #97BDD4",
-"'> c #657E8F",
-")> c #93BDD4",
-"!> c #88ADC7",
-"~> c #6F94AE",
-"{> c #526A7E",
-"]> c #65849B",
-"^> c #799DBB",
-"/> c #84AFC9",
-"(> c #8FB9D2",
-"_> c #323C45",
-":> c #516C84",
-"<> c #658AA4",
-"[> c #5B7C9B",
-"}> c #2E3A49",
-"|> c #2A3038",
-"1> c #252D3A",
-"2> c #1B1E20",
-"3> c #ADBFCF",
-"4> c #C0D6E7",
-"5> c #B0CDE2",
-"6> c #8EB3C9",
-"7> c #526975",
-"8> c #6B899D",
-"9> c #597183",
-"0> c #90BAD5",
-"a> c #94C2DA",
-"b> c #82ABC5",
-"c> c #495E6E",
-"d> c #82A8C3",
-"e> c #81A4BA",
-"f> c #7594A5",
-"g> c #87ABC3",
-"h> c #4D6573",
-"i> c #6689A6",
-"j> c #526E85",
-"k> c #243037",
-"l> c #607B96",
-"m> c #7699B6",
-"n> c #789EB5",
-"o> c #303D48",
-"p> c #7498B4",
-"q> c #7094AF",
-"r> c #597792",
-"s> c #242F39",
-"t> c #1A1D25",
-"u> c #374553",
-"v> c #4D677D",
-"w> c #14191E",
-"x> c #040505",
-"y> c #171A1D",
-"z> c #8A9FAD",
-"A> c #BCD9EC",
-"B> c #B5D3E7",
-"C> c #A2CAE1",
-"D> c #9DC7DE",
-"E> c #9EC7DD",
-"F> c #3B4A57",
-"G> c #455867",
-"H> c #98C2DB",
-"I> c #85B0CC",
-"J> c #7496B2",
-"K> c #4C606F",
-"L> c #6E8EA3",
-"M> c #7EA0B6",
-"N> c #91BBD3",
-"O> c #8DB7D1",
-"P> c #90BAD4",
-"Q> c #96C1DA",
-"R> c #3B4853",
-"S> c #688AA5",
-"T> c #4C657A",
-"U> c #1B2026",
-"V> c #2B3C44",
-"W> c #5F7A90",
-"X> c #587284",
-"Y> c #536978",
-"Z> c #88B1CC",
-"`> c #759AB8",
-" , c #617E9A",
-"., c #556F85",
-"+, c #20272E",
-"@, c #323D48",
-"#, c #333E4A",
-"$, c #060707",
-"%, c #4A5159",
-"&, c #ACC3D5",
-"*, c #ACCFE5",
-"=, c #5A6874",
-"-, c #AACDE1",
-";, c #9CC6DC",
-">, c #35414C",
-",, c #769AB2",
-"', c #80AAC5",
-"), c #6F92AB",
-"!, c #38464F",
-"~, c #7EA4B9",
-"{, c #97C3DC",
-"], c #7A9FB6",
-"^, c #3F505C",
-"/, c #6D8DA6",
-"(, c #1E282E",
-"_, c #080909",
-":, c #090A0C",
-"<, c #344452",
-"[, c #3B4857",
-"}, c #7799AE",
-"|, c #8DB6D1",
-"1, c #66869E",
-"2, c #3D4957",
-"3, c #536C84",
-"4, c #353F4C",
-"5, c #111215",
-"6, c #65727E",
-"7, c #A6BCCD",
-"8, c #5D6972",
-"9, c #AED0E6",
-"0, c #99C5DC",
-"a, c #8DB5D0",
-"b, c #8DB5CE",
-"c, c #90BBD5",
-"d, c #84AAC5",
-"e, c #8EBBD5",
-"f, c #80A7C1",
-"g, c #6C8DA2",
-"h, c #85AFC6",
-"i, c #61839B",
-"j, c #374352",
-"k, c #576D83",
-"l, c #80A6C1",
-"m, c #81A4BB",
-"n, c #111315",
-"o, c #111418",
-"p, c #4C6378",
-"q, c #33424C",
-"r, c #37454D",
-"s, c #8DB4CF",
-"t, c #7397B3",
-"u, c #3A495A",
-"v, c #0D0F13",
-"w, c #27303A",
-"x, c #272E36",
-"y, c #0F1012",
-"z, c #90A4B2",
-"A, c #A8CBE2",
-"B, c #91BCD4",
-"C, c #80ABC3",
-"D, c #567083",
-"E, c #67899D",
-"F, c #94C2DB",
-"G, c #95C1DB",
-"H, c #779CB2",
-"I, c #60849E",
-"J, c #64849F",
-"K, c #1A1F22",
-"L, c #405061",
-"M, c #79A1BD",
-"N, c #324051",
-"O, c #6183A1",
-"P, c #6B8FAD",
-"Q, c #6485A2",
-"R, c #34444F",
-"S, c #060606",
-"T, c #2D3339",
-"U, c #B2CBDF",
-"V, c #94BCD5",
-"W, c #7DA2BA",
-"X, c #3F5264",
-"Y, c #5A7991",
-"Z, c #7195B3",
-"`, c #7BA5BD",
-" ' c #81AAC6",
-".' c #88B2CC",
-"+' c #8EBBD4",
-"@' c #8AB2CC",
-"#' c #82ADC7",
-"$' c #7092A5",
-"%' c #95C2DA",
-"&' c #41525F",
-"*' c #6387A3",
-"=' c #475F72",
-"-' c #21282F",
-";' c #5B7288",
-">' c #0D0F11",
-",' c #0B0E11",
-"'' c #212C36",
-")' c #26323C",
-"!' c #161B20",
-"~' c #55616D",
-"{' c #9BB9D0",
-"]' c #799EB6",
-"^' c #27313A",
-"/' c #1A222B",
-"(' c #5D7E99",
-"_' c #6587A4",
-":' c #6789A6",
-"<' c #6B8EAB",
-"[' c #628097",
-"}' c #6D8B9D",
-"|' c #769AAF",
-"1' c #6E91A9",
-"2' c #6C8EAD",
-"3' c #6E91AF",
-"4' c #3C4D59",
-"5' c #8BB1CB",
-"6' c #232D32",
-"7' c #13171B",
-"8' c #232B32",
-"9' c #839AAF",
-"0' c #789BB3",
-"a' c #283138",
-"b' c #0C0E0F",
-"c' c #242B33",
-"d' c #3D4D5B",
-"e' c #435768",
-"f' c #4B6176",
-"g' c #283137",
-"h' c #8DB4CC",
-"i' c #41535E",
-"j' c #405362",
-"k' c #3C4F60",
-"l' c #3C4E5B",
-"m' c #2B353E",
-"n' c #526876",
-"o' c #92BAD3",
-"p' c #1B1F23",
-"q' c #31383F",
-"r' c #7F9CB6",
-"s' c #21292F",
-"t' c #29333F",
-"u' c #1F252E",
-"v' c #090A0E",
-"w' c #4D626E",
-"x' c #96BDD3",
-"y' c #191D20",
-"z' c #13181B",
-"A' c #80A4BC",
-"B' c #1B2027",
-"C' c #5D7182",
-"D' c #2C383F",
-"E' c #364857",
-"F' c #1A2028",
-"G' c #333F49",
-"H' c #7FA2B5",
-"I' c #4A5E6E",
-"J' c #232E35",
-"K' c #252D35",
-"L' c #2F3A41",
-"M' c #0A0B0E",
-"N' c #14191D",
-"O' c #5A717F",
-"P' c #212931",
-"Q' c #222B34",
-"R' c #101216",
-"S' c #21272B",
-" ",
-" ",
-" ",
-" . ",
-" + ",
-" @ # $ % ",
-" & * = - ; ",
-" > , ' ) ! ~ { ] ",
-" ^ / ( _ : < [ } | 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 C D E F G H I J K L M N O P Q R S T U U V W X Y ",
-" Z ` ...+.@.#.$.%.O &.*.=.-.;.>.,.'.).!.~.~.~.{.].^./.(._.:.<. ",
-" b [.}.|.#.1.2.3.4.{.~.~.~.~.5.6.5.~.7.8.{.~.~.~.~.9.0.a.b.].c. ",
-" d.e.f.g.h.i.j.k.{.~.~.~.~.l.~.m.% n.~.o.{.{.~.~.~.~.p.V 9.~.q.r. ",
-" s.t.u.v.w.x.u y.z.A.B.5.~.~.5.C.D.E.F.~.~.G.~.~.~.G.H.I.J.~.~.J.K.L. M.N. ",
-" O.P.Q.R.S.T.U.V.W.X.Y.Z.`.~.~.5. +.+++@+U ~.~.~.~.~.#+$+%+,.~.~.G.&+*+=+-+;+ ",
-" >+,+Q.'+)+!+~+{+]+^+/+(+_+:+<+~.[+}+U 9.|+5.~.~.~.~.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+5.U ~.U r+s+~.~.~.t+u+v+w+x+y+~.z+A+t+B+C+D+E+ F+G+ ",
-" H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+V ~.~.~.~.U ~.~.~.o.9.{.Z+`+9.~.~.~.V @.@+@@@#@ $@%@&@*@ ",
-" =@-@;@>@,@'@'.)@!@~@{@]@^@/@l+(@_@:@<@~.~.~.U {.~.~.~.{.~.~.{.[@~.~.~.~.}@|@1@2@3@4@5@6@7@8@ ",
-" 9@0@a@b@c@d@-.e@f@g@h@i@j@k@l@V+m@n@o@p@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.q@r@s@t@u@v@w@x@y@ ",
-"z@A@B@C@D@E@X F@G@H@R I@J@K@L@M@N@O@P@Q@R@o+S@T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.9.U@V@W@X@<+V Y@Z@`@ # ",
-" .#+#@###$#%#*#=#-#;#>#,#'#)#!#~#{#]#^#S@/#~.~.~.~.~.~.~.~.~.~.~.~.~.U (#_#:#<#p@{.[#}#|#1#2# ",
-" 3#4#5#6#7#8#9#0#a#b#c#d#e#f#g#h#i#j#k#S@/#~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.l#m#9.{.~.n#o#p#q#r#s# ",
-" t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#I#% J#K#S@T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.L#0.l.~.~.{.M#N#O#P#Q#R# ",
-" S#T#U#V#W#X#Y#Z#`# $.$+$@$#$$$%$&$*$=$-$a#~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.o.o.;$9.G.~.>$,$'$)$!$~${$]$ ",
-" ^$/$($_$:$<$[$}$|$1$2$3$4$5$6$7$8$9$:+<+~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.G.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$M#p@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.;$D$E$F$G$H$I$J$K$L$ ",
-" M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$`$ %.%+%@%<+{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.#%$%%%p@&%*%=%-%;%>%,% ",
-" '%)%!%~%{%]%^%/%(%_%:%<%[%}%|%1%2%3%-$T@~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.4%5%U p@6%7%8%9%0%a%y ",
-" b%c%d%e%f%g%h%i%G.[#j%k%l%m%n%o%p%@%q%{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.~.~.~.~.~.~.V G.}@r%s%t%u%v%w%M.x%y%z%A% ",
-" B%C%D%E%F%G%H%I%V o.<@J%K%L%M%N%O%P%p@~.~.~.~.~.~.~.~.~.U ~.~.U 9.Q%{.~.~.~.~.~.{.%%U {.~.~.{.v@R%S%T%U%V%W% X%$ ",
-" Y%Z%`% &.&+&@&U ~.{.$&%&&&*&=&-&T@~.~.~.~.~.~.~.~.~.~.~.;&>&,&'&)&!&5+~.~.~.~.{.~&{&]&9.~.p@^&/&(&_&:& <&[&}&|& ",
-" 1&2&3&4&5&6&7&8&9&l.~.{.V 0&a&b&c&~.~.~.~.~.~.~.5.d&e&f&g&h&i&j&k&l&m&n&~.~.G.~.~.~.o&p&q&r&s&t&u&v& w&x&y&z&A&B& ",
-" C&2&D&E&F&G&G&H&I&J&U ~.~.U K&L&,.~.~.~.~.~.~.~.U M&N&O&P&Q&R&S&T&U&V&W&X&].{.~.~.{./#Y&Z&`& *.*+*@* (.#*$*%*&***=* ",
-" -*;*>*,*'*)*!*~*{*]*^*~.5.{.5./*U ~.~.~.~.~.~.{.[#(*_*:*<*[*[*}*|*1*2*3*4*5*U ~.~.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*1+~.~.~.~.~.~.~.~.~.~.~.x*y*z*A*B*C*D*E*V U ~.G.~.:.F*G*l.{.R%X+H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*X* ",
-" Y*Z*D&`* =.=+=@=#=$=%=&={.~.~.~.~.~.~.~.~.~.~.<+*===-=;=>=,='=)=[#p@!=~={=]=^=/=(=a#&%_=:=<=-#[=}=k$|=1=2=3=4=5=6=7=8=9= ",
-" 0=a=b=c=d=e=f=g=h=i=j=k=l=5.~.~.~.~.~.~.~.~.~.V -$m=n===o=p=q=r=s=t=:+u=v=w=x=y=z=A=J.V U ~.V [#B=C=D=1=E=F= G=H=I= ",
-" J=K=L=M=N=O=P=Q=R=S=T=U=V=5.U ~.~.~.~.~.~.~.~.~.{.x*W=X=Y=Z=`= -.-+-@-#-$-%-&-*-=---;->-9.x*)=,-'-)-c.!-~- {-]- ",
-" ^-/-(-_-:-<-<-[-%.}-|-1-T@~.{.~.~.~.~.~.~.~.~.~.~.V 2-^&3-4-5-6-7-8-9-0-a-b-c-d-e-f-g-h-V@i-j-k-l-T=m-7@n- o-p- ",
-" q-r-s-t-u-v-!+2*w-x-y-z-V ~.~.~.~.~.~.~.~.~.~.~.~.~.~./#A-B-C-D-E-F-G-H-I-J-K-L-<@M-W=N-O-P-Q-R-<&S-T-U-V- W- ",
-" X-Y-Z-`- ;.;+;@;#;$;q+~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~./#v@W=N#%;&;*;=;-;s=-#;;>;,;';);!;~;{;];^;/;(;H+ ",
-" _;:;<;[;};|;1;2;3;4;{.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.T@-#5;6;7;8;9;[#V <+0;a;b;c;E-d;e;f;|=g;h; ",
-" i;j;V#k;F.l;m;n;o;~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.~.{.p@S@s=p;q;~.~.{.r;s;t;u;~$v;w;x;y;z;A; ",
-" H+B;C;D;E;F;G;H;~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.{.U ~.~.V E*E*V ~.~.~.{.T@/#I;J;K;L;M;y;N;O; ",
-" P;Q;R;S;T;U;~.{.~.~.~.~.~.~.~.~.l.U {.p@~.~.{.V ~.~.5+V;].~.~.~.~.{.{.p@W;X;Y;Z;`;/# >W..>+>N;@> ",
-" #>$>%>&>*>G.~.~.~.~.~.~.~.~.{.`.=>V=->;>~.n##&>>T@,>'>].~.~.~.~.~.)>!>i$~>{>]>^>/>(>_>:><>[>}> |>1> ",
-" 2>3>4>5>U@U ~.~.~.~.~.~.~.{.6>7>8>9>0>a#a>b>c>d>e>f>~.~.~.V ~.~.g>h>i>1=j>,%k>l>m>n>o>p>q>r>s>t>u>v>w> ",
-" x>y>z>A>B>C>5+D>E>~.~.~.~.{.%&F>G>3;s%{.H>I>J>K>L>M>~.V N>O>P>x*Q>R>S>T>U> X%V>W>X>Y>Z>P-`> ,.,+, ",
-" @,#,$,%,&,1.*,=,-,;,{.p@V {.X@>,,,Z;V ~.5.`;',),!,~,~.{,],^,/,/&-$F$(,_, :,<,[,},<@|,1,2, ",
-" B&3,4, 5,6,7,8,9,0,`;a,b,B+c,d,s=<+~.~.~.a#e,f,g,h,V -#9$i,j,k,l,m,n, o,p,q,r,s,t,u,v, ",
-" w,x, y,z,A,B,C,D,E,o@F,G,<+~.~.~.~.~.;;P>j%}@p@H,]#I,J,K,L,M,=+ N,O,P,Q,R,S, ",
-" T,U,V,W,X,Y,Z,`, '.'+'x*~.{.O+@%@'#'$'%'a#&'*'='-' ~;;'>' ,''')'!' ",
-" ~'{']'^'/'('_'_':'<'['}'{.V |'1'2'3'4'5'}@6'7' 8'K; ",
-" v&9'0'a' b'c'd'e'f'1@g'h'G.i'j'k'l'm'n'o'p' y ",
-" q'r's' t'u'H+ v'w'x'y' z'A'B' ",
-" C'D' E'F' G'H' I'J' ",
-" K'L' M' N'O' P'Q' ",
-" R' S' ",
-" ",
-" ",
-" ",
-" "};
diff --git a/libs/minilibx_mms_20200219/Makefile b/libs/minilibx_mms_20200219/Makefile
new file mode 100644
index 0000000..39c36f4
--- /dev/null
+++ b/libs/minilibx_mms_20200219/Makefile
@@ -0,0 +1,34 @@
+
+
+
+MODULE_SRC= mlx_image.swift mlx_window.swift mlx_init.swift
+MODULE_OBJ=$(MODULE_SRC:.swift=.swiftmodule)
+
+SRC= interface.swift $(MODULE_SRC)
+OBJ=$(SRC:.swift=.o)
+
+C_SRC= mlx_xpm.c mlx_png.c mlx_string_put.c
+C_OBJ=$(C_SRC:.c=.o)
+CFLAGS=-O3
+
+NAME=libmlx.dylib
+
+INC=-I.
+#OPTI=-Ounchecked
+
+all: $(NAME)
+
+$(NAME): $(MODULE_OBJ) $(OBJ) $(C_OBJ)
+ swiftc $(OPTI) $(INC) -o $(NAME) -emit-library $(OBJ) $(C_OBJ) -lz
+
+
+
+%.o: %.swift
+ swiftc $(OPTI) $(INC) -parse-as-library -c $< -o $@
+
+%.swiftmodule: %.swift
+ swiftc $(OPTI) $(INC) -parse-as-library -c $< -o $@ -emit-module -module-name $(patsubst %.swift,%,$<) -module-link-name $(patsubst %.swift,%,$<)
+
+clean:
+ rm -f $(NAME) $(OBJ) $(MODULE_OBJ) $(C_OBJ) *.swiftdoc *~
+
diff --git a/libs/minilibx_mms_20200219/font.c b/libs/minilibx_mms_20200219/font.c
new file mode 100644
index 0000000..d4c48cc
--- /dev/null
+++ b/libs/minilibx_mms_20200219/font.c
@@ -0,0 +1,3526 @@
+/* GIMP RGBA C-Source image dump (font.c) */
+
+static const struct {
+ unsigned int width;
+ unsigned int height;
+ unsigned int bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */
+ unsigned char pixel_data[1140 * 20 * 4 + 1];
+} font_atlas = {
+ 1140, 20, 4,
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\214\377\377\377\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377I\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377"
+ ")\377\377\377\033\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\216\377\377\377\263\377\377\377\013\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\000\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377b\377\377\377V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\215\377\377\377\270\377\377"
+ "\377u\377\377\377\013\377\377\377\252\377\377\377\255\377\377\377\013\000\000\000"
+ "\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\317\377\377\377\374\377\377"
+ "\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377"
+ "\377e\377\377\377\065\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\234\377\377\377"
+ "\267\377\377\377B\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\343\377"
+ "\377\377\375\377\377\377M\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\377\377\377\013\377\377\377\355\377\377\377\367\377\377\377\070\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377j\377\377\377\373\377\377\377\243\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377b\377\377\377\237\377\377\377\233\377\377\377Z\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377b\377\377\377c\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377)\377\377\377e\377\377\377I\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377U\377\377"
+ "\377c\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377b\377\377\377c\377\377\377\013\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377S\377\377\377c\377\377\377\065\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\213\377\377\377\363\377\377\377\364\377\377\377\364\377\377\377\372\377"
+ "\377\377\225\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "u\377\377\377\371\377\377\377\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\215\377\377"
+ "\377\372\377\377\377\364\377\377\377\364\377\377\377\363\377\377\377\224"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377U\377\377\377e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\351\377\377\377\376\377\377\377"
+ "s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\214\377\377\377\372"
+ "\377\377\377\\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377K\377\377\377\367\377\377"
+ "\377\315\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\065\377\377\377"
+ "\340\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\304\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377\214\377\377\377\372\377\377\377\\\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\377\377\377s\377\377\377\366\377\377\377\342\377\377\377"
+ "%\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377s\377\377\377\366\377\377\377\342\377\377\377%\000\000\000"
+ "\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377K\377\377\377"
+ "\372\377\377\377\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\306\377\377\377\374\377"
+ "\377\377\370\377\377\377\370\377\377\377\304\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377E\377\377"
+ "\377\317\377\377\377\357\377\377\377\373\377\377\377\225\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\320"
+ "\377\377\377\374\377\377\377)\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\215\377\377\377\372\377\377\377\363\377"
+ "\377\377\333\377\377\377m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\000\377\377\377\000\377\377\377\000\377\377\377\001\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\013\377\377\377\364\377\377\377\366\377\377\377%\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377\377"
+ "\377\361\377\377\377\377\377\377\377\254\377\377\377=\377\377\377\375\377"
+ "\377\377\372\377\377\377)\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\215\377\377\377\363\377\377\377%\377\377\377"
+ "\224\377\377\377\363\377\377\377%\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\062\377\377\377\336\377\377\377\375\377"
+ "\377\377x\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\377\377\377\262\377\377\377\372\377\377\377\370\377\377\377\246\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\224\377\377\377=\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\377\377\377~\377\377\377\374\377\377\377\377\377\377"
+ "\377\376\377\377\377\224\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377V\377\377\377\375\377\377\377"
+ "\376\377\377\377l\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\325\377\377\377\377"
+ "\377\377\377\271\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\355\377\377\377\033\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\376\377\377\377v\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377"
+ "\315\377\377\377\367\377\377\377\373\377\377\377\334\377\377\377B\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377`\377\377\377\300\377\377\377\342\377\377\377Z\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\224\377\377"
+ "\377\347\377\377\377\373\377\377\377\364\377\377\377\312\377\377\377)\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377"
+ "\226\377\377\377\346\377\377\377\370\377\377\377\360\377\377\377\327\377"
+ "\377\377b\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\214\377\377\377\343\377\377\377\273"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377"
+ "\377\377\315\377\377\377\337\377\377\377\333\377\377\377\333\377\377\377"
+ "\333\377\377\377\343\377\377\377\223\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\215\377\377\377\346\377\377\377"
+ "\370\377\377\377\364\377\377\377\320\377\377\377O\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\377\377\377\013\377\377\377\315\377\377\377\337\377\377\377"
+ "\333\377\377\377\333\377\377\377\333\377\377\377\333\377\377\377\333\377"
+ "\377\377\323\377\377\377\033\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000"
+ "\000\377\377\377\062\377\377\377\316\377\377\377\366\377\377\377\373\377\377"
+ "\377\344\377\377\377\200\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\377\377\377u\377\377\377\342\377\377\377\370\377\377\377"
+ "\364\377\377\377\305\377\377\377%\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377)\377\377\377\065\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\371\371\377.\377\377\377V\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\013\377\377\377\321\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\271\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377Q\377"
+ "\377\377\273\377\377\377\332\377\377\377\322\377\377\377\206\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\070\377\377\377\367\377\377\377\376\377\377\377s\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\374\377\377\377\360\377\377"
+ "\377\253\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\377\377\377\013\377\377\377\304\377\377\377\375\377\377\377\377\377\377\377"
+ "\377\377\377\377\373\377\377\377\247\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\307\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\374\377\377\377\324\377\377\377B\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377K\377\377\377\374\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\346\377\377\377\013\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377\013\377\377\377\352\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\376\377\377\377l\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\065\377\377\377\333\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\361\377\377\377\202\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\307\377\377\377"
+ "\376\377\377\377i\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\352\377\377"
+ "\377\364\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\224\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373\377"
+ "\377\377\377\377\377\377\377\377\377\377\303\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\013\377\377\377\361\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\225"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377"
+ "\377\377\377\377\377\225\000\000\000\000\000\000\000\000\377\377\377\033\377\377\377\356\377"
+ "\377\377\376\377\377\377v\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377\013\377\377\377\352\377\377\377\364\377\377\377%\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\307\377\377\377\377\377\377\377\243\000\000\000\000\000\000\000\000\377\377\377u\377\377"
+ "\377\375\377\377\377\321\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\377\377\377\307\377\377\377\377\377\377\377\251\000\000\000\000\000\000\000\000\377\377"
+ "\377\013\377\377\377\355\377\377\377\330\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\377\377\377\206\377\377\377\366\377\377\377\377\377"
+ "\377\377\377\377\377\377\373\377\377\377\246\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\370\377\377\377\324\377"
+ "\377\377B\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377"
+ "\377\206\377\377\377\370\377\377\377\377\377\377\377\377\377\377\377\373"
+ "\377\377\377\240\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\377\377\377\224\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\364\377\377\377\312\377\377\377\033\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\204\377\377\377\365\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\342\377\377\377"
+ "V\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\224\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\252\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\377\377\377\307\377\377\377\376\377\377\377i\000\000"
+ "\000\000\000\000\000\000\377\377\377\013\377\377\377\352\377\377\377\364\377\377\377%"
+ "\377\377\377\377\377\377\377\377\377\377\377}\377\377\377\376\377\377\377"
+ "\332\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\262\377\377\377\377\377"
+ "\377\377\216\377\377\377\377\377\377\377\377\377\377\377\345\377\377\377"
+ "\372\377\377\377=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377"
+ "\377\355\377\377\377\356\377\377\377\377\377\377\377\377\377\377\377\013\377"
+ "\377\377\345\377\377\377\376\377\377\377~\000\000\000\000\000\000\000\000\377\377\377\070"
+ "\377\377\377\367\377\377\377\360\377\377\377\033\377\377\377\377\377\377\377"
+ "\377\377\377\377\206\377\377\377\377\377\377\377\332\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\266\377\377\377\377\377\377\377\234\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\361\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\312\377\377\377\255"
+ "\377\377\377\266\377\377\377u\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377;\377\377\377\373\377\377\377\347\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377`\377\377\377\266\377\377\377\263\377\377\377\256\377\377\377\373\377"
+ "\377\377\254\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\033\377\377\377\371\377\377\377\376\377\377"
+ "\377_\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377b\377\377"
+ "\377\374\377\377\377\355\377\377\377\033\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\224\377\377\377\376\377\377\377l\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377K\377\377\377\374\377\377\377\333\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\334\377\377\377\377\377\377\377\346\377\377\377\272\377"
+ "\377\377\342\377\377\377\276\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\376\377"
+ "\377\377l\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\215\377\377"
+ "\377\377\377\377\377\377\377\377\377l\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\215\377\377\377"
+ "\377\377\377\377\377\377\377\377l\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377K\377\377\377\375\377\377\377\254\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377\247\377\377\377\343\377\377\377\340\377\377\377\377\377"
+ "\377\377\333\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377`\377\377\377\262\377\377\377=\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\342\377\377\377\377\377"
+ "\377\377\325\377\377\377\266\377\377\377u\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\371"
+ "\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377`\377\377\377\263\377\377\377\307\377\377\377\376\377\377"
+ "\377\363\377\377\377\033\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\000\377\377\377\000\377\377\377\000\377\377\377\001\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\013\377\377\377\351\377\377\377\366\377\377\377)\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377\377\377\356\377"
+ "\377\377\377\377\377\377\243\377\377\377;\377\377\377\374\377\377\377\364"
+ "\377\377\377%\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\313\377\377\377\355\000\000\000\000\377\377\377\320\377\377\377"
+ "\346\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377"
+ "\377\377\247\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\352\377\377\377S\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\377\377\377}\377\377\377\377\377\377\377\326\377\377\377\334\377\377\377"
+ "\376\377\377\377l\000\000\000\000\377\377\377}\377\377\377\377\377\377\377\323\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377\377\377\354\377\377"
+ "\377\364\377\377\377\226\377\377\377\373\377\377\377\337\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\033\377\377\377\362\377\377\377\376\377\377\377l\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\232\377\377\377\377\377\377\377\336\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\302\377"
+ "\377\377\377\377\377\377\277\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377|\377\377"
+ "\377\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377_\377\377\377\232\377\377\377"
+ "\013\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377!\377\377\377\371\377\377\377\352\377\377\377\013\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377\377\377\345\377\377"
+ "\377\377\377\377\377\365\377\377\377\353\377\377\377\377\377\377\377\367"
+ "\377\377\377\062\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377"
+ "\377\377\313\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377"
+ "l\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377\314\377\377\377\377\377\377\377\376\377\377\377\335\377\377\377\371"
+ "\377\377\377\377\377\377\377\352\377\377\377\033\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\302\377\377\377\377\377\377\377\377\377"
+ "\377\377\342\377\377\377\362\377\377\377\377\377\377\377\375\377\377\377"
+ "\\\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\377\377\377U\377\377\377\374\377\377\377\377\377\377\377\333\000\000\000\000\000"
+ "\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377\377\377"
+ "\361\377\377\377\377\377\377\377\373\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\251\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\377\377\377\247\377\377\377\377\377\377\377\377\377\377\377"
+ "\360\377\377\377\373\377\377\377\377\377\377\377\360\377\377\377\033\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377\332\377\377\377\377\377\377"
+ "\377\376\377\377\377\374\377\377\377\374\377\377\377\376\377\377\377\377"
+ "\377\377\377\367\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\025\377\377\377\356\377\377\377\377\377\377\377\351\377\377\377\350"
+ "\377\377\377\376\377\377\377\376\377\377\377s\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377|\377\377\377\376\377\377\377\377\377\377"
+ "\377\345\377\377\377\356\377\377\377\377\377\377\377\355\377\377\377%\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377}\377\377\377\374\377\377\377\254\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377V\377\377\377\375\377\377\377\241\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\070\377\377\377\372\377\377\377\343\377\377\377u\377\377\377\217"
+ "\377\377\377\374\377\377\377\375\377\377\377M\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\377\377\377\233\377\377\377\376\377\377\377"
+ "\377\377\377\377\354\377\377\377\375\377\377\377\377\377\377\377\257\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\232\377\377\377\377\377\377\377\377\377\377\377\277\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377"
+ "\377\377\377\377\342\377\377\377\304\377\377\377\332\377\377\377\376\377"
+ "\377\377\377\377\377\377\227\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\377\377\377\331\377\377\377\377\377\377\377\373\377\377\377"
+ "\306\377\377\377\307\377\377\377\375\377\377\377\376\377\377\377Q\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377\377\377\377\377\377"
+ "\377\330\377\377\377\310\377\377\377\370\377\377\377\377\377\377\377\375"
+ "\377\377\377f\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "K\377\377\377\374\377\377\377\376\377\377\377\323\377\377\377\327\377\377"
+ "\377\327\377\377\377\327\377\377\377\316\377\377\377\033\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\013\377\377\377\356\377\377\377\376\377\377"
+ "\377\324\377\377\377\327\377\377\377\327\377\377\377\327\377\377\377\312"
+ "\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\033\377"
+ "\377\377\362\377\377\377\377\377\377\377\365\377\377\377\277\377\377\377"
+ "\321\377\377\377\377\377\377\377\366\377\377\377\033\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377\313\377\377\377\376\377\377\377i\000\000\000\000\000\000"
+ "\000\000\377\377\377\013\377\377\377\356\377\377\377\366\377\377\377%\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377}\377\377\377\332\377\377\377"
+ "\323\377\377\377\371\377\377\377\377\377\377\377\331\377\377\377\327\377"
+ "\377\377\266\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\013\377\377\377\302\377\377\377\323\377\377\377\322\377\377\377\322\377\377"
+ "\377\342\377\377\377\377\377\377\377\252\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\252\000\000\000\000"
+ "\000\000\000\000\377\377\377\335\377\377\377\377\377\377\377\315\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377\377\377\356\377\377\377"
+ "\366\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\377\377\377\313\377\377\377\377\377\377\377\336"
+ "\000\000\000\000\000\000\000\000\377\377\377\275\377\377\377\377\377\377\377\330\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\312\377\377\377\377"
+ "\377\377\377\364\377\377\377%\000\000\000\000\377\377\377\013\377\377\377\361\377"
+ "\377\377\333\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "j\377\377\377\375\377\377\377\377\377\377\377\325\377\377\377\313\377\377"
+ "\377\376\377\377\377\377\377\377\377\225\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\342\377\377"
+ "\377\310\377\377\377\322\377\377\377\366\377\377\377\377\377\377\377\355"
+ "\377\377\377\033\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377j\377"
+ "\377\377\375\377\377\377\377\377\377\377\321\377\377\377\307\377\377\377"
+ "\376\377\377\377\377\377\377\377\216\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\342\377\377\377"
+ "\310\377\377\377\322\377\377\377\371\377\377\377\377\377\377\377\336\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377K\377\377\377\374"
+ "\377\377\377\377\377\377\377\330\377\377\377\271\377\377\377\351\377\377"
+ "\377\377\377\377\377\334\000\000\000\000\377\377\377\377\377\377\377\377\377\377"
+ "\377}\377\377\377\332\377\377\377\327\377\377\377\323\377\377\377\371\377"
+ "\377\377\377\377\377\377\331\377\377\377\326\377\377\377\332\377\377\377"
+ "p\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377\377\377\376"
+ "\377\377\377i\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\356\377\377\377"
+ "\366\377\377\377%\377\377\377\377\377\377\377\377\377\377\377\033\377\377"
+ "\377\365\377\377\377\375\377\377\377\070\000\000\000\000\000\000\000\000\377\377\377\013\377"
+ "\377\377\345\377\377\377\375\377\377\377Q\377\377\377\377\377\377\377\377"
+ "\377\377\377\313\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\013\377\377\377\361\377\377\377\347\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377\214\377\377\377\377\377\377\377\343\000\000\000\000"
+ "\000\000\000\000\377\377\377\261\377\377\377\377\377\377\377\272\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\377\377\377\013\377\377\377\351\377\377\377\376\377"
+ "\377\377i\000\000\000\000\000\000\000\000\377\377\377\033\377\377\377\366\377\377\377\372"
+ "\377\377\377\070\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377v\377"
+ "\377\377\327\377\377\377\322\377\377\377\322\377\377\377\316\377\377\377"
+ "\351\377\377\377\377\377\377\377\360\377\377\377\033\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\224\377\377\377\376\377\377"
+ "\377U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\377\377\377\320\377\377\377\376\377\377\377_\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\364\377\377\377\254\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\224\377\377\377\377\377\377\377\377\377\377\377\272\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\233\377\377\377"
+ "\371\377\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377"
+ "\377\376\377\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377K\377\377\377\374"
+ "\377\377\377\333\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377I\377\377\377"
+ "\373\377\377\377\356\377\377\377\033\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377\224\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377S\377\377\377\314\377\377\377\271\377\377\377\013\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377S\377\377\377\314\377\377\377\271\377\377\377\013\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377K\377\377\377\375"
+ "\377\377\377\252\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\360"
+ "\377\377\377\334\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\247\377\377\377\377\377\377\377l\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\361\377\377"
+ "\377\337\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\371\377\377"
+ "\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\372\377\377\377)\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\000\377\377\377"
+ "\000\377\377\377\003\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\371\377\377"
+ "\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\377\377\377\331\377\377\377\376\377\377\377i\377\377\377K\377\377\377"
+ "\374\377\377\377\366\377\377\377)\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\316\377\377\377\333\000\000\000\000\377\377"
+ "\377\316\377\377\377\333\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\070\377\377\377\372\377\377\377\377\377\377\377\307\377"
+ "\377\377\237\377\377\377\364\377\377\377\377\377\377\377\244\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\377\377\377\232\377\377\377\375\377\377\377"
+ "\062\377\377\377=\377\377\377\375\377\377\377\254\377\377\377!\377\377\377"
+ "\371\377\377\377\367\377\377\377\070\377\377\377\377\377\377\377\377\000\000\000"
+ "\000\377\377\377;\377\377\377\372\377\377\377\346\377\377\377\013\377\377\377"
+ "\371\377\377\377\333\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377\375"
+ "\377\377\377\\\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377\376\377"
+ "\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377!\377\377\377\372\377\377\377\375\377\377\377"
+ "\070\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\377\377\377\327\377\377\377\343\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\377\377\377\320\377\377\377\374\377\377\377)\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\224\377\377\377"
+ "\377\377\377\377\252\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377\204\377\377\377\377\377\377\377\353\377\377\377\013\000\000\000"
+ "\000\377\377\377\320\377\377\377\377\377\377\377\260\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\205\377\377\377\322\377\377"
+ "\377\353\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\377\377\377\325\377\377\377\375\377\377\377"
+ "M\000\000\000\000\377\377\377\033\377\377\377\356\377\377\377\376\377\377\377l\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\215\377\377\377"
+ "\375\377\377\377Z\000\000\000\000\000\000\000\000\377\377\377\325\377\377\377\377\377\377"
+ "\377\257\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\025\377\377\377\356\377\377\377\377\377\377\377\377\377\377\377"
+ "\326\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "K\377\377\377\374\377\377\377\330\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377!\377\377\377"
+ "\371\377\377\377\377\377\377\377\216\000\000\000\000\000\000\000\000\377\377\377\302\377"
+ "\377\377\224\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\302\377\377\377\377\377\377\377"
+ "\252\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377V\377\377"
+ "\377\375\377\377\377\333\000\000\000\000\000\000\000\000\377\377\377\224\377\377\377\377"
+ "\377\377\377\260\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377\330\377\377\377\377\377\377\377\251\000\000\000\000\377\377\377\013\377\377\377"
+ "\336\377\377\377\377\377\377\377\227\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\250\377\377\377\276\377"
+ "\377\377\033\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\250\377\377\377\276\377\377\377\033"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\276\377\377\377\377\377\377\377\377"
+ "\377\377\377\225\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377I\377\377\377\373\377\377\377"
+ "\377\377\377\377\325\377\377\377\033\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377)\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\306\377\377\377\376\377\377\377l\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\377\377\377K\377\377\377\374\377\377\377\375\377"
+ "\377\377q\000\000\000\000\377\377\377\033\377\377\377\362\377\377\377\366\377\377"
+ "\377%\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\334\377\377\377\377\377\377\377\376\377\377\377\360\377\377\377\033\000\000\000"
+ "\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377"
+ "\377\377\377\377\377\243\000\000\000\000\000\000\000\000\377\377\377\223\377\377\377\377"
+ "\377\377\377\327\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377s\377\377\377\376\377\377\377\375\377\377\377_\000\000\000\000\000\000\000\000\377\377"
+ "\377z\377\377\377\257\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\313\377\377\377\376\377\377\377U\000\000\000\000\377\377\377\033\377\377"
+ "\377\353\377\377\377\377\377\377\377\333\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377K\377\377\377\374\377\377\377\326\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377\013\377\377\377\355\377\377\377\366\377\377\377\033\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000"
+ "\000\377\377\377\247\377\377\377\377\377\377\377\364\377\377\377)\000\000\000\000\000"
+ "\000\000\000\377\377\377\246\377\377\377\213\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\313\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000"
+ "\377\377\377\013\377\377\377\355\377\377\377\366\377\377\377%\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\355\377"
+ "\377\377\363\377\377\377\013\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\213"
+ "\377\377\377\377\377\377\377\252\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\252\000\000\000\000\377\377"
+ "\377\270\377\377\377\377\377\377\377\355\377\377\377\033\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377\366"
+ "\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\307\377\377\377\377\377\377\377\375\377"
+ "\377\377\070\377\377\377\013\377\377\377\352\377\377\377\377\377\377\377\327"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\307\377\377"
+ "\377\377\377\377\377\377\377\377\377\251\000\000\000\000\377\377\377\013\377\377\377"
+ "\361\377\377\377\333\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\313\377\377\377\377\377\377\377\315\000\000\000\000\000\000\000\000\377\377\377"
+ "\253\377\377\377\377\377\377\377\346\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\243\000\000\000\000\000\000"
+ "\000\000\377\377\377\025\377\377\377\356\377\377\377\376\377\377\377l\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377\377\377\377\377\377"
+ "\377\310\000\000\000\000\000\000\000\000\377\377\377\253\377\377\377\377\377\377\377\342"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377"
+ "\377\377\377\377\377\243\000\000\000\000\000\000\000\000\377\377\377!\377\377\377\371\377"
+ "\377\377\367\377\377\377)\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377\232\377\377\377\377\377\377\377\315\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\302\377\377\377z\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\355\377\377\377\363\377\377\377\013\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313"
+ "\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377"
+ "\355\377\377\377\366\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\377\377\377\312\377\377\377\377\377\377\377\215\000\000\000\000\000\000\000\000\377\377"
+ "\377K\377\377\377\374\377\377\377\347\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\377\377\377\247\377\377\377\377\377\377\377\206\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377K\377\377\377\374\377\377\377\333\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\342\377\377\377\376\377\377"
+ "\377v\377\377\377\033\377\377\377\366\377\377\377\367\377\377\377)\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\214\377\377\377\377"
+ "\377\377\377\316\000\000\000\000\000\000\000\000\377\377\377\232\377\377\377\377\377\377"
+ "\377\264\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\025\377\377\377\356\377\377\377\376\377\377\377"
+ "v\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\224\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377}\377\377\377\377"
+ "\377\377\377\277\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377"
+ "\364\377\377\377\254\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\335\377\377\377\370\377\377\377"
+ "\353\377\377\377\363\377\377\377%\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377)\377\377\377"
+ "V\377\377\377\033\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\224\377\377\377\376\377\377\377b\000\000\000\000\377\377\377"
+ "S\377\377\377\065\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377S\377\377\377I\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\377\377\377S\377\377\377\065\377\377\377;\377\377\377\374\377\377"
+ "\377\333\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377)\377\377\377V\377\377\377\013\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377;\377"
+ "\377\377\374\377\377\377\326\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377E\377\377"
+ "\377E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377\224\377\377\377\376\377\377\377b\000\000\000\000\377\377\377E\377"
+ "\377\377S\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377K\377\377\377\375\377\377\377\252\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\013\377\377\377\361\377\377\377\333\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\377\377\377)\377\377\377X\000\000\000\000\000\000\000\000\377\377\377V\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377E\377\377\377S\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377E\377\377\377K\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377S\377\377\377\065\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377S\377\377\377\065\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377)\377\377\377U\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377E\377\377\377U\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\313\377\377\377\376\377\377\377b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\013\377\377\377\361\377\377\377\333\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\377\377\377\313\377\377\377\371\377\377\377%\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\313\377\377\377\371\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\000\377\377\377\000\377\377\377\006\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\377\377\377\313\377\377\377\371\377\377\377%\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\313\377\377"
+ "\377\376\377\377\377l\377\377\377\033\377\377\377\364\377\377\377\352\377"
+ "\377\377\013\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\062"
+ "\377\377\377\274\377\377\377\361\377\377\377\375\377\377\377\265\377\377"
+ "\377\367\377\377\377\372\377\377\377\221\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377V\377\377\377\374\377\377\377\336\000\000\000\000\000\000"
+ "\000\000\377\377\377\065\377\377\377\261\377\377\377\013\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\377\377\377\232\377\377\377\371\377\377\377\033\377\377\377"
+ ";\377\377\377\374\377\377\377\217\377\377\377\335\377\377\377\375\377\377"
+ "\377\\\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\033\377"
+ "\377\377\371\377\377\377\333\377\377\377e\377\377\377\374\377\377\377\326"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\013\377\377\377\361\377\377\377\364\377\377\377%\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377b\377\377\377\375\377\377\377\333\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\266\377\377\377\377\377\377\377\227\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\316\377\377\377\334\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\313\377\377"
+ "\377\371\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\335\377\377\377\375\377\377\377=\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\306\377\377"
+ "\377\377\377\377\377\225\000\000\000\000\000\000\000\000\377\377\377`\377\377\377\375\377"
+ "\377\377\346\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\213\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\062\377\377\377"
+ "f\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\253\377\377\377\376\377\377\377i\000"
+ "\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\377\377\377\231\377\377\377\377\377\377\377\257\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\313\377"
+ "\377\377\377\377\377\377\356\377\377\377\374\377\377\377\332\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377K\377\377\377\374"
+ "\377\377\377\326\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377"
+ "\377\326\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377b\377"
+ "\377\377\375\377\377\377\347\377\377\377\013\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377U\377\377\377\375\377\377\377\266\000\000\000\000\000\000"
+ "\000\000\377\377\377;\377\377\377\374\377\377\377\236\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\377\377\377\025\377\377\377\361\377\377\377\367\377\377\377"
+ ")\000\000\000\000\000\000\000\000\377\377\377j\377\377\377\376\377\377\377\322\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\214\377"
+ "\377\377\377\377\377\377\377\377\377\377\260\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\214\377"
+ "\377\377\377\377\377\377\377\377\377\377\260\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377G\377\377"
+ "\377\350\377\377\377\377\377\377\377\367\377\377\377y\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\207\377\377\377\307\377"
+ "\377\377\304\377\377\377\304\377\377\377\304\377\377\377\304\377\377\377"
+ "\304\377\377\377\243\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\377\377\377S\377\377\377\351\377\377\377\377\377\377\377\365\377\377"
+ "\377n\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\345\377\377\377\376"
+ "\377\377\377_\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\273\377\377\377\377\377\377\377\234\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\232\377\377\377\376\377\377\377i\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\377\377\377;\377\377\377\373\377\377\377\344\377\377\377\317\377"
+ "\377\377\376\377\377\377v\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\252\000\000\000\000\000\000\000\000"
+ "\377\377\377X\377\377\377\375\377\377\377\327\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\300\377\377\377\377\377\377\377\277\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\313\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000"
+ "\377\377\377K\377\377\377\374\377\377\377\375\377\377\377Q\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\377\377\377K\377\377\377\374\377\377\377\332\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377\366\377\377\377)"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\342\377\377\377\377\377\377\377\225\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\377\377\377\313\377\377\377\376\377\377\377b\000\000\000\000\000\000\000\000\377\377\377"
+ "\013\377\377\377\355\377\377\377\366\377\377\377%\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377"
+ "\366\377\377\377)\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\224\377\377"
+ "\377\377\377\377\377\252\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\377\377\377\224\377\377\377\377\377\377\377\237\377\377\377\203\377\377"
+ "\377\377\377\377\377\375\377\377\377Q\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377\366\377\377"
+ "\377%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\312\377\377\377\377\377\377\377\377\377\377\377"
+ "\217\377\377\377X\377\377\377\375\377\377\377\373\377\377\377\332\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377\377\377\373"
+ "\377\377\377\371\377\377\377\366\377\377\377%\377\377\377\013\377\377\377"
+ "\361\377\377\377\333\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377"
+ "\033\377\377\377\362\377\377\377\375\377\377\377\\\000\000\000\000\000\000\000\000\377\377"
+ "\377\033\377\377\377\366\377\377\377\375\377\377\377Q\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\252\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\306\377\377\377\375\377\377\377\\\377\377"
+ "\377\377\377\377\377\377\377\377\377\033\377\377\377\362\377\377\377\375\377"
+ "\377\377Q\000\000\000\000\000\000\000\000\377\377\377!\377\377\377\371\377\377\377\375\377"
+ "\377\377M\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377"
+ "\377\377\377\377\377\252\000\000\000\000\000\000\000\000\377\377\377\025\377\377\377\370\377"
+ "\377\377\364\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377\232\377\377\377\377\377\377\377\304\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\013\377\377\377\355\377\377\377\366\377\377\377)\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377"
+ "\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355"
+ "\377\377\377\366\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\204\377\377\377\377\377\377\377\311\000\000\000\000\000\000\000\000\377\377\377"
+ "\224\377\377\377\377\377\377\377\260\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\377\377\377\222\377\377\377\377\377\377\377\252\000\000\000\000\377\377\377"
+ "\307\377\377\377\355\377\377\377%\377\377\377K\377\377\377\374\377\377\377"
+ "\260\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377l\377\377"
+ "\377\376\377\377\377\333\377\377\377\243\377\377\377\377\377\377\377\244"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377"
+ "\377\377\345\377\377\377\375\377\377\377M\377\377\377\013\377\377\377\351"
+ "\377\377\377\372\377\377\377)\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\317\377\377\377\377\377"
+ "\377\377\277\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\224\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377"
+ "\377\025\377\377\377\362\377\377\377\363\377\377\377%\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\013\377\377\377\364\377\377\377\254\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377U\377\377\377"
+ "\374\377\377\377\316\377\377\377\247\377\377\377\377\377\377\377\206\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377"
+ "\377\377\216\377\377\377\345\377\377\377\377\377\377\377\377\377\377\377"
+ "\376\377\377\377\275\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377\224\377\377\377\376\377\377\377\271\377\377\377\364\377"
+ "\377\377\377\377\377\377\377\377\377\377\313\377\377\377\013\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\272\377"
+ "\377\377\371\377\377\377\377\377\377\377\377\377\377\377\355\377\377\377"
+ "\200\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377"
+ "}\377\377\377\361\377\377\377\377\377\377\377\377\377\377\377\325\377\377"
+ "\377\377\377\377\377\332\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\377\377\377\065\377\377\377\327\377\377\377\377\377\377\377\377\377"
+ "\377\377\376\377\377\377\267\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\205\377\377\377\361\377\377\377\363\377\377\377"
+ "\377\377\377\377\374\377\377\377\364\377\377\377\367\377\377\377\354\377"
+ "\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377b\377"
+ "\377\377\350\377\377\377\377\377\377\377\377\377\377\377\360\377\377\377"
+ "\360\377\377\377\375\377\377\377\243\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377\224\377\377\377\376\377\377\377\215\377\377\377\350\377"
+ "\377\377\377\377\377\377\377\377\377\377\346\377\377\377\062\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377\301\377\377\377\370\377\377"
+ "\377\364\377\377\377\364\377\377\377\360\377\377\377\350\377\377\377%\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\301\377"
+ "\377\377\370\377\377\377\364\377\377\377\364\377\377\377\360\377\377\377"
+ "\350\377\377\377%\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\377\377\377K\377\377\377\375\377\377\377\252\000\000\000\000\000\000\000\000\377\377\377"
+ "S\377\377\377\354\377\377\377\363\377\377\377I\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\361\377\377\377\333"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377"
+ "\377\013\377\377\377\342\377\377\377\332\377\377\377\374\377\377\377\377\377"
+ "\377\377\276\377\377\377\353\377\377\377\377\377\377\377\352\377\377\377"
+ ")\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\214\377\377\377\371"
+ "\377\377\377\212\377\377\377\350\377\377\377\377\377\377\377\377\377\377"
+ "\377\346\377\377\377\062\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000"
+ "\000\000\000\377\377\377u\377\377\377\351\377\377\377\377\377\377\377\377\377\377"
+ "\377\364\377\377\377\222\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\213\377\377\377\371\377\377\377\262\377\377\377\365"
+ "\377\377\377\377\377\377\377\377\377\377\377\313\377\377\377\013\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377}\377\377\377\361"
+ "\377\377\377\377\377\377\377\377\377\377\377\310\377\377\377\347\377\377"
+ "\377\315\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377"
+ "\377\301\377\377\377\351\377\377\377)\377\377\377\326\377\377\377\377\377"
+ "\377\377\377\377\377\377\372\377\377\377M\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\377\377\377\224\377\377\377\365\377\377\377\377\377\377"
+ "\377\377\377\377\377\373\377\377\377\300\377\377\377=\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\377\377\377\013\377\377\377\332\377\377\377\360\377\377"
+ "\377\373\377\377\377\377\377\377\377\376\377\377\377\364\377\377\377\367"
+ "\377\377\377\354\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\301\377\377\377\354\377\377\377\062\000\000\000\000\000\000\000\000\377\377\377I"
+ "\377\377\377\364\377\377\377\275\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\377\377\377I\377\377\377\364\377\377\377\330\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\267\377\377\377\367\377\377\377\\\377\377\377\377\377\377"
+ "\377\377\377\377\377\335\377\377\377\360\377\377\377\070\000\000\000\000\377\377\377"
+ "~\377\377\377\224\000\000\000\000\377\377\377\013\377\377\377\332\377\377\377\342"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\275\377\377\377\373"
+ "\377\377\377\255\000\000\000\000\000\000\000\000\377\377\377r\377\377\377\370\377\377\377"
+ "\315\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377I\377\377\377\364"
+ "\377\377\377\330\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\254\377\377"
+ "\377\367\377\377\377\\\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "K\377\377\377\365\377\377\377\364\377\377\377\364\377\377\377\364\377\377"
+ "\377\360\377\377\377\360\377\377\377\354\377\377\377%\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\361\377\377"
+ "\377\333\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\371\377\377"
+ "\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\371\377\377\377%\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\000\377\377\377"
+ "\000\377\377\377\007\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\372\377\377"
+ "\377)\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\377\377\377\306\377\377\377\375\377\377\377\070\377\377\377\013\377\377"
+ "\377\364\377\377\377\334\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377K\377\377\377\364\377\377\377\376\377\377\377\370\377"
+ "\377\377\364\377\377\377\376\377\377\377\374\377\377\377\320\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\070\377\377\377\372\377\377"
+ "\377\376\377\377\377\307\377\377\377O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\377\377\377\223\377\377\377\377\377\377\377"
+ "\234\377\377\377\243\377\377\377\376\377\377\377\217\377\377\377\373\377"
+ "\377\377v\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\377\377\377\331\377\377\377\377\377\377\377\377\377\377\377\367\377\377"
+ "\377\070\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\377\377\377\323\377\377\377\374\377\377\377)\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\377\377\377\245\377\377\377\377\377\377\377\215\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\377\377\377V\377\377\377\375\377\377\377\322\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\260\377\377\377\354\377"
+ "\377\377\236\377\377\377\326\377\377\377\361\377\377\377\224\377\377\377"
+ "\341\377\377\377\314\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\371\377\377\377%\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377K\377"
+ "\377\377\374\377\377\377\333\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\325\377\377\377\374\377\377\377\062\377\377"
+ "\377\215\377\377\377\241\377\377\377\013\377\377\377\361\377\377\377\367\377"
+ "\377\377)\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\224\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\307\377\377\377\376\377\377\377l\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\200"
+ "\377\377\377\363\377\377\377\376\377\377\377s\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\377\377\377\240\377\377\377\377\377\377\377"
+ "\363\377\377\377V\377\377\377\374\377\377\377\333\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377K\377\377\377\374\377\377\377"
+ "\333\377\377\377\274\377\377\377\310\377\377\377\251\377\377\377=\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\314\377\377"
+ "\377\376\377\377\377l\377\377\377j\377\377\377\237\377\377\377\223\377\377"
+ "\377%\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\342\377\377\377\376\377\377\377i\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\070\377\377\377"
+ "\372\377\377\377\376\377\377\377\237\000\000\000\000\377\377\377\254\377\377\377"
+ "\377\377\377\377\243\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377"
+ "\025\377\377\377\361\377\377\377\366\377\377\377\033\000\000\000\000\000\000\000\000\377\377"
+ "\377\033\377\377\377\366\377\377\377\355\377\377\377\033\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\232\377\377\377\377\377"
+ "\377\377\377\377\377\377\323\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\232\377\377\377\377\377"
+ "\377\377\377\377\377\377\323\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\377\377\377\224\377\377\377\374\377\377\377"
+ "\377\377\377\377\314\377\377\377\033\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\377\377\377\274\377\377\377\377\377\377\377\370"
+ "\377\377\377\370\377\377\377\370\377\377\377\370\377\377\377\373\377\377"
+ "\377\321\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\264\377\377\377\377\377\377\377\377\377\377\377\262"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\013\377\377\377\337\377\377\377\377\377\377\377\271\000"
+ "\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\025\377\377\377"
+ "\361\377\377\377\352\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377U\377\377\377\237"
+ "\377\377\377\376\377\377\377l\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\377\377\377\232\377\377\377\377\377\377\377\266\377\377\377\213\377"
+ "\377\377\377\377\377\377\304\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\265\377\377\377"
+ "E\377\377\377y\377\377\377\337\377\377\377\377\377\377\377\227\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\377\377\377\013\377\377\377\352\377\377\377\375"
+ "\377\377\377Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\377\377\377\313\377\377\377\376\377\377\377"
+ "i\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\324\377\377\377\376\377\377\377l\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377K\377\377\377\374\377\377"
+ "\377\337\377\377\377Z\377\377\377p\377\377\377p\377\377\377f\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377\377\377\355"
+ "\377\377\377\366\377\377\377)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\377\377\377\065\377\377\377\371\377\377\377\367"
+ "\377\377\377)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\377\377\377\313\377\377\377\376\377\377\377"
+ "\224\377\377\377m\377\377\377v\377\377\377h\377\377\377\362\377\377\377\366"
+ "\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\013\377\377\377\355\377\377\377\366\377\377\377%\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\252\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377"
+ "\377\377\377\300\377\377\377\372\377\377\377\377\377\377\377\236\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377"
+ "\377\377\355\377\377\377\366\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377\377"
+ "\377\370\377\377\377\366\377\377\377\317\377\377\377\243\377\377\377\376"
+ "\377\377\377\372\377\377\377\333\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\313\377\377\377\367\377\377\377\304\377\377\377\377"
+ "\377\377\377\251\377\377\377\013\377\377\377\361\377\377\377\333\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\377\377\377U\377\377\377\374\377\377\377\343"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\314\377\377\377\376\377\377"
+ "\377i\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377"
+ "\377\377\377\377\243\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\335\377\377\377"
+ "\376\377\377\377l\377\377\377\377\377\377\377\377\377\377\377U\377\377\377"
+ "\374\377\377\377\336\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\317\377"
+ "\377\377\376\377\377\377l\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377\224\377\377\377\377\377\377\377\243\000\000\000\000\000\000\000\000\377\377\377`\377"
+ "\377\377\373\377\377\377\366\377\377\377%\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377`\377\377\377\374\377\377\377\377\377\377\377\336\377"
+ "\377\377\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377\366"
+ "\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377\313\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\377\377"
+ "\377\013\377\377\377\355\377\377\377\366\377\377\377%\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\033\377\377\377\371\377\377\377\360\377\377"
+ "\377\033\000\000\000\000\377\377\377\320\377\377\377\376\377\377\377_\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\377\377\377U\377\377\377\375\377\377\377\277"
+ "\377\377\377\033\377\377\377\366\377\377\377\376\377\377\377m\377\377\377"
+ "\213\377\377\377\377\377\377\377\243\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\324\377\377\377\377\377\377\377\377\377"
+ "\377\377\355\377\377\377\033\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\377\377\377\204\377\377\377\377\377\377\377\304\377\377"
+ "\377\204\377\377\377\377\377\377\377\260\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\214\377\377"
+ "\377\377\377\377\377\355\377\377\377\033\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\224\377\377\377\376\377"
+ "\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\266\377\377\377\377\377\377\377\206"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\364\377\377\377\254\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377"
+ "\377\377\266\377\377\377\377\377\377\377\207\377\377\377K\377\377\377\374"
+ "\377\377\377\327\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377}\377\377\377\377\377\377\377\373\377\377\377\313\377"
+ "\377\377\303\377\377\377\374\377\377\377\377\377\377\377\252\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377"
+ "\377\377\377\377\377\377\351\377\377\377\300\377\377\377\365\377\377\377"
+ "\377\377\377\377\316\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\013\377\377\377\346\377\377\377\377\377\377\377\365\377\377\377\305"
+ "\377\377\377\315\377\377\377\376\377\377\377\366\377\377\377\033\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\377\377\377}\377\377\377\376\377\377\377\377"
+ "\377\377\377\325\377\377\377\321\377\377\377\376\377\377\377\377\377\377"
+ "\377\332\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\070\377"
+ "\377\377\371\377\377\377\377\377\377\377\335\377\377\377\263\377\377\377"
+ "\351\377\377\377\377\377\377\377\304\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377S\377\377\377\330\377\377\377\343\377\377\377\377"
+ "\377\377\377\364\377\377\377\327\377\377\377\333\377\377\377\322\377\377"
+ "\377\033\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\070\377\377\377"
+ "\372\377\377\377\376\377\377\377\275\377\377\377\307\377\377\377\376\377"
+ "\377\377\377\377\377\377\324\377\377\377y\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\377\377\377\377\370"
+ "\377\377\377\306\377\377\377\356\377\377\377\377\377\377\377\322\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\336"
+ "\377\377\377\333\377\377\377\327\377\377\377\377\377\377\377\366\377\377"
+ "\377)\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\224\377\377\377\336\377\377\377\333\377\377\377\327\377\377\377\377\377"
+ "\377\377\366\377\377\377)\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377K\377\377\377\375\377\377\377\252\000\000\000\000\377\377\377"
+ "`\377\377\377\373\377\377\377\377\377\377\377\242\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\361\377"
+ "\377\377\333\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\377\377\377\013\377\377\377\355\377\377\377\377\377\377\377\346\377\377"
+ "\377\362\377\377\377\377\377\377\377\362\377\377\377\347\377\377\377\377"
+ "\377\377\377\215\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224"
+ "\377\377\377\377\377\377\377\377\377\377\377\370\377\377\377\306\377\377"
+ "\377\356\377\377\377\377\377\377\377\322\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377u\377\377\377\376\377\377\377\377\377\377\377"
+ "\321\377\377\377\307\377\377\377\375\377\377\377\377\377\377\377\243\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377"
+ "\377\377\377\377\377\377\377\377\352\377\377\377\300\377\377\377\365\377"
+ "\377\377\377\377\377\377\316\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377}\377\377\377\376\377\377\377\377\377\377\377\325\377\377"
+ "\377\321\377\377\377\376\377\377\377\377\377\377\377\332\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\376"
+ "\377\377\377\366\377\377\377\377\377\377\377\335\377\377\377\322\377\377"
+ "\377\343\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "u\377\377\377\377\377\377\377\370\377\377\377\277\377\377\377\262\377\377"
+ "\377\346\377\377\377\377\377\377\377\231\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\377\377\377\013\377\377\377\315\377\377\377\330\377\377\377\370\377"
+ "\377\377\377\377\377\377\335\377\377\377\327\377\377\377\333\377\377\377"
+ "\322\377\377\377\033\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313"
+ "\377\377\377\376\377\377\377l\000\000\000\000\000\000\000\000\377\377\377K\377\377\377\374"
+ "\377\377\377\333\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377\341\377\377\377\376\377\377\377v\000\000\000\000\000\000\000\000\377\377\377!\377\377"
+ "\377\371\377\377\377\366\377\377\377)\377\377\377\377\377\377\377\377\377"
+ "\377\377\313\377\377\377\377\377\377\377\205\377\377\377\013\377\377\377\364"
+ "\377\377\377\376\377\377\377Q\377\377\377!\377\377\377\371\377\377\377\352"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377I\377\377\377\372\377"
+ "\377\377\376\377\377\377v\377\377\377\033\377\377\377\362\377\377\377\376"
+ "\377\377\377}\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\335\377\377\377\376\377\377\377v\000\000\000\000\000\000\000\000\377\377\377\033\377\377"
+ "\377\364\377\377\377\372\377\377\377\062\377\377\377\377\377\377\377\377\000"
+ "\000\000\000\377\377\377\065\377\377\377\323\377\377\377\333\377\377\377\333\377"
+ "\377\377\327\377\377\377\377\377\377\377\377\377\377\377\326\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\320\377\377\377\355\377\377\377\013\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\313\377\377"
+ "\377\371\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\371\377"
+ "\377\377\033\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000"
+ "\000\000\000\000\000\377\377\377}\377\377\377\313\377\377\377\257\377\377\377\013\000"
+ "\000\000\000\377\377\377\223\377\377\377\252\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\000\377\377\377\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\316\377\377\377\352\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377z\377"
+ "\377\377\325\377\377\377\033\377\377\377\013\377\377\377\314\377\377\377\267"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377"
+ "\377!\377\377\377\373\377\377\377\211\377\377\377!\377\377\377\374\377\377"
+ "\377\200\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\377\377\377\205\377\377\377\370\377\377\377\377\377\377\377\377\377\377"
+ "\377\345\377\377\377\200\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\377\377\377\013\377\377\377\333\377\377\377\377\377\377\377\377\377\377\377"
+ "\321\000\000\000\000\377\377\377r\377\377\377z\377\377\377%\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\377\377\377\025\377\377\377\337\377\377\377\377\377"
+ "\377\377\375\377\377\377\070\000\000\000\000\377\377\377U\377\377\377\365\377\377"
+ "\377\256\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\255\377\377\377\275\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\314\377\377"
+ "\377\376\377\377\377b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\033\377\377\377\371"
+ "\377\377\377\333\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377~\377\377\377\347\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\361\377\377\377\227\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\312\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\322\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\312\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\322\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\261\377\377\377\377\377\377\377\215\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\377\377\377\025\377\377\377\361\377\377\377\363\377\377"
+ "\377E\377\377\377\375\377\377\377\377\377\377\377V\377\377\377\324\377\377"
+ "\377\366\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\224\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377j\377\377\377\375\377\377\377\361\377\377\377%\000\000\000"
+ "\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\313"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\215\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377b\377\377\377"
+ "\374\377\377\377\375\377\377\377Q\377\377\377K\377\377\377\374\377\377\377"
+ "\332\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "K\377\377\377\375\377\377\377\377\377\377\377\374\377\377\377\376\377\377"
+ "\377\377\377\377\377\375\377\377\377s\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\312\377\377\377\377\377\377\377\360\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\213\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377}\377\377\377\377\377\377\377\315\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\215\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\333\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\321\377\377"
+ "\377\377\377\377\377\315\377\377\377q\377\377\377\221\377\377\377\363\377"
+ "\377\377\377\377\377\377\364\377\377\377)\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377G\377\377\377\330\377\377\377\343\377"
+ "\377\377c\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377G\377\377\377\330\377\377\377\343\377\377\377"
+ "c\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377V\377\377\377\375\377\377\377\376\377\377\377\214\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "U\377\377\377\374\377\377\377\377\377\377\377m\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\330\377\377\377"
+ "\377\377\377\377\271\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\377\377\377U\377\377\377\375\377\377\377\252\000\000\000\000\377\377\377\233"
+ "\377\377\377\366\377\377\377\377\377\377\377\377\377\377\377\376\377\377"
+ "\377i\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\334\377"
+ "\377\377\376\377\377\377U\377\377\377!\377\377\377\371\377\377\377\363\377"
+ "\377\377%\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\371\377\377\377)\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\377\377\377\013\377\377\377\355\377\377\377\366\377\377\377%\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\313\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\313\377\377\377\376\377\377\377i\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377K\377\377\377\374\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377)\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377\377\377\355\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\376\377\377\377l\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377K\377"
+ "\377\377\374\377\377\377\333\000\000\000\000\000\000\000\000\377\377\377\247\377\377\377"
+ "\327\377\377\377\322\377\377\377\300\377\377\377\013\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377\312\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\364"
+ "\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\013\377\377\377\355\377\377\377\366\377\377\377%\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\252\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\332\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377"
+ "\377\377\355\377\377\377\366\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377\377"
+ "\377\363\377\377\377\301\377\377\377\373\377\377\377\356\377\377\377\333"
+ "\377\377\377\352\377\377\377\333\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\313\377\377\377\376\377\377\377w\377\377\377\371\377"
+ "\377\377\366\377\377\377!\377\377\377\360\377\377\377\333\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\377\377\377K\377\377\377\374\377\377\377\327\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\312\377\377\377\377\377\377\377"
+ "\251\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377"
+ "\377\377\377\377\326\377\377\377\247\377\377\377\262\377\377\377\351\377"
+ "\377\377\377\377\377\377\355\377\377\377\033\377\377\377\377\377\377\377\377"
+ "\377\377\377K\377\377\377\374\377\377\377\343\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\313\377\377\377\376\377\377\377i\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\356\377\377"
+ "\377\340\377\377\377\343\377\377\377\376\377\377\377\377\377\377\377\304"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377}\377"
+ "\377\377\365\377\377\377\377\377\377\377\377\377\377\377\364\377\377\377"
+ "\247\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\013\377\377\377\355\377\377\377\366\377\377\377%\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313"
+ "\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377"
+ "\355\377\377\377\366\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\377\377\377\321\377\377\377\376\377\377\377i\377\377\377\033\377"
+ "\377\377\365\377\377\377\355\377\377\377\013\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\377\377\377\070\377\377\377\372\377\377\377\327\377\377\377c\377"
+ "\377\377\377\377\377\377\377\377\377\377\271\377\377\377\205\377\377\377"
+ "\376\377\377\377i\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377l\377\377\377\377\377\377\377\377\377\377\377\226\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\344\377\377\377\376\377\377\377\372\377\377\377\367\377\377\377"
+ ")\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377!\377\377\377\371\377\377\377\376\377\377\377i\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\224\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377V\377\377"
+ "\377\375\377\377\377\326\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377"
+ "\364\377\377\377\254\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\033\377\377\377\364\377\377\377\363\377\377\377%"
+ "\000\000\000\000\377\377\377\335\377\377\377\375\377\377\377M\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\177\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\205\377\377\377\376\377\377\377\333\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377"
+ "\377\377\257\000\000\000\000\000\000\000\000\377\377\377;\377\377\377\373\377\377\377\372"
+ "\377\377\377\070\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\247\377"
+ "\377\377\377\377\377\377\345\377\377\377\033\000\000\000\000\000\000\000\000\377\377\377O"
+ "\377\377\377X\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\013\377"
+ "\377\377\351\377\377\377\377\377\377\377\252\000\000\000\000\000\000\000\000\377\377\377"
+ "b\377\377\377\375\377\377\377\332\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\306\377\377\377\377\377\377\377\252\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\344\377\377\377\372\377\377\377)\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377%\377\377\377\374\377\377"
+ "\377\326\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\232\377\377\377\377\377\377\377\264\000\000\000\000\000\000\000\000"
+ "\377\377\377\335\377\377\377\376\377\377\377Q\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\325\377"
+ "\377\377\013\000\000\000\000\377\377\377;\377\377\377\373\377\377\377\363\377\377"
+ "\377%\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\354\377\377\377\366\377\377\377%\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\354\377\377\377\366\377\377\377%\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377K\377\377\377\375\377\377\377\237\377\377"
+ "\377j\377\377\377\374\377\377\377\376\377\377\377\214\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377"
+ "\377\361\377\377\377\333\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\377\377\377\013\377\377\377\361\377\377\377\352\000\000\000\000\377"
+ "\377\377\306\377\377\377\375\377\377\377=\377\377\377\211\377\377\377\377"
+ "\377\377\377\252\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224"
+ "\377\377\377\377\377\377\377\325\377\377\377\013\000\000\000\000\377\377\377;\377"
+ "\377\377\373\377\377\377\363\377\377\377%\377\377\377\377\377\377\377\377"
+ "\377\377\377\013\377\377\377\351\377\377\377\377\377\377\377\243\000\000\000\000\000"
+ "\000\000\000\377\377\377r\377\377\377\375\377\377\377\363\377\377\377%\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377"
+ "\377\257\000\000\000\000\000\000\000\000\377\377\377;\377\377\377\373\377\377\377\372\377"
+ "\377\377\070\377\377\377\377\377\377\377\377\377\377\377\013\377\377\377\351"
+ "\377\377\377\377\377\377\377\252\000\000\000\000\000\000\000\000\377\377\377b\377\377\377"
+ "\375\377\377\377\332\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\377\377\377\312\377\377\377\377\377\377\377\372\377\377\377f\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377\224\377\377\377\377\377\377\377\333\377\377\377\013\000\000\000\000\000\000\000\000\377"
+ "\377\377S\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\306\377\377\377\376\377\377\377U\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377"
+ "\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\377\377\377K\377\377\377\374\377"
+ "\377\377\333\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\204\377\377\377\377\377\377\377\322\000\000\000\000\000\000\000\000\377\377\377\241\377"
+ "\377\377\377\377\377\377\264\000\000\000\000\377\377\377\377\377\377\377\377\377"
+ "\377\377\224\377\377\377\377\377\377\377\266\377\377\377;\377\377\377\374"
+ "\377\377\377\377\377\377\377\226\377\377\377l\377\377\377\377\377\377\377"
+ "\300\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377u\377\377"
+ "\377\376\377\377\377\361\377\377\377\325\377\377\377\377\377\377\377\252"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377s\377"
+ "\377\377\377\377\377\377\333\000\000\000\000\000\000\000\000\377\377\377\215\377\377\377"
+ "\377\377\377\377\277\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\314\377\377\377\377\377\377\377"
+ "\333\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377"
+ "\377\377E\377\377\377\217\377\377\377\373\377\377\377\343\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\313\377\377\377\371\377\377\377%\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\313\377\377\377\376\377\377\377\247\377\377\377I\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\214\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\364\377\377\377\245\377\377"
+ "\377\372\377\377\377\355\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\000\377\377\377\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\324\377\377\377\343\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377\205\377\377\377\271\377\377\377\376\377\377\377\303\377"
+ "\377\377\262\377\377\377\377\377\377\377\315\377\377\377l\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\220"
+ "\377\377\377\341\377\377\377\377\377\377\377\377\377\377\377\233\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377"
+ "\257\377\377\377)\377\377\377\313\377\377\377\377\377\377\377\377\377\377"
+ "\377\375\377\377\377\\\377\377\377\377\377\377\377\377\377\377\377\013\377"
+ "\377\377\342\377\377\377\377\377\377\377\373\377\377\377\377\377\377\377"
+ "\265\000\000\000\000\377\377\377\266\377\377\377\377\377\377\377\215\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\313\377\377\377\371\377\377\377%\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\013\377\377\377\360\377\377\377\333\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\261\377\377\377\377\377\377\377\377\377\377\377\332\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377`\377\377\377\262"
+ "\377\377\377\251\377\377\377\354\377\377\377\373\377\377\377\261\377\377"
+ "\377\262\377\377\377\224\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377v\377\377\377\263\377"
+ "\377\377\255\377\377\377\255\377\377\377\255\377\377\377\255\377\377\377"
+ "\263\377\377\377\224\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377"
+ "\377\356\377\377\377\366\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\377\377\377\013\377\377\377\356\377\377\377\363\371\371"
+ "\377.\377\377\377\362\377\377\377\375\377\377\377B\377\377\377\335\377\377"
+ "\377\366\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\224\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377U\377\377\377\373\377\377\377\376\377\377\377s\000\000\000\000\000\000\000"
+ "\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\205"
+ "\377\377\377\271\377\377\377\332\377\377\377\377\377\377\377\373\377\377"
+ "\377r\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\033\377\377\377"
+ "\362\377\377\377\377\377\377\377\242\377\377\377E\377\377\377x\377\377\377"
+ "\374\377\377\377\336\377\377\377K\377\377\377\013\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\377\377\377\216\377\377\377]\000\000\000\000\000\000\000\000\377"
+ "\377\377\251\377\377\377\377\377\377\377\333\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\312\377\377\377\377\377\377\377\356\377"
+ "\377\377v\000\000\000\000\377\377\377\220\377\377\377\374\377\377\377\363\377\377"
+ "\377\033\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\324\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377j\377\377\377\374\377\377\377"
+ "\367\377\377\377\260\377\377\377\342\377\377\377\377\377\377\377\376\377"
+ "\377\377\224\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\065\377\377\377\347\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\343\377\377\377\374\377\377\377\360\377\377\377%\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\377\377\377\025\377\377\377\337\377\377\377\377"
+ "\377\377\377\361\377\377\377\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377b\377\377\377\232\377\377\377"
+ "\232\377\377\377\232\377\377\377\232\377\377\377\232\377\377\377\232\377"
+ "\377\377}\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377_\377\377\377\345\377\377\377\377\377\377\377\361\377"
+ "\377\377\070\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\377\377\377V\377\377\377\376\377\377\377\344\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\377\377\377\377\377\377\377\377\377\377\377K\377\377\377\374\377\377"
+ "\377\245\377\377\377l\377\377\377\377\377\377\377\344\377\377\377v\377\377"
+ "\377;\377\377\377\375\377\377\377l\377\377\377\377\377\377\377\377\000\000\000"
+ "\000\377\377\377;\377\377\377\373\377\377\377\376\377\377\377\301\377\377\377"
+ "\271\377\377\377\374\377\377\377\376\377\377\377v\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\304"
+ "\377\377\377e\377\377\377x\377\377\377\300\377\377\377\376\377\377\377\367"
+ "\377\377\377)\377\377\377\377\377\377\377\377\377\377\377\013\377\377\377"
+ "\361\377\377\377\367\377\377\377)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377\377"
+ "\377\376\377\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\307\377\377\377"
+ "\376\377\377\377i\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377K\377"
+ "\377\377\374\377\377\377\343\377\377\377|\377\377\377\202\377\377\377\211"
+ "\377\377\377\202\377\377\377\013\000\000\000\000\377\377\377\377\377\377\377\377\000"
+ "\000\000\000\377\377\377\013\377\377\377\355\377\377\377\373\377\377\377\300\377"
+ "\377\377\276\377\377\377\276\377\377\377\302\377\377\377G\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\377\377\377U\377\377\377\374\377\377\377\352\377"
+ "\377\377\013\000\000\000\000\377\377\377\307\377\377\377\374\377\377\377\377\377\377"
+ "\377\372\377\377\377)\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\313\377\377\377\376\377\377\377\240\377\377\377\200\377\377\377\210\377"
+ "\377\377\202\377\377\377\371\377\377\377\366\377\377\377%\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355\377"
+ "\377\377\366\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\224"
+ "\377\377\377\377\377\377\377\252\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\377\377\377\377\311"
+ "\377\377\377\343\377\377\377\377\377\377\377\225\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377"
+ "\366\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\377\377\377\313\377\377\377\366\377\377\377]\377"
+ "\377\377\375\377\377\377\377\377\377\377\211\377\377\377\354\377\377\377"
+ "\333\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377"
+ "\377\377\376\377\377\377V\377\377\377\252\377\377\377\377\377\377\377\244"
+ "\377\377\377\354\377\377\377\334\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\377\377\377U\377\377\377\374\377\377\377\326\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\307\377\377\377\376\377\377\377\177\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\374\377\377\377\324\377\377\377"
+ ")\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377U\377\377\377\374\377"
+ "\377\377\327\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\307\377\377\377"
+ "\376\377\377\377l\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224"
+ "\377\377\377\377\377\377\377\365\377\377\377\357\377\377\377\377\377\377"
+ "\377\377\377\377\377\224\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\210\377\377\377\335\377\377"
+ "\377\377\377\377\377\377\377\377\377\315\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377"
+ "\366\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\313\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\377"
+ "\377\377\013\377\377\377\355\377\377\377\366\377\377\377)\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\215\377\377\377\377\377\377"
+ "\377\254\377\377\377c\377\377\377\377\377\377\377\273\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\377\377\377\013\377\377\377\361\377\377\377\340"
+ "\377\377\377\277\377\377\377\367\377\377\377\351\377\377\377\352\377\377"
+ "\377\300\377\377\377\375\377\377\377I\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\307\377\377\377\377\377\377\377\377\377"
+ "\377\377\335\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377}\377\377\377\376\377\377\377\377\377\377"
+ "\377\252\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\325\377\377\377\377\377\377\377\264\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\224\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\342\377\377\377\375\377\377\377\070\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\013\377\377\377\364\377\377\377\254\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\377\377\377I\377\377\377\340\377\377\377\240"
+ "\000\000\000\000\000\000\000\000\377\377\377}\377\377\377\341\377\377\377Z\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377Q\377\377\377"
+ "\306\377\377\377\366\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\332\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\224\377\377\377\376\377\377\377b\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\320"
+ "\377\377\377\376\377\377\377l\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\317\377\377\377\376\377\377\377l\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\013\377\377\377"
+ "\356\377\377\377\372\377\377\377)\000\000\000\000\000\000\000\000\377\377\377K\377\377\377"
+ "\374\377\377\377\333\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377"
+ "\013\377\377\377\351\377\377\377\377\377\377\377\361\377\377\377\354\377\377"
+ "\377\354\377\377\377\354\377\377\377\376\377\377\377\376\377\377\377l\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377K\377\377"
+ "\377\374\377\377\377\333\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\377\377\377\215\377\377\377\377\377\377\377\311"
+ "\000\000\000\000\000\000\000\000\377\377\377\335\377\377\377\376\377\377\377i\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\376\377"
+ "\377\377_\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377\366"
+ "\377\377\377)\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\013\377\377\377\355\377\377\377\366\377\377\377%\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\013\377\377\377\355\377\377\377\366\377\377\377%\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377K\377\377\377\374"
+ "\377\377\377\333\377\377\377\374\377\377\377\377\377\377\377\311\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\013\377\377\377\361\377\377\377\333\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\377\377\377\377\377\377\377\377\377\377\377\013\377\377\377\361\377"
+ "\377\377\333\000\000\000\000\377\377\377\313\377\377\377\371\377\377\377%\377\377"
+ "\377\224\377\377\377\377\377\377\377\252\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\224\377\377\377\376\377\377\377_\000\000\000\000\000\000\000\000\377"
+ "\377\377\013\377\377\377\355\377\377\377\366\377\377\377)\377\377\377\377"
+ "\377\377\377\377\377\377\377\013\377\377\377\356\377\377\377\372\377\377\377"
+ ")\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\345\377\377\377\376\377\377\377i\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\376\377"
+ "\377\377b\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\321\377\377\377\376\377\377"
+ "\377l\377\377\377\377\377\377\377\377\377\377\377\013\377\377\377\356\377"
+ "\377\377\372\377\377\377)\000\000\000\000\000\000\000\000\377\377\377K\377\377\377\374\377"
+ "\377\377\333\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377"
+ "\377\377\313\377\377\377\377\377\377\377\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377\377"
+ "\377\333\377\377\377\377\377\377\377\377\377\377\377\354\377\377\377\300"
+ "\377\377\377\\\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\377\377\377\313\377\377\377\376\377\377\377i\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313"
+ "\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\377\377\377K\377\377\377\374"
+ "\377\377\377\333\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377\013\377\377\377\355\377\377\377\375\377\377\377M\377\377\377\013\377\377"
+ "\377\355\377\377\377\375\377\377\377=\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\377\377\377U\377\377\377\374\377\377\377\333\377\377\377\217\377\377"
+ "\377\373\377\377\377\361\377\377\377\312\377\377\377\241\377\377\377\377"
+ "\377\377\377\215\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\253\377\377\377\377\377\377\377\377\377\377\377\315\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377"
+ "\377\335\377\377\377\376\377\377\377i\000\000\000\000\377\377\377\342\377\377\377"
+ "\375\377\377\377Q\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\315\377\377\377\377\377\377\377\342\377\377"
+ "\377\013\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "V\377\377\377\375\377\377\377\377\377\377\377\377\377\377\377\252\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\371\377\377\377%\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377c\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377l\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377"
+ "\377\377\360\377\377\377\033\377\377\377\205\377\377\377\365\377\377\377\377"
+ "\377\377\377\364\377\377\377\\\000\000\000\000\377\377\377\377\377\377\377\377\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\000\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\377\377\377|\377\377\377\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377\307\377\377\377\377\377\377\377\377\377\377\377\370\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\244\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\205\377\377\377\376\377\377\377\336\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\302\377\377\377\377\377"
+ "\377\377\242\377\377\377\374\377\377\377\264\377\377\377\033\377\377\377\371"
+ "\377\377\377\316\377\377\377\377\377\377\377\377\377\377\377b\377\377\377"
+ "\376\377\377\377\326\377\377\377\025\377\377\377\362\377\377\377\377\377\377"
+ "\377\304\377\377\377\372\377\377\377\360\377\377\377\033\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\317\377\377\377\376\377\377\377_\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\013\377\377\377\361\377\377\377\334\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377`\377\377\377\374"
+ "\377\377\377\343\377\377\377\313\377\377\377\377\377\377\377\215\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\306\377\377\377\371\377\377\377\033\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377s\377\377\377\377\377\377\377\304"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\377\377\377\320\377\377\377\375\377\377\377=\000\000\000\000\000\000\000\000\377\377\377"
+ "\025\377\377\377\362\377\377\377\366\377\377\377%\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\224\377\377\377\376"
+ "\377\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377l\377\377\377\373\377\377\377\376\377\377"
+ "\377\214\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\204\377\377\377\377"
+ "\377\377\377\333\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\224"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377m\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\033\377\377\377\366\377\377\377\367\377\377\377)\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377\317\377\377\377\376\377\377"
+ "\377e\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\330\377\377\377\371\377\377\377"
+ ")\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\033"
+ "\377\377\377\365\377\377\377\363\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\377\377\377\013\377\377\377\351\377\377\377\375"
+ "\377\377\377=\000\000\000\000\000\000\000\000\377\377\377}\377\377\377\374\377\377\377\366"
+ "\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377U\377\377\377p\377\377\377M\377\377\377!\377\377\377\373\377\377"
+ "\377\333\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\234\377\377\377\374\377\377\377\377\377\377\377\320"
+ "\377\377\377%\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\320\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\337\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\271\377\377\377"
+ "\377\377\377\377\377\377\377\377\267\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\251"
+ "\377\377\377V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\377\377\377K\377\377\377\374\377\377\377\245\377\377\377|\377\377\377"
+ "\377\377\377\377y\000\000\000\000\377\377\377\247\377\377\377\376\377\377\377l\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\240\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373\377\377\377"
+ "\377\377\377\377\304\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\224\377\377\377\377\377\377\377\244\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\313\377\377\377\376\377\377\377l\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\334\377\377\377\377\377\377\377\205\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\377\377\377\313\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\377\377\377"
+ "\013\377\377\377\355\377\377\377\376\377\377\377i\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377K\377\377\377\374\377\377\377\327\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377\013\377\377\377\355\377\377\377\366\377\377\377\033\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377"
+ "\377\025\377\377\377\362\377\377\377\375\377\377\377=\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\313\377\377\377\371\377\377\377%\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377\313\377\377\377\376\377\377\377b\000\000\000\000\000\000"
+ "\000\000\377\377\377\013\377\377\377\355\377\377\377\366\377\377\377%\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377"
+ "\355\377\377\377\366\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\224\377\377\377\377\377\377\377\257\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\331\000\000\000\000"
+ "\377\377\377j\377\377\377\376\377\377\377\366\377\377\377)\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377"
+ "\366\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\377\377\377\313\377\377\377\371\377\377\377\033\377"
+ "\377\377\351\377\377\377\371\377\377\377!\377\377\377\360\377\377\377\333"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377\377"
+ "\377\376\377\377\377i\377\377\377\033\377\377\377\365\377\377\377\365\377"
+ "\377\377\361\377\377\377\333\000\000\000\000\377\377\377\377\377\377\377\377\377"
+ "\377\377K\377\377\377\374\377\377\377\364\377\377\377%\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\377\377\377\340\377\377\377\376\377\377\377l\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\257\000\000\000\000"
+ "\377\377\377\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\377\377\377I\377\377\377\373\377\377\377\363\377\377\377%\000\000\000\000\000"
+ "\000\000\000\377\377\377\013\377\377\377\345\377\377\377\376\377\377\377i\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377"
+ "\377\243\000\000\000\000\377\377\377\330\377\377\377\377\377\377\377\257\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377l\377\377\377\373\377\377\377\375\377\377\377"
+ "M\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013"
+ "\377\377\377\355\377\377\377\366\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377\377\377\376\377"
+ "\377\377b\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\361\377\377\377\355"
+ "\377\377\377\033\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377"
+ "!\377\377\377\372\377\377\377\337\377\377\377\257\377\377\377\376\377\377"
+ "\377l\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\324\377\377\377\370\377\377\377\360\377\377\377\323\377\377\377\255\377"
+ "\377\377\375\377\377\377\333\377\377\377\371\377\377\377%\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377l\377\377\377\376\377\377\377"
+ "\337\377\377\377\326\377\377\377\377\377\377\377\234\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377"
+ "\377\356\377\377\377\372\377\377\377)\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\232\377\377\377\377\377"
+ "\377\377\346\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\224\377\377\377\376\377"
+ "\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\232\377\377\377\377\377\377"
+ "\377\244\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\364\377\377\377\254\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\215\377\377\377\376\377"
+ "\377\377\376\377\377\377\313\377\377\377\224\377\377\377\202\377\377\377"
+ "\374\377\377\377\332\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\224\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\324\377\377\377\376\377\377\377i\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377\314\377\377\377\376\377\377\377b\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\013\377"
+ "\377\377\355\377\377\377\374\377\377\377)\000\000\000\000\000\000\000\000\377\377\377K\377"
+ "\377\377\374\377\377\377\333\000\000\000\000\377\377\377\377\377\377\377\377\377"
+ "\377\377\013\377\377\377\352\377\377\377\377\377\377\377\321\377\377\377\321"
+ "\377\377\377\316\377\377\377\322\377\377\377\316\377\377\377\315\377\377"
+ "\377G\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "K\377\377\377\374\377\377\377\333\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377\377\377\361\377\377\377"
+ "\377\377\377\377\362\377\377\377\366\377\377\377\377\377\377\377\326\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377"
+ "\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355"
+ "\377\377\377\366\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377\366\377\377"
+ "\377%\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377\366\377\377\377%"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377K\377"
+ "\377\377\374\377\377\377\377\377\377\377\370\377\377\377\366\377\377\377"
+ "\376\377\377\377\214\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\361\377\377\377\333\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\013"
+ "\377\377\377\361\377\377\377\333\000\000\000\000\377\377\377\313\377\377\377\371"
+ "\377\377\377%\377\377\377\223\377\377\377\377\377\377\377\252\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\376\377\377\377"
+ "i\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377\366\377\377"
+ "\377%\377\377\377\377\377\377\377\377\377\377\377\013\377\377\377\355\377"
+ "\377\377\374\377\377\377)\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\317\377\377"
+ "\377\376\377\377\377l\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\224\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\324"
+ "\377\377\377\376\377\377\377i\377\377\377\377\377\377\377\377\377\377\377"
+ "\013\377\377\377\355\377\377\377\374\377\377\377)\000\000\000\000\000\000\000\000\377\377"
+ "\377K\377\377\377\374\377\377\377\333\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\376\377\377\377i\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377u\377\377\377\302\377\377\377\357\377\377\377"
+ "\377\377\377\377\377\377\377\377\276\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\376\377\377\377"
+ "i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\377\377\377\313\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\377\377\377"
+ ";\377\377\377\374\377\377\377\333\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\377\377\377\240\377\377\377\377\377\377\377\266\377\377"
+ "\377s\377\377\377\377\377\377\377\315\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\377\377\377\025\377\377\377\361\377\377\377\361\377\377\377\320"
+ "\377\377\377\344\377\377\377\303\377\377\377\356\377\377\377\316\377\377"
+ "\377\375\377\377\377M\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\275\377\377\377\377\377\377\377\377\377\377\377\314\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377"
+ "\377\377v\377\377\377\377\377\377\377\321\377\377\377M\377\377\377\375\377"
+ "\377\377\327\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\307\377\377\377\377\377\377\377\346\377\377\377"
+ "\033\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000"
+ "\000\377\377\377b\377\377\377\237\377\377\377\374\377\377\377\336\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\377\377\377\313\377\377\377\371\377\377\377%\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\377\377\377\313\377\377\377\376\377\377\377\263\377\377\377f\377\377\377"
+ "\013\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\371\371\377."
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377B\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\000\377\377\377\000"
+ "\377\377\377\000\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\025\377\377\377\304\377\377"
+ "\377\322\377\377\377S\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377"
+ "\214\377\377\377\374\377\377\377\033\377\377\377\222\377\377\377\374\377\377"
+ "\377%\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\247\377\377\377\377\377\377\377\302\377\377\377\\\377\377\377\062\377\377"
+ "\377\264\377\377\377\377\377\377\377\326\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377\315\377\377\377\377\377\377\377\257\377\377"
+ "\377;\377\377\377\375\377\377\377b\377\377\377\013\377\377\377\360\377\377"
+ "\377\337\377\377\377\377\377\377\377\377\377\377\377\204\377\377\377\377"
+ "\377\377\377\322\000\000\000\000\377\377\377\033\377\377\377\356\377\377\377\377\377"
+ "\377\377\377\377\377\377\217\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\247\377\377\377\377\377\377\377\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "V\377\377\377\374\377\377\377\326\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\317\377\377\377\374\377\377"
+ "\377\070\377\377\377\013\377\377\377\351\377\377\377\366\377\377\377\033\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\324\377\377\377\374\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\065\377\377\377"
+ "\347\377\377\377\367\377\377\377\232\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377_\377\377\377\355\377\377\377\367\377\377\377}\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\377\377\377\313\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\261\377\377"
+ "\377\377\377\377\377\257\000\000\000\000\000\000\000\000\377\377\377\204\377\377\377\377"
+ "\377\377\377\322\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\213\377\377\377\376\377\377\377U\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377"
+ "\224\377\377\377\375\377\377\377\373\377\377\377s\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\214\377\377"
+ "\377}\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377j\377\377\377\376\377\377\377\333"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377~\377\377\377"
+ "\202\377\377\377\202\377\377\377\201\377\377\377\231\377\377\377\377\377"
+ "\377\377\343\377\377\377z\377\377\377\033\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\205\377\377\377j\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "}\377\377\377\376\377\377\377\343\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\255\377\377\377\377\377\377\377\264\000\000\000\000\000\000\000\000"
+ "\377\377\377\025\377\377\377\356\377\377\377\372\377\377\377)\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377K\377\377\377\374"
+ "\377\377\377\327\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\377\377\377\013\377\377\377\356\377\377\377\375\377\377\377)\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\355\377\377\377\367\377\377\377)\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\065\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\377\377\377\313\377\377\377\377\377\377\377\257\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377_\377\377\377\355"
+ "\377\377\377\367\377\377\377}\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\065\377\377\377\347\377\377"
+ "\377\367\377\377\377\232\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\062\377\377\377\327\377"
+ "\377\377\377\377\377\377\375\377\377\377z\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\065\377"
+ "\377\377\362\377\377\377\377\377\377\377\346\377\377\377V\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377S\377\377\377\320\377\377\377\305\377\377\377%\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377K\377\377\377\374\377"
+ "\377\377\252\377\377\377K\377\377\377\374\377\377\377\376\377\377\377\363"
+ "\377\377\377\377\377\377\377\377\377\377\377l\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\335\377\377\377\376\377\377\377l\000\000\000\000\000\000\000\000"
+ "\377\377\377;\377\377\377\373\377\377\377\363\377\377\377%\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\243"
+ "\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\343\377\377\377\376\377\377\377"
+ "l\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\232\377\377\377\377"
+ "\377\377\377\356\377\377\377)\000\000\000\000\000\000\000\000\377\377\377\065\377\377\377"
+ "\260\377\377\377\013\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313"
+ "\377\377\377\376\377\377\377U\000\000\000\000\000\000\000\000\377\377\377\276\377\377\377"
+ "\377\377\377\377\346\377\377\377\013\377\377\377\377\377\377\377\377\000\000\000"
+ "\000\377\377\377K\377\377\377\374\377\377\377\326\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\013\377\377\377\355\377\377\377\366\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\312"
+ "\377\377\377\377\377\377\377\321\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\313"
+ "\377\377\377\371\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\313\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\377\377\377\013"
+ "\377\377\377\355\377\377\377\366\377\377\377%\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\355\377\377\377\366\377"
+ "\377\377\033\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000"
+ "\000\377\377\377j\377\377\377\330\377\377\377%\000\000\000\000\000\000\000\000\377\377\377"
+ "\312\377\377\377\377\377\377\377\206\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\244\000\000\000\000\000\000"
+ "\000\000\377\377\377\313\377\377\377\377\377\377\377\277\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377\366"
+ "\377\377\377\033\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\313\377\377\377\371\377\377\377%\377\377"
+ "\377]\377\377\377f\377\377\377\013\377\377\377\361\377\377\377\333\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377\377\377\376"
+ "\377\377\377i\000\000\000\000\377\377\377\232\377\377\377\377\377\377\377\377\377"
+ "\377\377\327\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\334\377\377\377\377\377\377\377\252\000\000\000\000\000\000\000\000\377\377\377}\377\377"
+ "\377\376\377\377\377\363\377\377\377%\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377\224\377\377\377\377\377\377\377\252\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\332\377\377\377\377\377\377\377\251\000\000\000\000\000\000\000\000\377\377\377"
+ "\214\377\377\377\377\377\377\377\355\377\377\377\013\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\252\000\000\000\000"
+ "\377\377\377K\377\377\377\374\377\377\377\375\377\377\377Q\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377\205\377\377\377\304\377\377"
+ "\377\013\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\362\377\377\377\375\377"
+ "\377\377Q\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\013\377\377\377\355\377\377\377\366\377\377\377%\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\312\377\377\377"
+ "\377\377\377\377\264\000\000\000\000\000\000\000\000\377\377\377}\377\377\377\376\377\377"
+ "\377\332\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\330\377\377\377\376\377\377\377\372\377\377\377\360\377\377"
+ "\377\033\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\305\377\377\377\377\377\377\377\377\377\377\377\237\377\377\377l\377\377"
+ "\377\376\377\377\377\377\377\377\377\336\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377\013\377\377\377\351\377\377\377\376\377\377\377"
+ "l\377\377\377K\377\377\377\374\377\377\377\372\377\377\377\062\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377"
+ "\377\355\377\377\377\366\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\377\377\377;\377\377\377\373\377\377\377\372"
+ "\377\377\377=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\224\377\377\377\376\377"
+ "\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377!\377\377\377\372\377\377\377"
+ "\347\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\364\377\377\377\254\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377\377\377\376\377\377"
+ "\377b\000\000\000\000\000\000\000\000\377\377\377b\377\377\377\375\377\377\377\332\000\000\000"
+ "\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377"
+ "\377\377\377~\000\000\000\000\000\000\000\000\377\377\377U\377\377\377\374\377\377\377\366"
+ "\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\266\377"
+ "\377\377\377\377\377\377\326\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377"
+ "\377e\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\013\377\377\377"
+ "\355\377\377\377\376\377\377\377v\000\000\000\000\000\000\000\000\377\377\377s\377\377\377"
+ "\376\377\377\377\332\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\317\377\377\377\377\377\377\377\251\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377K\377\377\377\374\377\377\377\333\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377j\377\377\377"
+ "\375\377\377\377\326\377\377\377\302\377\377\377\304\377\377\377\206\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\224\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\377\377\377\013\377\377"
+ "\377\355\377\377\377\366\377\377\377%\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377\366"
+ "\377\377\377%\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377\366\377\377"
+ "\377%\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "K\377\377\377\374\377\377\377\361\377\377\377=\377\377\377V\377\377\377\374"
+ "\377\377\377\375\377\377\377M\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\361\377\377\377\355\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\013"
+ "\377\377\377\361\377\377\377\333\000\000\000\000\377\377\377\313\377\377\377\371"
+ "\377\377\377%\377\377\377\223\377\377\377\377\377\377\377\252\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\376\377\377\377"
+ "i\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377\366\377\377"
+ "\377%\377\377\377\377\377\377\377\377\377\377\377\013\377\377\377\355\377"
+ "\377\377\376\377\377\377\215\000\000\000\000\000\000\000\000\377\377\377V\377\377\377\374"
+ "\377\377\377\367\377\377\377)\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\224\377\377\377\377\377\377\377~\000\000\000\000\000\000\000\000\377\377\377K\377"
+ "\377\377\374\377\377\377\366\377\377\377)\377\377\377\377\377\377\377\377"
+ "\377\377\377\013\377\377\377\355\377\377\377\376\377\377\377v\000\000\000\000\000\000"
+ "\000\000\377\377\377s\377\377\377\375\377\377\377\332\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\376\377\377"
+ "\377i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\062\377\377\377n\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377`\377\377\377\373\377\377\377\366\377\377\377)\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\317\377\377\377\376\377\377"
+ "\377v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377\314\377\377\377\376\377\377\377b\000\000\000\000\000\000\000\000\377\377"
+ "\377\254\377\377\377\377\377\377\377\332\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\377\377\377\033\377\377\377\366\377\377\377\361\377"
+ "\377\377\331\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\377\377\377\320\377\377\377\377\377\377\377\377"
+ "\377\377\377\273\377\377\377\205\377\377\377\377\377\377\377\376\377\377"
+ "\377\355\377\377\377\033\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377"
+ "\377\377\224\377\377\377\377\377\377\377\336\377\377\377\330\377\377\377"
+ "\377\377\377\377\256\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\342\377\377\377\375\377\377\377\326\377"
+ "\377\377\376\377\377\377~\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\377\377\377\275\377\377\377\377\377\377\377\345\377\377"
+ "\377\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\323\377\377\377\360\377\377\377"
+ "\033\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\371\377\377\377%\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\377\377\377\313\377\377\377\371\377\377\377\033\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\001\377\377\377\000\377\377\377\000\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\377\377\377\206\377\377\377\377\377\377\377\377\377\377"
+ "\377\260\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\313\377\377"
+ "\377\360\377\377\377\013\377\377\377\316\377\377\377\352\377\377\377\013\000"
+ "\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\205\377"
+ "\377\377\365\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\356\377\377\377\070\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\377\377\377\224\377\377\377\377\377\377\377\311\000\000\000\000\377\377\377K\377"
+ "\377\377\374\377\377\377\316\377\377\377y\377\377\377\374\377\377\377\273"
+ "\377\377\377\377\377\377\377\377\377\377\377!\377\377\377\371\377\377\377"
+ "\377\377\377\377\315\377\377\377\242\377\377\377\360\377\377\377\377\377"
+ "\377\377\377\377\377\377\370\377\377\377\237\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377`\377\377\377\375\377\377\377\327\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\266\377\377\377\377\377\377\377\217\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\371\371\377.\377\377\377M\000\000\000"
+ "\000\000\000\000\000\371\371\377.\377\377\377M\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377|\377\377\377s\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\377\377\377\232\377\377\377\377\377\377\377\377\377\377\377"
+ "\343\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\232\377"
+ "\377\377\377\377\377\377\377\377\377\377\326\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377!\377\377\377\371"
+ "\377\377\377\352\377\377\377\013\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\377\377\377\070\377\377\377\372\377\377\377\377"
+ "\377\377\377\275\377\377\377\253\377\377\377\374\377\377\377\376\377\377"
+ "\377s\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377r\377\377"
+ "\377\314\377\377\377\304\377\377\377\332\377\377\377\377\377\377\377\321"
+ "\377\377\377\307\377\377\377\271\377\377\377\013\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\263\377\377\377\377\377\377\377\377\377\377\377"
+ "\350\377\377\377\307\377\377\377\322\377\377\377\321\377\377\377\310\377"
+ "\377\377\033\377\377\377\377\377\377\377\377\377\377\377\070\377\377\377\373"
+ "\377\377\377\377\377\377\377\325\377\377\377\242\377\377\377\275\377\377"
+ "\377\371\377\377\377\377\377\377\377\272\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377K\377\377\377"
+ "\374\377\377\377\333\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377"
+ "\377\377\070\377\377\377\373\377\377\377\377\377\377\377\321\377\377\377\250"
+ "\377\377\377\307\377\377\377\375\377\377\377\377\377\377\377\234\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\033\377\377\377\362\377"
+ "\377\377\377\377\377\377\313\377\377\377\214\377\377\377\345\377\377\377"
+ "\377\377\377\377\322\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377}\377\377\377\376\377\377\377\326\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\302"
+ "\377\377\377\377\377\377\377\346\377\377\377\226\377\377\377\201\377\377"
+ "\377\320\377\377\377\377\377\377\377\347\377\377\377\013\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\266\377\377\377\377\377\377\377\307\377"
+ "\377\377\250\377\377\377\335\377\377\377\377\377\377\377\356\377\377\377"
+ "\033\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\232\377\377\377\377\377\377\377\377\377\377\377\326\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\232\377\377\377\377\377\377\377\377\377\377\377\343\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\207\377\377\377\374\377\377\377\266\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377V\377\377\377\375\377\377\377\247\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\306\377\377\377\377\377\377\377\376\377\377\377"
+ "l\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\013"
+ "\377\377\377\355\377\377\377\352\000\000\000\000\377\377\377s\377\377\377\314\377"
+ "\377\377\315\377\377\377v\377\377\377\245\377\377\377%\377\377\377\377\377"
+ "\377\377\377\377\377\377K\377\377\377\373\377\377\377\360\377\377\377\033"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\335\377\377\377\376\377\377\377~\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377"
+ "\377\377\335\377\377\377\275\377\377\377\310\377\377\377\366\377\377\377"
+ "\377\377\377\377\346\377\377\377\033\377\377\377\377\377\377\377\377\000\000\000"
+ "\000\377\377\377\013\377\377\377\342\377\377\377\377\377\377\377\370\377\377"
+ "\377\300\377\377\377\276\377\377\377\371\377\377\377\377\377\377\377\227"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\312\377\377\377\377"
+ "\377\377\377\325\377\377\377\303\377\377\377\361\377\377\377\377\377\377"
+ "\377\375\377\377\377f\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377K\377\377\377\374\377\377\377\362\377\377\377\316\377\377\377\316"
+ "\377\377\377\316\377\377\377\322\377\377\377\273\377\377\377\013\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\377\377\377\013\377\377\377\356\377\377\377\366"
+ "\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\070\377\377\377\371\377\377\377\377\377\377"
+ "\377\352\377\377\377\271\377\377\377\321\377\377\377\375\377\377\377\372"
+ "\377\377\377)\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377"
+ "\377\377\376\377\377\377l\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355"
+ "\377\377\377\366\377\377\377)\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377u\377\377\377\325\377\377\377\316\377\377\377\371\377\377\377\373"
+ "\377\377\377\320\377\377\377\322\377\377\377\207\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\377\377\377\302\377\377\377\377\377\377\377\365"
+ "\377\377\377\266\377\377\377\324\377\377\377\377\377\377\377\375\377\377"
+ "\377=\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377"
+ "\377\377\377\377\377\377\252\000\000\000\000\000\000\000\000\377\377\377\070\377\377\377\372"
+ "\377\377\377\376\377\377\377i\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\013\377\377\377\356\377\377\377\376\377\377\377\320\377\377\377\316"
+ "\377\377\377\316\377\377\377\316\377\377\377\322\377\377\377V\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\377\377\377\313\377\377\377\371\377\377\377"
+ "%\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\361\377\377\377\333\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377\377\377\376"
+ "\377\377\377l\000\000\000\000\377\377\377\013\377\377\377\352\377\377\377\377\377"
+ "\377\377\332\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "j\377\377\377\375\377\377\377\377\377\377\377\321\377\377\377\302\377\377"
+ "\377\375\377\377\377\377\377\377\377\234\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\252\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377j\377\377\377\375\377\377\377\377\377\377\377\320\377"
+ "\377\377\307\377\377\377\375\377\377\377\377\377\377\377\216\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377"
+ "\377\377\252\000\000\000\000\000\000\000\000\377\377\377\266\377\377\377\377\377\377\377"
+ "\336\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\013\377\377\377\351"
+ "\377\377\377\377\377\377\377\370\377\377\377\306\377\377\377\264\377\377"
+ "\377\351\377\377\377\377\377\377\377\343\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\356\377\377\377"
+ "\366\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377b\377\377\377\375\377\377\377\377\377\377\377\325\377"
+ "\377\377\307\377\377\377\374\377\377\377\377\377\377\377\227\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\232\377"
+ "\377\377\377\377\377\377\377\377\377\377\304\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377"
+ "\377\377\375\377\377\377_\377\377\377\033\377\377\377\365\377\377\377\377"
+ "\377\377\377\322\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377\253\377\377\377\377\377\377\377\322\000\000\000\000\000\000\000\000\377\377\377\275"
+ "\377\377\377\377\377\377\377\315\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\356\377\377\377\366\377"
+ "\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\377\377\377\334\377\377\377\377\377\377\377\372\377\377\377\310\377\377"
+ "\377\316\377\377\377\316\377\377\377\321\377\377\377\310\377\377\377%\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\224\377"
+ "\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\317"
+ "\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\364\377\377"
+ "\377\254\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\307\377\377"
+ "\377\377\377\377\377\336\377\377\377\233\377\377\377\305\377\377\377\376"
+ "\377\377\377\377\377\377\377\332\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\224\377\377\377\377\377\377\377\376\377\377\377\307"
+ "\377\377\377\255\377\377\377\370\377\377\377\377\377\377\377\272\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377!\377\377\377\366\377"
+ "\377\377\377\377\377\377\346\377\377\377\271\377\377\377\270\377\377\377"
+ "\365\377\377\377\375\377\377\377M\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\377\377\377\255\377\377\377\377\377\377\377\373\377\377\377\257\377\377"
+ "\377\302\377\377\377\376\377\377\377\377\377\377\377\332\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377`\377\377\377\374\377\377\377"
+ "\377\377\377\377\332\377\377\377\233\377\377\377\260\377\377\377\367\377"
+ "\377\377\316\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377U\377\377\377\374\377\377\377\333\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\215\377\377"
+ "\377\377\377\377\377\342\377\377\377\242\377\377\377\237\377\377\377\246"
+ "\377\377\377\247\377\377\377X\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377\224\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\377\377"
+ "\377\013\377\377\377\356\377\377\377\366\377\377\377)\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\356"
+ "\377\377\377\366\377\377\377)\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355\377\377"
+ "\377\366\377\377\377%\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377K\377\377\377\375\377\377\377\245\000\000\000\000\000\000\000\000\377\377"
+ "\377\233\377\377\377\377\377\377\377\356\377\377\377%\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355\377\377"
+ "\377\376\377\377\377\302\377\377\377\262\377\377\377\322\377\377\377\033\377"
+ "\377\377\377\377\377\377\377\377\377\377\013\377\377\377\361\377\377\377\333"
+ "\000\000\000\000\377\377\377\320\377\377\377\371\377\377\377%\377\377\377\223\377"
+ "\377\377\377\377\377\377\252\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\224\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000\377\377\377\013"
+ "\377\377\377\356\377\377\377\366\377\377\377)\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\214\377\377\377\377\377\377\377\376\377\377\377"
+ "\274\377\377\377\255\377\377\377\370\377\377\377\377\377\377\377\265\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377"
+ "\377\377\377\377\376\377\377\377\307\377\377\377\255\377\377\377\370\377"
+ "\377\377\377\377\377\377\272\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377\255\377\377\377\377\377\377\377\373\377\377\377\257\377"
+ "\377\377\302\377\377\377\376\377\377\377\377\377\377\377\332\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377"
+ "\376\377\377\377l\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\377\377\377\341\377\377\377\377\377\377\377\335"
+ "\377\377\377\233\377\377\377\213\377\377\377\306\377\377\377\377\377\377"
+ "\377\352\377\377\377\013\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\377\377\377\241\377\377\377\377\377\377\377\365\377\377\377\245\377"
+ "\377\377\255\377\377\377\325\377\377\377\062\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\275\377\377\377\377\377\377\377\361\377\377\377\252"
+ "\377\377\377\331\377\377\377\377\377\377\377\377\377\377\377\332\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\266"
+ "\377\377\377\377\377\377\377\377\377\377\377\336\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\240\377\377\377\377"
+ "\377\377\377\377\377\377\377\207\377\377\377K\377\377\377\374\377\377\377"
+ "\377\377\377\377\315\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377U\377\377\377\374\377\377\377\372\377\377\377\070\377\377\377!\377"
+ "\377\377\366\377\377\377\376\377\377\377\177\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377}\377\377\377\377\377\377"
+ "\377\377\377\377\377\352\377\377\377\013\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\267\377\377\377\377\377\377\377\377\377"
+ "\377\377\311\377\377\377\302\377\377\377\304\377\377\377\304\377\377\377"
+ "\271\377\377\377\033\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\377\377\377\013\377\377\377\361\377\377\377\327\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\313\377\377\377\371\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\313\377\377\377\371\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\000\377\377\377\000\377\377\377\000\377\377\377\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377b\377\377\377\374\377\377\377\377\377\377\377\225\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\377\377\377\316\377\377\377\333\000\000\000\000\377"
+ "\377\377\316\377\377\377\334\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377w\377\377\377\343\377\377"
+ "\377\375\377\377\377\201\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\377\377\377\013\377\377\377\244\377\377\377\013\000\000\000\000\000\000\000\000\377"
+ "\377\377\302\377\377\377\377\377\377\377\377\377\377\377\364\377\377\377"
+ "Z\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377~\377\377\377\370\377"
+ "\377\377\377\377\377\377\377\377\377\377\376\377\377\377\275\377\377\377"
+ "\266\377\377\377\376\377\377\377\323\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\335\377\377\377\376\377\377\377~\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377K\377\377\377"
+ "\373\377\377\377\363\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377I\377\377\377"
+ "\357\377\377\377\377\377\377\377\364\377\377\377)\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377}\377\377\377\376\377\377\377\377\377\377\377"
+ "\244\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\377\377\377\232\377\377\377\377\377\377\377\251\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377"
+ "\377\377l\377\377\377\367\377\377\377\377\377\377\377\377\377\377\377\376"
+ "\377\377\377\223\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\377\377\377\232\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\372\377\377\377)\377"
+ "\377\377\377\377\377\377\377\377\377\377\013\377\377\377\355\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\360\377\377\377\033\377\377\377\377\377\377\377\377\000"
+ "\000\000\000\377\377\377j\377\377\377\350\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\376\377\377\377\302\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377;\377"
+ "\377\377\372\377\377\377\316\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377u\377\377\377\351\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\373\377\377\377\254\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377S\377\377\377\354\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\325\377\377\377"
+ "\033\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\214\377\377\377\377\377\377\377\244\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377\377\377\315\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\342\377\377\377\062\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377\177\377\377\377\365\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\342\377\377\377\062\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377}\377\377\377\376\377\377\377\377"
+ "\377\377\377\244\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377I\377\377\377\357\377\377\377\377\377"
+ "\377\377\364\377\377\377)\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377"
+ "\377\377M\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\232\377\377\377\377\377\377\377\375\377\377\377\\\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "\255\377\377\377\377\377\377\377\234\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\224\377\377\377"
+ "\377\377\377\377\276\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\240\377"
+ "\377\377\377\377\377\377\266\377\377\377\377\377\377\377\377\000\000\000\000\377"
+ "\377\377\215\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\370\377\377\377\312\377\377\377%\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\316\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\255\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\305\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\373\377\377\377\330\377"
+ "\377\377V\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377K\377\377\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\372\377\377\377)\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\377\377\377\013\377\377\377\351\377\377\377\366\377"
+ "\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\377\377\377I\377\377\377\345\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\370\377\377\377\241\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\313\377\377\377\375\377"
+ "\377\377\\\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\355\377\377\377\355"
+ "\377\377\377\033\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\336\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\013\377\377\377\316\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\373\377\377\377\213\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\377\377\377"
+ "\377\252\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\247\377\377\377\377\377\377"
+ "\377\326\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\013\377\377\377"
+ "\351\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\376\377\377\377_\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\377\377\377\313\377\377\377\366\377\377\377%\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\344\377\377\377\333\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\307\377\377\377\375\377\377\377Q\000\000\000\000\000\000\000\000"
+ "\377\377\377\204\377\377\377\377\377\377\377\327\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\206\377\377\377\371\377\377"
+ "\377\377\377\377\377\377\377\377\377\376\377\377\377\240\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\215\377\377\377\377"
+ "\377\377\377\244\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\206\377\377\377\370"
+ "\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\241\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\214\377\377"
+ "\377\377\377\377\377\252\000\000\000\000\000\000\000\000\377\377\377\033\377\377\377\356\377"
+ "\377\377\376\377\377\377v\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377\025\377\377\377\316\377\377\377\376\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\335\377\377\377)\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\351\377\377\377"
+ "\364\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\377\377\377\233\377\377\377\375\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\276\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377;\377\377\377\372\377"
+ "\377\377\376\377\377\377|\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377u\377\377\377\375\377\377\377\355\377\377\377"
+ "\033\000\000\000\000\377\377\377\320\377\377\377\377\377\377\377\244\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\377\377\377\033\377\377\377\366\377\377\377\372\377"
+ "\377\377=\000\000\000\000\000\000\000\000\377\377\377\033\377\377\377\362\377\377\377\376"
+ "\377\377\377_\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\013\377\377\377\351\377\377\377\364\377\377\377%\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\013\377\377\377\356\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\376\377\377\377l\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\224\377\377\377\376\377\377"
+ "\377i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377}\377\377\377\377\377\377"
+ "\377\277\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\364\377\377\377\254\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\377\377\377\065\377\377\377\347\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\303\377\377\377\362\377\377"
+ "\377\333\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224"
+ "\377\377\377\377\377\377\377\345\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\307\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\377\377\377I\377\377\377\345\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\373\377\377\377\260\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\310\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\326\377\377\377\367\377\377\377"
+ "\315\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377"
+ "l\377\377\377\356\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\370\377\377\377\231\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377;\377\377\377\373\377\377\377\322\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377"
+ "I\377\377\377\373\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\216\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\377\377\377\224\377\377\377\376\377\377\377i\000\000"
+ "\000\000\000\000\000\000\377\377\377\013\377\377\377\351\377\377\377\355\377\377\377\033"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\013\377\377\377\351\377\377\377\355\377\377\377\033\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\013\377\377\377\355\377\377\377\366\377\377\377)\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377K\377\377\377\374\377\377\377"
+ "\252\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\307\377\377\377\377\377\377\377"
+ "\304\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\223\377\377\377\375\377\377\377\377\377\377\377\377\377\377\377"
+ "\372\377\377\377M\377\377\377\377\377\377\377\377\377\377\377\013\377\377"
+ "\377\361\377\377\377\333\000\000\000\000\377\377\377\275\377\377\377\371\377\377"
+ "\377%\377\377\377\223\377\377\377\377\377\377\377\252\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\224\377\377\377\376\377\377\377i\000\000\000\000"
+ "\000\000\000\000\377\377\377\013\377\377\377\351\377\377\377\355\377\377\377\033\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\240\377\377\377"
+ "\374\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\275\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\224\377"
+ "\377\377\377\377\377\377\352\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\307\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\377\377\377\310\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\337\377\377\377\377\377\377\377\332\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377\307\377\377\377\375\377"
+ "\377\377_\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377c\377\377\377\330\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\354\377\377\377Z\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377"
+ "\377\377\333\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\375\377\377\377_\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\033"
+ "\377\377\377\350\377\377\377\377\377\377\377\377\377\377\377\376\377\377"
+ "\377\255\377\377\377\362\377\377\377\323\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377;\377\377\377\372\377\377\377"
+ "\376\377\377\377\206\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377b\377\377\377\374\377\377\377\372\377\377\377I\377"
+ "\377\377\013\377\377\377\355\377\377\377\377\377\377\377\243\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\377\377\377\013\377\377\377\345\377\377\377\376\377"
+ "\377\377\214\000\000\000\000\000\000\000\000\377\377\377j\377\377\377\374\377\377\377\363"
+ "\377\377\377%\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\335\377\377\377\377\377\377\377\236\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\377\377\377\013\377\377\377\355\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\372\377\377\377)\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\360\377\377\377\333"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\371\377\377\377%\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\313\377\377\377\371\377\377\377%\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\000\377\377\377\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377E\377\377\377S\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\313\377\377\377\371\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377Q\377\377\377n\377\377\377\013\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377b\377\377\377e\377\377"
+ "\377\033\000\000\000\000\000\000\000\000\371\371\377.\377\377\377\065\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377V\377\377\377\374\377\377\377\364\377\377\377\062\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377\377\377"
+ "\013\377\377\377\343\377\377\377\377\377\377\377\215\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\033\377\377\377\371\377\377\377\334\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377E\377\377\377X\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\377"
+ "\377\377\341\377\377\377\375\377\377\377=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377e\377\377\377l\377\377\377\033\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377E\377"
+ "\377\377X\377\377\377S\377\377\377\013\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377@\377\377\377e\377\377\377c\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\377\377\377S\377\377\377K\377\377\377I\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377)\377\377\377e\377\377\377n\377\377\377\070\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\377\377\377_\377\377\377p\377\377\377I\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377E\377\377\377X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\033\377\377\377\371"
+ "\377\377\377\334\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377`\377\377\377I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377\033\377\377\377\362\377\377\377"
+ "\376\377\377\377\255\377\377\377\065\377\377\377V\377\377\377\322\377\377"
+ "\377\255\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377)\377\377\377X\377\377\377V\377\377\377\013\000"
+ "\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377E\377\377"
+ "\377m\377\377\377c\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\371\371\377.\377\377\377m\377\377\377c\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377b\377\377\377c\377\377\377"
+ "\013\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\320"
+ "\377\377\377\377\377\377\377\333\377\377\377\033\377\377\377E\377\377\377"
+ "\013\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377e\377\377\377e\377\377"
+ "\377\070\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "e\377\377\377n\377\377\377\065\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\224\377\377\377\376\377\377\377U\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\025\377\377\377\361\377\377\377\366\377"
+ "\377\377%\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\013\377\377\377\364\377\377\377\254\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\216\377\377\377\233\377\377\377\232\377\377\377"
+ "\232\377\377\377\232\377\377\377\232\377\377\377\232\377\377\377\237\377"
+ "\377\377=\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377U\377\377\377n\377\377\377\065"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377E\377\377\377n\377\377\377\070\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377@\377\377\377m\377\377\377c\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377@\377\377"
+ "\377p\377\377\377I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377Q\377\377\377p\377\377"
+ "\377X\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\377\377\377\324\377\377\377\376\377"
+ "\377\377|\377\377\377S\377\377\377V\377\377\377K\377\377\377\263\377\377"
+ "\377\377\377\377\377\252\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\025\377\377\377\362\377\377\377\360\377"
+ "\377\377\033\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377)\377\377\377p\377\377\377c\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377b\377\377\377f\377"
+ "\377\377\013\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000"
+ "\000\377\377\377\224\377\377\377\376\377\377\377U\377\377\377@\377\377\377"
+ "e\377\377\377\070\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377@\377\377\377p\377\377\377I\377\377\377"
+ ";\377\377\377\374\377\377\377\333\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\013\377\377\377e\377\377\377e\377\377\377I\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377O\377\377\377X\377\377\377U\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377j\377\377\377n\377\377\377\033"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\033\377\377\377\362\377\377\377\367\377\377\377)\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\361\377\377\377\356"
+ "\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\371\377\377\377"
+ "%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\335\377\377\377\372\377\377\377)\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\267\377\377\377\345\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\237\377\377\377\377\377\377"
+ "\377\361\377\377\377\062\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000"
+ "\000\000\000\377\377\377\331\377\377\377\377\377\377\377\304\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\062\377\377\377\337\377\377\377\377\377\377\377\236"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\377\377\377b\377\377\377\376\377\377\377\330\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\062\377\377\377\337\377\377\377\377\377\377\377\236"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\377\377\377\065\377\377\377\344\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\270\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\065\377\377\377\362"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\210\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\232\377\377"
+ "\377\377\377\377\377\370\377\377\377\364\377\377\377\372\377\377\377\243"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\266\377\377\377\377\377\377\377\225\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\205\377\377\377\371"
+ "\377\377\377\364\377\377\377\364\377\377\377\377\377\377\377\260\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\377\377\377\013\377\377\377\370\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377m\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\013\377\377\377"
+ "\345\377\377\377\375\377\377\377f\000\000\000\000\000\000\000\000\377\377\377\062\377\377"
+ "\377\326\377\377\377\377\377\377\377\245\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377\234\377\377\377\205\377\377\377I\377\377\377"
+ "\272\377\377\377\377\377\377\377\326\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\224\377\377\377\376\377\377\377i\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377K\377\377\377\374\377"
+ "\377\377\333\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377i\377\377"
+ "\377\203\377\377\377\337\377\377\377\377\377\377\377\260\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\275\377\377"
+ "\377\377\377\377\377\377\377\377\377\373\377\377\377\243\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\313"
+ "\377\377\377\371\377\377\377%\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\377\377\377\177\377\377\377\372\377\377\377\376\377"
+ "\377\377\377\377\377\377\333\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\253\377\377\377\340\377\377\377%\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\377\377\377\310\377\377\377\307\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\351\377\377\377\377\377\377\377"
+ "\276\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377u\377\377\377\325\377\377\377w\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377"
+ "\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\377\377\377\013\377\377\377\351\377\377\377\377\377\377\377\276"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377`\377\377\377\213\377"
+ "\377\377\203\377\377\377\070\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\251\377\377\377"
+ "\322\377\377\377\316\377\377\377m\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377`\377\377\377\263\377\377\377\263\377\377\377"
+ "\263\377\377\377\266\377\377\377u\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377G\377\377\377"
+ "\317\377\377\377w\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377"
+ "\377i\377\377\377\266\377\377\377\263\377\377\377\263\377\377\377\262\377"
+ "\377\377_\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377`\377\377\377y\377\377"
+ "\377y\377\377\377y\377\377\377y\377\377\377y\377\377\377y\377\377\377x\377"
+ "\377\377\033\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377\237\377\377\377\377"
+ "\377\377\377\377\377\377\377\370\377\377\377\370\377\377\377\377\377\377"
+ "\377\377\377\377\377\325\377\377\377\033\377\377\377\377\377\377\377\377\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\377\377\377;\377\377\377\374\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\376\377\377\377z\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\377\377\377\233\377\377\377\377\377\377\377l\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377V\377\377\377\376\377"
+ "\377\377\327\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\377\377\377\013\377\377\377\361"
+ "\377\377\377\377\377\377\377\377\377\377\377\325\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377v\377"
+ "\377\377\246\377\377\377\266\377\377\377u\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\313\377\377\377\372"
+ "\377\377\377)\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\377\377\377i\377\377\377\266\377\377\377\255\377\377\377\214\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377s\377\377\377|\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377s\377\377\377|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\000\000\000\000\377\377\377_\377\377\377\266\377\377\377\321\377"
+ "\377\377\316\377\377\377\271\377\377\377q\000\000\000\000\000\000\000\000\377\377\377\377"
+ "\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\377\377\377`\377\377\377\245\377\377\377"
+ "\267\377\377\377\247\377\377\377=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377"
+ "\377\377\000\000\000\000\377\377\377E\377\377\377\212\377\377\377%\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\013\377\377\377\211"
+ "\377\377\377=\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377"
+ "\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377"
+ "\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000\377\377\377v\377\377"
+ "\377\232\377\377\377q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\377\377\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377"
+ "\377\377\313\377\377\377\363\377\377\377\033\000\000\000\000\000\000\000\000\000\000\000\000\377\377"
+ "\377\377\377\377\377\377\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377\000\000\000\000"
+ "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
+ "\377\377\377\377\377\377\377\377",
+};
+
diff --git a/libs/minilibx_mms_20200219/interface.swift b/libs/minilibx_mms_20200219/interface.swift
new file mode 100644
index 0000000..97d6b81
--- /dev/null
+++ b/libs/minilibx_mms_20200219/interface.swift
@@ -0,0 +1,292 @@
+
+import Cocoa
+
+import mlx_window
+import mlx_image
+import mlx_init
+
+
+
+func _mlx_bridge(obj : T) -> UnsafeRawPointer {
+ return UnsafeRawPointer(Unmanaged.passUnretained(obj).toOpaque())
+}
+
+func _mlx_bridge_retained(obj : T) -> UnsafeRawPointer {
+ return UnsafeRawPointer(Unmanaged.passRetained(obj).toOpaque())
+}
+
+func _mlx_bridge(ptr : UnsafeRawPointer) -> T {
+ return Unmanaged.fromOpaque(ptr).takeUnretainedValue()
+}
+
+func _mlx_bridge_transfer(ptr : UnsafeRawPointer) -> T {
+ return Unmanaged.fromOpaque(ptr).takeRetainedValue()
+}
+
+
+let MLX_SYNC_IMAGE_WRITABLE = Int32(1)
+let MLX_SYNC_WIN_FLUSH_CMD = Int32(2)
+let MLX_SYNC_WIN_CMD_COMPLETED = Int32(3)
+
+
+
+/// C decl
+
+
+@_cdecl("mlx_init")
+public func mlx_init_swift() -> UnsafeRawPointer
+{
+ let mm = MlxMain()
+ return (_mlx_bridge_retained(obj:mm))
+}
+
+
+@_cdecl("mlx_loop")
+public func mlx_loop_swift(_ mlxptr:UnsafeRawPointer)
+{
+ let mlx:MlxMain = _mlx_bridge(ptr:mlxptr)
+ mlx.inLoop = true
+ NSApp.run()
+}
+
+
+@_cdecl("mlx_new_window")
+public func mlx_new_window_swift(_ mlxptr:UnsafeRawPointer, Width w:UInt32, Height h:UInt32, Title t:UnsafePointer) -> UnsafeRawPointer
+{
+ let mlx:MlxMain = _mlx_bridge(ptr:mlxptr)
+ let mw = MlxWin(device: mlx.device, width: Int(w), height: Int(h), title: String(cString: t))
+ mw.setNotifs()
+ mw.initMetal()
+ mlx.addWinToList(mw)
+ return (_mlx_bridge_retained(obj:mw))
+}
+
+
+
+@_cdecl("mlx_key_hook")
+public func mlx_key_hook_swift(_ winptr:UnsafeRawPointer, _ fctptr:UnsafeMutableRawPointer, _ paramptr:UnsafeMutableRawPointer) -> Int32
+{
+ let win:MlxWin = _mlx_bridge(ptr:winptr)
+ win.addHook(index: 3, fct: fctptr, param: paramptr)
+ return (Int32(0));
+}
+
+
+@_cdecl("mlx_mouse_hook")
+public func mlx_mouse_hook_swift(_ winptr:UnsafeRawPointer, _ fctptr:UnsafeMutableRawPointer, _ paramptr:UnsafeMutableRawPointer) -> Int32
+{
+ let win:MlxWin = _mlx_bridge(ptr:winptr)
+ win.addHook(index: 4, fct: fctptr, param: paramptr)
+ return (Int32(0));
+}
+
+
+@_cdecl("mlx_hook")
+public func mlx_hook_swift(_ winptr:UnsafeRawPointer, _ xevent:Int32, _ xmask:Int32, _ fctptr:UnsafeMutableRawPointer, _ paramptr:UnsafeMutableRawPointer) -> Int32
+{
+ let win:MlxWin = _mlx_bridge(ptr:winptr)
+ win.addHook(index: Int(xevent), fct: fctptr, param: paramptr)
+ return (Int32(0));
+}
+
+
+@_cdecl("mlx_expose_hook")
+public func mlx_expose_hook_swift(_ winptr:UnsafeRawPointer, _ fctptr:UnsafeMutableRawPointer, _ paramptr:UnsafeMutableRawPointer) -> Int32
+{
+ let win:MlxWin = _mlx_bridge(ptr:winptr)
+ win.addHook(index: 12, fct: fctptr, param: paramptr)
+ return (Int32(0));
+}
+
+@_cdecl("mlx_loop_hook")
+public func mlx_loop_hook_swift(_ mlxptr:UnsafeRawPointer, _ fctptr:UnsafeMutableRawPointer, _ paramptr:UnsafeMutableRawPointer) -> Int32
+{
+ let mlx:MlxMain = _mlx_bridge(ptr:mlxptr)
+ mlx.addLoopHook(fctptr, paramptr)
+ return (Int32(0));
+}
+
+
+@_cdecl("mlx_do_key_autorepeatoff")
+public func mlx_do_key_autorepeatoff_swift(_ mlxptr:UnsafeRawPointer)
+{
+ let mlx:MlxMain = _mlx_bridge(ptr:mlxptr)
+ mlx.winList.forEach{ $0.setKeyRepeat(0) }
+}
+
+
+@_cdecl("mlx_do_key_autorepeaton")
+public func mlx_do_key_autorepeatoon_swift(_ mlxptr:UnsafeRawPointer)
+{
+ let mlx:MlxMain = _mlx_bridge(ptr:mlxptr)
+ mlx.winList.forEach{ $0.setKeyRepeat(1) }
+}
+
+
+@_cdecl("mlx_clear_window")
+public func mlx_clear_window_swift(_ mlxptr:UnsafeRawPointer, _ winptr:UnsafeRawPointer)
+{
+ let win:MlxWin = _mlx_bridge(ptr:winptr)
+ win.clearWin()
+}
+
+
+@_cdecl("mlx_pixel_put")
+public func mlx_pixel_put_swift(_ mlxptr:UnsafeRawPointer, _ winptr:UnsafeRawPointer, _ x:Int32, _ y:Int32, _ color:UInt32)
+{
+ let win:MlxWin = _mlx_bridge(ptr:winptr)
+ win.pixelPut(x, y, color)
+}
+
+
+@_cdecl("mlx_get_color_value")
+public func mlx_get_color_value(_ mlxptr:UnsafeRawPointer, _ color:UInt32) -> UInt32
+{
+ return color
+}
+
+
+@_cdecl("mlx_new_image")
+public func mlx_new_image(_ mlxptr:UnsafeRawPointer, _ width:Int32, _ height:Int32) -> UnsafeRawPointer
+{
+ let mlx:MlxMain = _mlx_bridge(ptr:mlxptr)
+ let img = MlxImg(d:mlx.device, w:Int(width), h:Int(height))
+ mlx.addImgToList(img)
+/// print(CFGetRetainCount(img))
+ return (_mlx_bridge_retained(obj:img))
+
+}
+
+@_cdecl("mlx_get_data_addr")
+public func mlx_get_data_addr_swift(_ imgptr:UnsafeRawPointer, _ bpp:UnsafeMutablePointer, _ sizeline:UnsafeMutablePointer, _ endian:UnsafeMutablePointer) -> UnsafeMutablePointer
+{
+ let img:MlxImg = _mlx_bridge(ptr:imgptr)
+ bpp.pointee = 32
+ sizeline.pointee = Int32(img.texture_sizeline)
+ endian.pointee = Int32(0)
+ return img.texture_data
+}
+
+@_cdecl("mlx_put_image_to_window")
+public func mlx_put_image_to_window_swift(_ mlxptr:UnsafeRawPointer, _ winptr:UnsafeRawPointer, _ imgptr:UnsafeRawPointer, _ x:Int32, _ y:Int32) -> Int32
+{
+ let win:MlxWin = _mlx_bridge(ptr:winptr)
+ let img:MlxImg = _mlx_bridge(ptr:imgptr)
+ win.putImage(image:img, x:x, y:y)
+ return Int32(0)
+}
+
+@_cdecl("mlx_put_image_to_window_scale")
+public func mlx_put_image_to_window_scale_swift(_ mlxptr:UnsafeRawPointer, _ winptr:UnsafeRawPointer, _ imgptr:UnsafeRawPointer, _ sx:Int32, _ sy:Int32, _ sw:Int32, _ sh:Int32, _ dx:Int32, _ dy:Int32, _ dw:Int32, _ dh:Int32, _ color:UInt32) -> Int32
+{
+ let win:MlxWin = _mlx_bridge(ptr:winptr)
+ let img:MlxImg = _mlx_bridge(ptr:imgptr)
+ win.putImageScale(image:img, sx:sx, sy:sy, sw:sw, sh:sh, dx:dx, dy:dy, dw:dw, dh:dh, c:color)
+ return Int32(0)
+}
+
+@_cdecl("mlx_do_sync")
+public func mlx_do_sync_swift(_ mlxptr:UnsafeRawPointer) -> Int32
+{
+ let mlx:MlxMain = _mlx_bridge(ptr:mlxptr)
+ mlx.winList.forEach { $0.flushImages() }
+ mlx.winList.forEach { $0.waitForGPU() }
+ return Int32(0)
+}
+
+@_cdecl("mlx_sync")
+public func mlx_sync_swift(_ what:Int32, _ param:UnsafeRawPointer) -> Int32
+{
+ switch what
+ {
+ case MLX_SYNC_IMAGE_WRITABLE:
+ let img:MlxImg = _mlx_bridge(ptr:param); while img.onGPU > 0 {}
+ case MLX_SYNC_WIN_FLUSH_CMD:
+ let win:MlxWin = _mlx_bridge(ptr:param); win.flushImages()
+ case MLX_SYNC_WIN_CMD_COMPLETED:
+ let win:MlxWin = _mlx_bridge(ptr:param); win.flushImages(); win.waitForGPU()
+ default:
+ break
+ }
+ return Int32(0)
+}
+
+@_cdecl("mlx_destroy_window")
+public func mlx_destroy_window_swift(_ mlxptr:UnsafeRawPointer, _ winptr:UnsafeRawPointer) -> Int32
+{
+ let mlx:MlxMain = _mlx_bridge(ptr:mlxptr)
+ /// bridge_transfer to get the retain, at end of this func should release the MlxWin object, because no ref anymore.
+ let win:MlxWin = _mlx_bridge_transfer(ptr:winptr)
+ win.delNotifs()
+ win.flushImages()
+ win.waitForGPU()
+ win.destroyWinE()
+ mlx.winList.removeAll(where: { $0 === win} )
+ return Int32(0)
+}
+
+@_cdecl("mlx_destroy_image")
+public func mlx_destroy_image_swift(_ mlxptr:UnsafeRawPointer, _ imgptr:UnsafeRawPointer) -> Int32
+{
+ let mlx:MlxMain = _mlx_bridge(ptr:mlxptr)
+ /// bridge_transfer to get the retain, at end of this func should release the MlxImg object, because no ref anymore.
+ let img:MlxImg = _mlx_bridge_transfer(ptr:imgptr)
+ mlx.winList.forEach { $0.flushImages() }
+ while img.onGPU > 0 {}
+ mlx.imgList.removeAll(where: { $0 === img} )
+ return Int32(0)
+}
+
+
+@_cdecl("mlx_get_screen_size")
+public func mlx_get_screen_size_swift(_ mlxptr:UnsafeRawPointer, _ sizex:UnsafeMutablePointer, _ sizey:UnsafeMutablePointer) -> Int32
+{
+ /// let mlx:MlxMain = _mlx_bridge(ptr:mlxptr)
+ sizex.pointee = Int32(NSScreen.main!.frame.size.width)
+ sizey.pointee = Int32(NSScreen.main!.frame.size.height)
+ return Int32(0)
+}
+
+
+@_cdecl("mlx_mouse_hide")
+public func mlx_mouse_hide_swift() -> Int32
+{
+ NSCursor.hide()
+ return Int32(0)
+}
+
+@_cdecl("mlx_mouse_show")
+public func mlx_mouse_show_swift() -> Int32
+{
+ NSCursor.unhide()
+ return Int32(0)
+}
+
+
+@_cdecl("mlx_mouse_move")
+public func mlx_mouse_move_swift(_ winptr:UnsafeRawPointer, _ x:Int32, _ y:Int32) -> Int32
+{
+ let win:MlxWin = _mlx_bridge(ptr:winptr)
+ let frame = win.getWinEFrame()
+/// let sframe = win.getScreenFrame()
+ var pt = CGPoint()
+ pt.x = frame.origin.x + CGFloat(x)
+/// pt.y = sframe.size.y - frame.size.y - frame.origin.y + 1 + y
+ pt.y = frame.origin.y + frame.size.height - 1.0 - CGFloat(y)
+ CGWarpMouseCursorPosition(pt)
+ CGAssociateMouseAndMouseCursorPosition(UInt32(1))
+ return Int32(0);
+}
+
+
+
+@_cdecl("mlx_mouse_get_pos")
+public func mlx_mouse_get_pos_swift(_ winptr:UnsafeRawPointer, _ x:UnsafeMutablePointer, _ y:UnsafeMutablePointer) -> Int32
+{
+ let win:MlxWin = _mlx_bridge(ptr:winptr)
+ let frame = win.getWinEFrame()
+ let point = win.getMouseLoc()
+ x.pointee = Int32(point.x)
+ y.pointee = Int32(frame.size.height - 1.0 - point.y)
+ return Int32(0)
+}
diff --git a/libs/minilibx-linux-master/man/man1/mlx.1 b/libs/minilibx_mms_20200219/man/man3/mlx.3
similarity index 63%
rename from libs/minilibx-linux-master/man/man1/mlx.1
rename to libs/minilibx_mms_20200219/man/man3/mlx.3
index 9ad0ac1..4c7e29b 100644
--- a/libs/minilibx-linux-master/man/man1/mlx.1
+++ b/libs/minilibx_mms_20200219/man/man3/mlx.3
@@ -1,6 +1,6 @@
.TH MiniLibX 3 "September 19, 2002"
.SH NAME
-MiniLibX - Simple X-Window Interface Library for students
+MiniLibX - Simple Window Interface Library for students
.SH SYNOPSYS
#include
@@ -12,11 +12,12 @@ MiniLibX - Simple X-Window Interface Library for students
.SH DESCRIPTION
MiniLibX is an easy way to create graphical software,
-without any X-Window programming knowledge. It provides
+without any X-Window/X11 programming knowledge under Unix/Linux, nor
+any AppKit programming knowledge under MacOS. It provides
simple window creation, a drawing tool, image and basic events
management.
-.SH X-WINDOW CONCEPT
+.SH Unix/Linux: X-WINDOW CONCEPT
X-Window is a network-oriented graphical system for Unix.
It is based on two main parts:
@@ -30,6 +31,14 @@ On the other side, the X-Server manages the screen, keyboard and mouse
A network connection must be established between these two entities to send
drawing orders (from the software to the X-Server), and keyboard/mouse
events (from the X-Server to the software).
+.br
+Nowadays, most of the time, both run on the same computer.
+
+.SH MacOS: WINDOW SERVER AND GPU
+
+Your software interacts directly with the Window server who handles the
+cohabitation on the screen with other software and the event system,
+and interacts with the GPU to handle all drawing stuff.
.SH INCLUDE FILE
.B mlx.h
@@ -41,9 +50,9 @@ It only contains function prototypes, no structure is needed.
First of all, you need to initialize the connection
between your software and the display.
Once this connection is established, you'll be able to
-use other MiniLibX functions to send the X-Server messages,
-like "I want to draw a yellow pixel in this window" or "did the
-user hit a key?".
+use other MiniLibX functions to send and receive the messages from
+the display, like "I want to draw a yellow pixel in this window" or
+"did the user hit a key?".
.P
The
.B mlx_init
@@ -68,12 +77,20 @@ All other MiniLibX functions are described in the following man pages:
: handle keyboard or mouse events
.SH LINKING MiniLibX
-To use MiniLibX functions, you'll need to link
+To use MiniLibX functions, you may need to link
your software with several libraries, including the MiniLibX library itself.
-To do this, simply add the following arguments at linking time:
+On Unix/Linux, simply add the following arguments at linking time:
.B -lmlx -lXext -lX11
+On MacOS, the dynamic Metal library will find on its own the missing components:
+
+.B -lmlx
+
+and still on MacOS, the static OpenGL version will need:
+
+.B -lmlx -framework OpenGL -framework AppKit -lz
+
You may also need to specify the path to these libraries, using
the
.B -L
@@ -83,11 +100,11 @@ flag.
.SH RETURN VALUES
If
.B mlx_init()
-fails to set up the connection to the X server, it will return NULL, otherwise
+fails to set up the connection to the display, it will return NULL, otherwise
a non-null pointer is returned as a connection identifier.
.SH SEE ALSO
mlx_new_window(3), mlx_pixel_put(3), mlx_new_image(3), mlx_loop(3)
.SH AUTHOR
-Copyright ol@ - 2002-2014 - Olivier Crouzet
+Copyright ol@ - 2002-2019 - Olivier Crouzet
diff --git a/libs/minilibx-linux-master/man/man3/mlx_loop.1 b/libs/minilibx_mms_20200219/man/man3/mlx_loop.3
similarity index 79%
rename from libs/minilibx-linux-master/man/man3/mlx_loop.1
rename to libs/minilibx_mms_20200219/man/man3/mlx_loop.3
index 3397ce2..ab3798c 100644
--- a/libs/minilibx-linux-master/man/man3/mlx_loop.1
+++ b/libs/minilibx_mms_20200219/man/man3/mlx_loop.3
@@ -43,9 +43,9 @@ MiniLibX - Handle events
.I void *mlx_ptr, int (*funct_ptr)(), void *param
);
-.SH X-WINDOW EVENTS
+.SH EVENTS
-The X-Window system is bi-directionnal. On one hand, the program sends orders to
+The graphical system is bi-directionnal. On one hand, the program sends orders to
the screen to display pixels, images, and so on. On the other hand,
it can get information from the keyboard and mouse associated to
the screen. To do so, the program receives "events" from the keyboard or the
@@ -69,7 +69,8 @@ You can assign different functions to the three following events:
- The mouse button is pressed
.br
- A part of the window should be re-drawn
-(this is called an "expose" event, and it is your program's job to handle it).
+(this is called an "expose" event, and it is your program's job to handle it in the
+Unix/Linux X11 environment, but at the opposite it never happens on MacOS).
.br
Each window can define a different function for the same event.
@@ -100,8 +101,8 @@ with fixed parameters:
.nf
expose_hook(void *param);
- key_hook(int keycode,void *param);
- mouse_hook(int button,int x,int y,void *param);
+ key_hook(int keycode, void *param);
+ mouse_hook(int button, int x, int y, void *param);
loop_hook(void *param);
.fi
@@ -114,7 +115,8 @@ is the address specified in the mlx_*_hook calls. This address is never
used nor modified by the MiniLibX. On key and mouse events, additional
information is passed:
.I keycode
-tells you which key is pressed (look for the X11 include file "keysymdef.h"),
+tells you which key is pressed (with X11, look for the include file "keysymdef.h",
+with MacOS, just try :) ),
(
.I x
,
@@ -124,18 +126,19 @@ tells you which key is pressed (look for the X11 include file "keysymdef.h"),
tells you which mouse button was pressed.
.SH GOING FURTHER WITH EVENTS
-The MiniLibX provides a much generic access to all X-Window events. The
+The MiniLibX provides a much generic access to other available events. The
.I mlx.h
include define
.B mlx_hook()
in the same manner mlx_*_hook functions work. The event and mask values
-will be taken from the X11 include file "X.h".
+will be taken from the X11 include file "X.h". Some MacOS events are mapped
+to these values, when it makes sense, and the mask is not used in MacOS.
-See source code of mlx_int_param_event.c to find out how the MiniLibX will
+See source code of the MiniLibX to find out how it will
call your own function for a specific event.
.SH SEE ALSO
mlx(3), mlx_new_window(3), mlx_pixel_put(3), mlx_new_image(3)
.SH AUTHOR
-Copyright ol@ - 2002-2014 - Olivier Crouzet
+Copyright ol@ - 2002-2019 - Olivier Crouzet
diff --git a/libs/minilibx-linux-master/man/man1/mlx_new_image.1 b/libs/minilibx_mms_20200219/man/man3/mlx_new_image.3
similarity index 85%
rename from libs/minilibx-linux-master/man/man1/mlx_new_image.1
rename to libs/minilibx_mms_20200219/man/man3/mlx_new_image.3
index f2160a2..ecea0ee 100644
--- a/libs/minilibx-linux-master/man/man1/mlx_new_image.1
+++ b/libs/minilibx_mms_20200219/man/man3/mlx_new_image.3
@@ -51,6 +51,14 @@ MiniLibX - Manipulating images
.I void *mlx_ptr, char *filename, int *width, int *height
);
+.nf
+.I void *
+.fi
+.B mlx_png_file_to_image
+(
+.I void *mlx_ptr, char *filename, int *width, int *height
+);
+
.nf
.I int
.fi
@@ -141,7 +149,7 @@ one byte for each component (see
.B mlx_pixel_put
manual). This must be translated to fit the
.I bits_per_pixel
-requirement of the image, and make the color understandable to the X-Server.
+requirement of the image, and make the color understandable to the display.
That is the purpose of the
.B mlx_get_color_value
() function. It takes a standard RGB
@@ -151,19 +159,23 @@ parameter, and returns an
value.
The
.I bits_per_pixel
-least significant bits of this value can be stored in the image.
+least significant bits of this value can be stored in the image. You can
+avoid using this function if there is no conversion needed (eg. in case of
+24 bits depth, or 32 bits depth).
Keep in mind that the least significant bits position depends on the local
-computer's endian. If the endian of the image (in fact the endian of
-the X-Server's computer) differs from the local endian, then the value should
+computer's endian. If the endian of the image differs from the local endian
+(which shoud only occurs in a X11 network environment), then the value should
be transformed before being used.
-.SH XPM IMAGES
+.SH XPM AND PNG IMAGES
The
.B mlx_xpm_to_image
-() and
+() ,
.B mlx_xpm_file_to_image
+() and
+.B mlx_png_file_to_image
() functions will create a new image the same way.
They will fill it using the specified
.I xpm_data
@@ -171,16 +183,18 @@ or
.I filename
, depending on which function is used.
Note that MiniLibX does not use the standard
-Xpm library to deal with xpm images. You may not be able to
-read all types of xpm images. It however handles transparency.
+Xpm and png libraries to deal with xpm and png images. You may not be able to
+read all types of xpm and png images. It however handles transparency.
.SH RETURN VALUES
-The three functions that create images,
+The four functions that create images,
.B mlx_new_image()
,
.B mlx_xpm_to_image()
-and
+,
.B mlx_xpm_file_to_image()
+and
+.B mlx_png_file_to_image()
, will return NULL if an error occurs. Otherwise they return a non-null pointer
as an image identifier.
@@ -189,4 +203,4 @@ as an image identifier.
mlx(3), mlx_new_window(3), mlx_pixel_put(3), mlx_loop(3)
.SH AUTHOR
-Copyright ol@ - 2002-2014 - Olivier Crouzet
+Copyright ol@ - 2002-2019 - Olivier Crouzet
diff --git a/libs/minilibx-linux-master/man/man3/mlx_new_window.1 b/libs/minilibx_mms_20200219/man/man3/mlx_new_window.3
similarity index 96%
rename from libs/minilibx-linux-master/man/man3/mlx_new_window.1
rename to libs/minilibx_mms_20200219/man/man3/mlx_new_window.3
index 90f6d47..cdfc098 100644
--- a/libs/minilibx-linux-master/man/man3/mlx_new_window.1
+++ b/libs/minilibx_mms_20200219/man/man3/mlx_new_window.3
@@ -76,4 +76,4 @@ right now return nothing.
mlx(3), mlx_pixel_put(3), mlx_new_image(3), mlx_loop(3)
.SH AUTHOR
-Copyright ol@ - 2002-2014 - Olivier Crouzet
+Copyright ol@ - 2002-2019 - Olivier Crouzet
diff --git a/libs/minilibx-linux-master/man/man3/mlx_pixel_put.1 b/libs/minilibx_mms_20200219/man/man3/mlx_pixel_put.3
similarity index 82%
rename from libs/minilibx-linux-master/man/man3/mlx_pixel_put.1
rename to libs/minilibx_mms_20200219/man/man3/mlx_pixel_put.3
index f4d131e..52670a6 100644
--- a/libs/minilibx-linux-master/man/man3/mlx_pixel_put.1
+++ b/libs/minilibx_mms_20200219/man/man3/mlx_pixel_put.3
@@ -49,8 +49,9 @@ will be displayed at (
.I y
).
-In both functions, it is impossible to display anything outside the
-specified window, nor display in another window in front of the selected one.
+Both functions will discard any display outside the window. This makes
+.B mlx_pixel_put
+slow. Consider using images instead.
.SH COLOR MANAGEMENT
The
@@ -72,10 +73,13 @@ this integer are filled as shown in the picture below:
While filling the integer, make sure you avoid endian problems. Remember
that the "blue" byte should always be the least significant one.
+Depending on hardware capabilities, the most significant bit can handle
+transparency. Beware, at the opposite of the OpenGL classics, it does
+not represent opacity.
.SH SEE ALSO
mlx(3), mlx_new_window(3), mlx_new_image(3), mlx_loop(3)
.SH AUTHOR
-Copyright ol@ - 2002-2014 - Olivier Crouzet
+Copyright ol@ - 2002-2019 - Olivier Crouzet
diff --git a/libs/minilibx_mms_20200219/mlx.h b/libs/minilibx_mms_20200219/mlx.h
new file mode 100644
index 0000000..f24a7f7
--- /dev/null
+++ b/libs/minilibx_mms_20200219/mlx.h
@@ -0,0 +1,157 @@
+/*
+** mlx.h for MinilibX in
+**
+** Made by Charlie Root
+** Login
+**
+** Started on Mon Jul 31 16:37:50 2000 Charlie Root
+** Last update Tue Oct 14 16:23:28 2019 Olivier Crouzet
+*/
+
+/*
+** MinilibX - Please report bugs
+*/
+
+
+/*
+**
+** This library is a simple framework to help 42 students
+** create simple graphical apps.
+** It only provides the minimum functions, it's students' job
+** to create the missing pieces for their own project :)
+**
+** The MinilibX can load XPM and PNG images.
+** Please note that both image loaders are incomplete, some
+** image may not load.
+**
+** For historical reasons, the alpha byte represent transparency
+** instead of opacity.
+** Also, for compatibility reasons, prototypes may show inconsistant
+** types.
+**
+** Only the dynamic library is available. It must be placed in an appropriate path.
+** ./ is one of them. You can also use DYLD_LIBRARY_PATH
+**
+*/
+
+
+#ifndef MLX_H
+
+#define MLX_H
+
+
+void *mlx_init();
+/*
+** needed before everything else.
+** return (void *)0 if failed
+*/
+
+
+/*
+** Basic actions
+*/
+
+void *mlx_new_window(void *mlx_ptr, int size_x, int size_y, char *title);
+/*
+** return void *0 if failed
+*/
+int mlx_clear_window(void *mlx_ptr, void *win_ptr);
+int mlx_pixel_put(void *mlx_ptr, void *win_ptr, int x, int y, int color);
+/*
+** origin for x & y is top left corner of the window
+** y down is positive
+** color is 0xAARRGGBB format
+** x and y must fit into the size of the window, no control is done on the values
+*/
+
+
+/*
+** Image stuff
+*/
+
+void *mlx_new_image(void *mlx_ptr,int width,int height);
+/*
+** return void *0 if failed
+*/
+char *mlx_get_data_addr(void *img_ptr, int *bits_per_pixel,
+ int *size_line, int *endian);
+/*
+** endian : 0 = graphical sever is little endian, 1 = big endian
+** usefull in a network environment where graphical app show on a remote monitor that can have a different endian
+*/
+int mlx_put_image_to_window(void *mlx_ptr, void *win_ptr, void *img_ptr,
+ int x, int y);
+unsigned int mlx_get_color_value(void *mlx_ptr, int color);
+
+
+/*
+** dealing with Events
+*/
+
+int mlx_mouse_hook (void *win_ptr, int (*funct_ptr)(), void *param);
+int mlx_key_hook (void *win_ptr, int (*funct_ptr)(), void *param);
+int mlx_expose_hook (void *win_ptr, int (*funct_ptr)(), void *param);
+
+int mlx_loop_hook (void *mlx_ptr, int (*funct_ptr)(), void *param);
+int mlx_loop (void *mlx_ptr);
+
+
+/*
+** hook funct are called as follow :
+**
+** expose_hook(void *param);
+** key_hook(int keycode, void *param);
+** mouse_hook(int button, int x,int y, void *param);
+** loop_hook(void *param);
+**
+*/
+
+
+/*
+** Usually asked...
+** mlx_string_put display may vary in size between OS and between mlx implementations
+*/
+
+int mlx_string_put(void *mlx_ptr, void *win_ptr, int x, int y, int color,
+ char *string);
+void *mlx_xpm_to_image(void *mlx_ptr, char **xpm_data,
+ int *width, int *height);
+void *mlx_xpm_file_to_image(void *mlx_ptr, char *filename,
+ int *width, int *height);
+void *mlx_png_file_to_image(void *mlx_ptr, char *file, int *width, int *height);
+
+int mlx_destroy_window(void *mlx_ptr, void *win_ptr);
+
+int mlx_destroy_image(void *mlx_ptr, void *img_ptr);
+
+/*
+** generic hook system for all events, and minilibX functions that
+** can be hooked. Some macro and defines from X11/X.h are needed here.
+*/
+
+int mlx_hook(void *win_ptr, int x_event, int x_mask,
+ int (*funct)(), void *param);
+
+int mlx_mouse_hide();
+int mlx_mouse_show();
+int mlx_mouse_move(void *win_ptr, int x, int y);
+int mlx_mouse_get_pos(void *win_ptr, int *x, int *y);
+
+int mlx_do_key_autorepeatoff(void *mlx_ptr);
+int mlx_do_key_autorepeaton(void *mlx_ptr);
+int mlx_do_sync(void *mlx_ptr);
+
+#define MLX_SYNC_IMAGE_WRITABLE 1
+#define MLX_SYNC_WIN_FLUSH_CMD 2
+#define MLX_SYNC_WIN_CMD_COMPLETED 3
+int mlx_sync(int cmd, void *param);
+/*
+** image_writable can loop forever if no flush occurred. Flush is always done by mlx_loop.
+** cmd_completed first flush then wait for completion.
+** mlx_do_sync equals cmd_completed for all windows.
+** cmd is one of the define, param will be img_ptr or win_ptr accordingly
+*/
+
+int mlx_get_screen_size(void *mlx_ptr, int *sizex, int *sizey);
+
+#endif /* MLX_H */
diff --git a/libs/minilibx_mms_20200219/mlx_image.swift b/libs/minilibx_mms_20200219/mlx_image.swift
new file mode 100644
index 0000000..7c1fa9b
--- /dev/null
+++ b/libs/minilibx_mms_20200219/mlx_image.swift
@@ -0,0 +1,48 @@
+
+
+import Metal
+
+
+public class MlxImg
+{
+ public var texture: MTLTexture
+/// var texture_buff: MTLBuffer
+
+ public var texture_sizeline: Int
+ public var texture_data: UnsafeMutablePointer
+ public var texture_width: Int
+ public var texture_height: Int
+
+ public var onGPU = 0
+
+ convenience public init(d device:MTLDevice, w width:Int, h height:Int)
+ {
+ self.init(d:device, w:width, h:height, t:0)
+ }
+
+ public init(d device:MTLDevice, w width:Int, h height:Int, t target:Int)
+ {
+ texture_width = width
+ texture_height = height
+ texture_sizeline = width * 4
+ texture_sizeline = 256 * (texture_sizeline / 256 + (texture_sizeline%256 >= 1 ? 1 : 0) )
+
+ let textureDesc = MTLTextureDescriptor()
+ textureDesc.width = texture_width
+ textureDesc.height = texture_height
+ textureDesc.usage = .shaderRead
+ if (target == 1)
+ {
+ textureDesc.usage = .renderTarget
+ textureDesc.storageMode = .private
+ }
+ textureDesc.pixelFormat = MTLPixelFormat.bgra8Unorm
+ let texture_buff = device.makeBuffer(length: texture_sizeline * height)!
+ texture = texture_buff.makeTexture(descriptor:textureDesc, offset:0, bytesPerRow:texture_sizeline)!
+
+ let tmpptr = texture_buff.contents()
+ texture_data = tmpptr.assumingMemoryBound(to:UInt32.self)
+ }
+
+
+}
\ No newline at end of file
diff --git a/libs/minilibx_mms_20200219/mlx_init.swift b/libs/minilibx_mms_20200219/mlx_init.swift
new file mode 100644
index 0000000..de6edf2
--- /dev/null
+++ b/libs/minilibx_mms_20200219/mlx_init.swift
@@ -0,0 +1,100 @@
+
+import Cocoa
+import Metal
+import mlx_window
+import mlx_image
+
+
+func _mlx_bridge(obj : T) -> UnsafeMutableRawPointer? {
+ return UnsafeMutableRawPointer(Unmanaged.passUnretained(obj).toOpaque())
+}
+
+func _mlx_bridge(ptr : UnsafeRawPointer) -> T {
+ return Unmanaged.fromOpaque(ptr).takeUnretainedValue()
+}
+
+
+
+public class MlxMain {
+
+ public var winList = [MlxWin]()
+ public var imgList = [MlxImg]()
+ var myMlxApp:NSApplication?
+ public var device:MTLDevice!
+ var loopHook:UnsafeMutableRawPointer?
+ var loopParam:UnsafeMutableRawPointer
+ var loopHookTimer:CFRunLoopTimer?
+ public var inLoop = false
+
+ public init(_ flag:Int = 0)
+ {
+ /// make app with top menubar
+ myMlxApp = NSApplication.shared
+ if (flag == 1)
+ {
+ NSApp.setActivationPolicy(NSApplication.ActivationPolicy.prohibited) /// for non clickable win, no top menu
+ }
+ else
+ {
+ NSApp.setActivationPolicy(NSApplication.ActivationPolicy.regular)
+ }
+
+ device = MTLCreateSystemDefaultDevice()!
+ loopParam = UnsafeMutableRawPointer(&inLoop) /// dummy addr init
+
+ /// Add observer anyway to flush pixels every loop. If loop_hook exists, call it.
+ var ocontext = CFRunLoopObserverContext(version:0, info:_mlx_bridge(obj:self), retain:nil, release:nil, copyDescription:nil)
+ let observer = CFRunLoopObserverCreate(kCFAllocatorDefault, CFRunLoopActivity.beforeWaiting.rawValue, true, 0, createOCallback(), &ocontext)
+ CFRunLoopAddObserver(CFRunLoopGetMain(), observer, CFRunLoopMode.commonModes)
+
+ }
+
+ public func addWinToList(_ win:MlxWin)
+ { winList.append(win) }
+ public func addImgToList(_ img:MlxImg)
+ { imgList.append(img) }
+
+
+ func doCallLoopHook()
+ {
+/// if (loopHook != nil)
+/// {
+ _ = (unsafeBitCast(loopHook!,to:(@convention(c)(UnsafeRawPointer)->Void).self))(loopParam)
+/// }
+ }
+
+ func createOCallback() -> CFRunLoopObserverCallBack
+ {
+ return { (cfRunloopObserver, cfrunloopactivity, info) -> Void in
+ let mlx:MlxMain = _mlx_bridge(ptr:info!)
+ mlx.winList.forEach { $0.flushImages() }
+/// mlx.doCallLoopHook()
+ }
+ }
+
+ func createTCallback() -> CFRunLoopTimerCallBack
+ {
+ return { (cfRunloopTimer, info) -> Void in
+ let mlx:MlxMain = _mlx_bridge(ptr:info!)
+ mlx.doCallLoopHook()
+ }
+ }
+
+ public func addLoopHook(_ f:UnsafeMutableRawPointer?, _ p:UnsafeMutableRawPointer)
+ {
+ var tcontext = CFRunLoopTimerContext(version:0, info:_mlx_bridge(obj:self), retain:nil, release:nil, copyDescription:nil)
+ if (loopHook != nil)
+ {
+ CFRunLoopTimerInvalidate(loopHookTimer)
+ }
+
+ loopHook = f
+ loopParam = p
+ if (loopHook != nil)
+ {
+ loopHookTimer = CFRunLoopTimerCreate(kCFAllocatorDefault, 0.0, 0.0001, 0, 0, createTCallback(), &tcontext)
+ CFRunLoopAddTimer(CFRunLoopGetMain(), loopHookTimer, CFRunLoopMode.commonModes)
+ }
+ }
+
+}
diff --git a/libs/minilibx_mms_20200219/mlx_png.c b/libs/minilibx_mms_20200219/mlx_png.c
new file mode 100644
index 0000000..48e82de
--- /dev/null
+++ b/libs/minilibx_mms_20200219/mlx_png.c
@@ -0,0 +1,431 @@
+
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "zlib.h"
+
+#include "mlx.h"
+
+#define UNIQ_BPP 4
+
+#define PNG_MAGIC_SIZE 8
+unsigned char magic[PNG_MAGIC_SIZE] = {137, 80, 78, 71, 13, 10, 26, 10};
+#define PNG_HDR_SIZE 13
+
+#define Z_CHUNK 32768
+
+#define ERR_MAGIC_SIZE 1
+#define ERR_MAGIC_WRONG 2
+#define ERR_STRUCT_INCOMPLETE 3
+#define ERR_STRUCT_HDR 4
+#define ERR_STRUCT_END 5
+#define ERR_STRUCT_CRC 6
+#define ERR_STRUCT_INCIMPL 7
+#define ERR_STRUCT_DAT 8
+#define ERR_STRUCT_MISSCHK 9
+#define ERR_ZLIB 10
+#define ERR_DATA_MISMATCH 11
+#define ERR_DATA_FILTER 12
+#define ERR_MALLOC 13
+char *(mipng_err[]) =
+{
+ "No error",
+ "Not enough size for magic",
+ "Wrong magic",
+ "Incomplete chunk structure",
+ "Duplicate or incorrect header",
+ "Duplicate or incorrect end",
+ "Invalid CRC in chunk",
+ "Incorrect header or configuration not implemented",
+ "Non consecutive dat chunks",
+ "Missing header/dat/end chunk(s)",
+ "Zlib inflate error",
+ "Inflated data size mismatch",
+ "Unknown scanline filter",
+ "Can't malloc"
+};
+
+typedef struct png_info_s
+{
+ unsigned int width;
+ unsigned int height;
+ int depth;
+ int color;
+ int interlace;
+ int bpp;
+} png_info_t;
+
+
+int mipng_is_type(unsigned char *ptr, char *type)
+{
+ if (ptr[4] == type[0] && ptr[5] == type[1] && ptr[6] == type[2] && ptr[7] == type[3])
+ return (1);
+ return (0);
+}
+
+
+unsigned char mipng_defilter_none(unsigned char *buff, int pos, int a, int b, int c)
+{ return (buff[pos]); }
+unsigned char mipng_defilter_sub(unsigned char *buff, int pos, int a, int b, int c)
+{ return (buff[pos]+(unsigned int)a); }
+unsigned char mipng_defilter_up(unsigned char *buff, int pos, int a, int b, int c)
+{ return (buff[pos]+(unsigned int)b); }
+unsigned char mipng_defilter_average(unsigned char *buff, int pos, int a, int b, int c)
+{ return (buff[pos]+((unsigned int)a+(unsigned int)b)/2); }
+unsigned char mipng_defilter_paeth(unsigned char *buff, int pos, int a, int b, int c)
+{
+ int p;
+ int result;
+
+ p = a + b - c;
+ if (abs(b - c) <= abs(a - c) && abs(b - c) <= abs(a + b - c - c))
+ result = a;
+ else
+ if (abs(a - c) <= abs(a + b - c - c))
+ result = b;
+ else
+ result = c;
+ return (buff[pos]+result);
+}
+
+
+
+unsigned char (*(mipng_defilter[]))(unsigned char *buff, int pos, int a, int b, int c) =
+{
+ mipng_defilter_none,
+ mipng_defilter_sub,
+ mipng_defilter_up,
+ mipng_defilter_average,
+ mipng_defilter_paeth
+};
+
+// only work for mlx mac or img 32bpp
+int mipng_fill_img(void *img, unsigned char *buf, png_info_t *pi)
+{
+ unsigned int current_filter;
+ int ipos;
+ int bpos;
+ int ilen;
+ int iline;
+ int blen;
+ int bpp;
+ int endian;
+ unsigned char tmp;
+ unsigned char *ibuf;
+
+ ibuf = (unsigned char *)mlx_get_data_addr(img, &bpp, &iline, &endian);
+ // iline = img->width * UNIQ_BPP;
+ // ilen = img->width * img->height * UNIQ_BPP;
+ ilen = iline*pi->height;
+ ipos = 0;
+ blen = pi->width * pi->height * pi->bpp + pi->height; // ??? why + pi->height ??
+ bpos = 0;
+ while (ipos < ilen && bpos < blen)
+ {
+ if (ipos % iline == 0)
+ {
+ // printf("ipos %d iline %d pi->width %d bpos %d\n", ipos, iline, pi->width, bpos);
+ if ((current_filter = buf[bpos++]) > 4)
+ {
+ return (ERR_DATA_FILTER);
+ }
+ }
+ ibuf[ipos] = mipng_defilter[current_filter](buf, bpos,
+ ipos%iline>3?ibuf[ipos-UNIQ_BPP]:0,
+ (ipos>=iline)?ibuf[ipos-iline]:0,
+ (ipos>=iline && ipos%iline>3)?ibuf[ipos-iline-UNIQ_BPP]:0);
+ ipos ++;
+ bpos ++;
+ if (pi->depth == 16)
+ bpos ++;
+ if (ipos % 4 == 3 && pi->color == 2) // no alpha
+ ibuf[ipos++] = 0xFF;
+ if (ipos % iline == pi->width * 4)
+ ipos += iline-pi->width*4;
+ }
+ if (ipos != ilen || bpos != blen)
+ {
+ // printf("fill err ipos %d vs %d, bpos %d vs %d\n", ipos, ilen, bpos, blen);
+ return (ERR_DATA_MISMATCH);
+ }
+ ipos = 0;
+ while (ipos < ilen)
+ {
+ tmp = ibuf[ipos];
+ ibuf[ipos] = ibuf[ipos+2];
+ ibuf[ipos+2] = tmp;
+ ibuf[ipos+3] = 0xFF - ibuf[ipos+3];
+ ipos += UNIQ_BPP;
+ }
+ return (0);
+}
+
+
+int mipng_data(void *img, unsigned char *dat, png_info_t *pi)
+{
+ unsigned int len;
+ int b_pos;
+ unsigned char *buffer;
+ int ret;
+ int z_ret;
+ unsigned z_have;
+ z_stream z_strm;
+ unsigned char z_out[Z_CHUNK];
+
+ b_pos = 0;
+ if (!(buffer = malloc((long long)pi->width*(long long)pi->height*(long long)pi->bpp + pi->height)))
+ return (ERR_MALLOC);
+ z_strm.zalloc = Z_NULL;
+ z_strm.zfree = Z_NULL;
+ z_strm.opaque = Z_NULL;
+ z_strm.avail_in = 0;
+ z_strm.next_in = Z_NULL;
+ z_ret = inflateInit(&z_strm);
+ if (z_ret != Z_OK)
+ {
+ free(buffer);
+ return (ERR_ZLIB);
+ }
+
+ while (mipng_is_type(dat, "IDAT"))
+ {
+ len = *((unsigned int *)dat);
+ len = ntohl(len);
+ z_strm.avail_in = len;
+ z_strm.next_in = dat + 8;
+ z_strm.avail_out = 0;
+ while (z_strm.avail_out == 0)
+ {
+ z_strm.avail_out = Z_CHUNK;
+ z_strm.next_out = z_out;
+ z_ret = inflate(&z_strm, Z_NO_FLUSH);
+ // printf("inflate ret %d avail_out %d\n", z_ret, z_strm.avail_out);
+ if (z_ret != Z_OK && z_ret != Z_STREAM_END)
+ {
+ inflateEnd(&z_strm);
+ free(buffer);
+ return (ERR_ZLIB);
+ }
+ if (b_pos + Z_CHUNK - z_strm.avail_out > pi->width*pi->height*pi->bpp+pi->height)
+ {
+ inflateEnd(&z_strm);
+ free(buffer);
+ return (ERR_DATA_MISMATCH);
+ }
+ bcopy(z_out, buffer+b_pos, Z_CHUNK - z_strm.avail_out);
+ b_pos += Z_CHUNK - z_strm.avail_out;
+ }
+ dat += len + 4 + 4 + 4;
+ }
+ inflateEnd(&z_strm);
+ if (b_pos != pi->width*pi->height*pi->bpp+pi->height)
+ {
+ // printf("pb : bpos %d vs expected %d\n", b_pos, img->width*img->height*pi->bpp+img->height);
+ free(buffer);
+ return (ERR_DATA_MISMATCH);
+ }
+ ret = mipng_fill_img(img, buffer, pi);
+ free(buffer);
+ return (ret);
+}
+
+
+
+int mipng_magic(unsigned char *ptr, int size)
+{
+ int i;
+
+ if (size < PNG_MAGIC_SIZE)
+ return (ERR_MAGIC_SIZE);
+ i = 0;
+ while (i < PNG_MAGIC_SIZE)
+ if (*(ptr++) != magic[i++])
+ return (ERR_MAGIC_WRONG);
+ return (0);
+}
+
+
+unsigned long crc_table[256] = { 0, 0x77073096, 0xee0e612c, 0x990951ba, 0x76dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0xedb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x9b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x1db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x6b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0xf00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x86d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x3b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x4db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0xd6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0xa00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x26d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x5005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0xcb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0xbdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d };
+
+// From http://www.w3.org/TR/PNG/#D-CRCAppendix
+int mipng_crc(unsigned char *ptr, int len)
+{
+ unsigned int file_crc;
+ unsigned long crc;
+ int i;
+
+ file_crc = *((unsigned int *)(ptr+4+4+len));
+ file_crc = ntohl(file_crc);
+
+ crc = 0xffffffffL;
+ i = 0;
+ while (i < len+4)
+ crc = crc_table[(crc ^ ptr[(i++)+4]) & 0xff] ^ (crc >> 8);
+ crc ^= 0xffffffffL;
+
+ if (file_crc != crc)
+ return (1);
+ return (0);
+}
+
+
+int mipng_structure(unsigned char *ptr, int size, unsigned char **hdr, unsigned char **dat)
+{
+ unsigned int len;
+ int dat_state;
+ int end;
+
+ dat_state = 0;
+ *hdr = NULL;
+ *dat = NULL;
+ end = 0;
+ while (size)
+ {
+ if (size >= 4) // length present
+ {
+ len = *((unsigned int *)ptr);
+ len = ntohl(len);
+ if (size < 4 + 4 + 4 + len)
+ return (ERR_STRUCT_INCOMPLETE);
+ if (mipng_crc(ptr, len))
+ return (ERR_STRUCT_CRC);
+ // printf("found chunk len %d type %c%c%c%c\n", len, *(ptr+4), *(ptr+5), *(ptr+6), *(ptr+7));
+ if (mipng_is_type(ptr, "IHDR"))
+ {
+ if (*hdr || len != PNG_HDR_SIZE)
+ return (ERR_STRUCT_HDR);
+ *hdr = ptr;
+ }
+ if (mipng_is_type(ptr, "IEND"))
+ {
+ if (len != 0 || size != 4+4+4)
+ return (ERR_STRUCT_END);
+ end = 1;
+ }
+ if (mipng_is_type(ptr, "IDAT"))
+ {
+ if (dat_state == 0)
+ {
+ dat_state = 1;
+ *dat = ptr;
+ }
+ if (dat_state == 2)
+ return (ERR_STRUCT_DAT);
+ }
+ else
+ if (dat_state == 1)
+ dat_state = 2;
+ size -= 4+4+4+len;
+ ptr += 4+4+4+len;
+ }
+ else
+ return (ERR_STRUCT_INCOMPLETE);
+ }
+ if (*hdr == 0 || *dat == 0 || end == 0)
+ return (ERR_STRUCT_MISSCHK);
+ return (0);
+}
+
+
+int mipng_verif_hdr(unsigned char *hdr, png_info_t *pi)
+{
+ unsigned int compress;
+ unsigned int filter;
+
+ hdr += 8;
+ pi->width = ntohl(*((unsigned long *)hdr));
+ pi->height = ntohl(*((unsigned long *)(hdr+4)));
+ pi->depth = *(hdr+8);
+ pi->color = *(hdr+9);
+ compress = *(hdr+10);
+ filter = *(hdr+11);
+ pi->interlace = *(hdr+12);
+ if (pi->width <= 0 || pi->height <= 0 || (pi->depth != 8 && pi->depth != 16)
+ || (pi->color != 2 && pi->color != 6) || compress != 0 || filter != 0 || pi->interlace != 0)
+ return (ERR_STRUCT_INCIMPL);
+ pi->bpp = pi->depth / 8;
+ if (pi->color == 2)
+ pi->bpp *= 3;
+ if (pi->color == 6)
+ pi->bpp *= 4;
+ // printf("hdr info : %d x %d, depth %d, col type %d, comp %d, filter %d, interlace %d\nbpp is %d\n",
+ // pi->width, pi->height, pi->depth, pi->color, compress, filter, pi->interlace, pi->bpp);
+ return (0);
+}
+
+
+void *mlx_int_parse_png(void *xvar, unsigned char *fptr, int size, int *width, int *height)
+{
+ int err;
+ unsigned char *hdr;
+ unsigned char *dat;
+ png_info_t pi;
+ void *img;
+
+ if ((err = mipng_magic(fptr, size)))
+ {
+ warnx("mlx PNG error : %s", mipng_err[err]);
+ return ((void *)0);
+ }
+ fptr += PNG_MAGIC_SIZE;
+ size -= PNG_MAGIC_SIZE;
+ if ((err = mipng_structure(fptr, size, &hdr, &dat)))
+ {
+ warnx("mlx PNG error : %s", mipng_err[err]);
+ return ((void *)0);
+ }
+ if ((err = mipng_verif_hdr(hdr, &pi)))
+ {
+ warnx("mlx PNG error : %s", mipng_err[err]);
+ return ((void *)0);
+ }
+ if (!(img = mlx_new_image(xvar, pi.width, pi.height)))
+ {
+ warnx("mlx PNG error : Can't create mlx image");
+ return ((void *)0);
+ }
+ *width = pi.width;
+ *height = pi.height;
+ if ((err = mipng_data(img, dat, &pi)))
+ {
+ mlx_destroy_image(xvar, img);
+ warnx("mlx PNG error : %s", mipng_err[err]);
+ return ((void *)0);
+ }
+ return (img);
+}
+
+
+
+
+void *mlx_png_file_to_image(void *xvar, char *file, int *width, int *height)
+{
+ int fd;
+ int size;
+ unsigned char *ptr;
+ void *img;
+
+ if ((fd = open(file, O_RDONLY)) == -1 || (size = lseek(fd, 0, SEEK_END)) == -1 ||
+ (ptr = mmap(0, size, PROT_READ, MAP_PRIVATE, fd, 0)) == (void *)MAP_FAILED)
+ {
+ if (fd >= 0)
+ close(fd);
+ warnx("Can't map png file '%s'", file);
+ return ((void *)0);
+ }
+ if (!(img = mlx_int_parse_png(xvar, ptr, size, width, height)))
+ {
+ *width = 0;
+ *height = 0;
+ }
+ munmap(ptr,size);
+ close(fd);
+ return (img);
+}
diff --git a/libs/minilibx-linux-master/mlx_rgb.c b/libs/minilibx_mms_20200219/mlx_rgb.c
similarity index 99%
rename from libs/minilibx-linux-master/mlx_rgb.c
rename to libs/minilibx_mms_20200219/mlx_rgb.c
index 0cfccf6..3f98717 100644
--- a/libs/minilibx-linux-master/mlx_rgb.c
+++ b/libs/minilibx_mms_20200219/mlx_rgb.c
@@ -3,7 +3,6 @@
** the XFree86 distribution.
*/
-#include "mlx_int.h"
struct s_col_name mlx_col_name[] =
{
diff --git a/libs/minilibx_mms_20200219/mlx_string_put.c b/libs/minilibx_mms_20200219/mlx_string_put.c
new file mode 100644
index 0000000..435493c
--- /dev/null
+++ b/libs/minilibx_mms_20200219/mlx_string_put.c
@@ -0,0 +1,72 @@
+
+#include "mlx.h"
+
+#include "font.c"
+
+#define ATLAS_NB_CHAR 95
+
+#define FONT_WIDTH ((font_atlas.width/(ATLAS_NB_CHAR))-2)
+
+
+int mlx_put_image_to_window_scale(void *mlx_ptr, void *win_ptr, void *img_ptr, int sx, int sy, int sw, int sh, int dx, int dy, int dw, int dh, unsigned int color);
+
+void mlx_int_fill(unsigned char *data, int sl)
+{
+ int i, j;
+ j = 0;
+ while (j < font_atlas.height)
+ {
+ i = 0;
+ while (i < font_atlas.width)
+ {
+ data[j*sl+i*4] = font_atlas.pixel_data[j*font_atlas.width*font_atlas.bytes_per_pixel+i*4+2];
+ data[j*sl+i*4+1] = font_atlas.pixel_data[j*font_atlas.width*font_atlas.bytes_per_pixel+i*4+1];
+ data[j*sl+i*4+2] = font_atlas.pixel_data[j*font_atlas.width*font_atlas.bytes_per_pixel+i*4];
+ data[j*sl+i*4+3] = 0xFF - font_atlas.pixel_data[j*font_atlas.width*font_atlas.bytes_per_pixel+i*4+3];
+ i ++;
+ }
+ j ++;
+ }
+
+}
+
+int mlx_string_put(void *mlx_ptr, void *win_ptr, int x, int y, int color, char *string)
+{
+ static void *font = (void *)0;
+ static unsigned char *data = (void *)0;
+ static int size_line = 0;
+ int bpp;
+ int endian;
+ int pos;
+ int val;
+ int dest_w;
+ int dest_h;
+
+ if (font == (void *)0)
+ {
+ font = mlx_new_image(mlx_ptr, font_atlas.width, font_atlas.height);
+ data = (unsigned char *)mlx_get_data_addr(font, &bpp, &size_line, &endian);
+ mlx_int_fill(data, size_line);
+ }
+
+ color = (color&0xFFFFFF)|0xFF000000;
+
+ // dest_w = (FONT_WIDTH*5)/7; /// ratio with X11 standard mlx_string_put
+ // dest_h = (font_atlas.height*5)/7;
+ dest_w = FONT_WIDTH;
+ dest_h = font_atlas.height;
+ y = y - (dest_h*3)/4;
+
+ pos = 0;
+ while (*string)
+ {
+ if (*string >= 32 && *string <= 127)
+ val = *string - 32;
+ else
+ val = 31;
+ mlx_put_image_to_window_scale(mlx_ptr, win_ptr, font, val*(FONT_WIDTH+2), 0, FONT_WIDTH, font_atlas.height, x+pos*dest_w, y, dest_w, dest_h, color);
+ pos ++;
+ string ++;
+ }
+ return (0);
+}
diff --git a/libs/minilibx_mms_20200219/mlx_window.swift b/libs/minilibx_mms_20200219/mlx_window.swift
new file mode 100644
index 0000000..0b578d8
--- /dev/null
+++ b/libs/minilibx_mms_20200219/mlx_window.swift
@@ -0,0 +1,541 @@
+
+import Cocoa
+import Metal
+import MetalKit
+import Darwin
+
+import mlx_image
+
+
+class WinEvent: NSWindow
+{
+ var eventFuncts = [UnsafeMutableRawPointer?]()
+ var eventParams = [UnsafeMutableRawPointer]()
+
+ var keyrepeat = 1
+ var keyflag:UInt32 = 0
+
+ var size_y:Int
+
+ init(frame rect:CGRect)
+ {
+ for _ in 0...31
+ {
+ eventFuncts.append(Optional.none)
+ eventParams.append(UnsafeMutableRawPointer(&keyrepeat)) /// dummy address here, null not needed
+ }
+
+ let wsm = NSWindow.StyleMask(rawValue: NSWindow.StyleMask.titled.rawValue|NSWindow.StyleMask.closable.rawValue|NSWindow.StyleMask.miniaturizable.rawValue)
+ let bck = NSWindow.BackingStoreType.buffered
+ size_y = Int(rect.size.height)
+ super.init(contentRect: rect, styleMask: wsm, backing: bck, defer: false)
+ }
+
+ func setNotifs()
+ {
+ NotificationCenter.default.addObserver(self, selector: #selector(exposeNotification(_:)), name: NSWindow.didBecomeKeyNotification, object: nil)
+ NotificationCenter.default.addObserver(self, selector: #selector(deminiaturizeNotification(_:)), name: NSWindow.didDeminiaturizeNotification, object: nil)
+ NotificationCenter.default.addObserver(self, selector: #selector(closeNotification(_:)), name: NSWindow.willCloseNotification, object: nil)
+
+/***
+ [[NSNotificationCenter defaultCenter] addObserver:win selector:@selector(exposeNotification:) name:@"NSWindowDidBecomeKeyNotification" object:win];
+ [[NSNotificationCenter defaultCenter] addObserver:win selector:@selector(deminiaturizeNotification:) name:@"NSWindowDidDeminiaturizeNotification" object:win];
+ [[NSNotificationCenter defaultCenter] addObserver:win selector:@selector(closeNotification:) name:@"NSWindowWillCloseNotification" object:win];
+***/
+
+ }
+
+ func delNotifs()
+ {
+ NotificationCenter.default.removeObserver(self, name: NSWindow.willCloseNotification, object: nil)
+ }
+
+ public func setKeyRepeat(_ mode:Int)
+ {
+ keyrepeat = mode;
+ }
+
+
+ func addHook(index idx:Int, fct fptr:UnsafeMutableRawPointer?, param pptr:UnsafeMutableRawPointer)
+ {
+ eventFuncts[idx] = fptr;
+ eventParams[idx] = pptr;
+ if (idx == 6 || idx == 32)
+ {
+ if (fptr != nil) /// == nullptr)
+ { self.acceptsMouseMovedEvents = true }
+ else { self.acceptsMouseMovedEvents = false }
+ }
+ }
+
+
+ override func keyDown(with event: NSEvent)
+ {
+ /// print("got keydown with code: \(event.keyCode) ")
+ if (event.isARepeat && keyrepeat == 0)
+ { return }
+ if (eventFuncts[2] != nil)
+ {
+ _ = unsafeBitCast(eventFuncts[2],to:(@convention(c)(Int32, UnsafeRawPointer)->Int32).self)(Int32(event.keyCode), eventParams[2])
+ }
+ }
+
+
+ override func keyUp(with event: NSEvent)
+ {
+ /// print("got keyup with code: \(event.keyCode) and calling key hook")
+ if (event.isARepeat && keyrepeat == 0)
+ { return }
+ if (eventFuncts[3] != nil)
+ {
+ _ = unsafeBitCast(eventFuncts[3],to:(@convention(c)(Int32, UnsafeRawPointer)->Int32).self)(Int32(event.keyCode), eventParams[3])
+ }
+ }
+
+
+ func get_mouse_button(with ev:NSEvent) -> Int
+ {
+ switch (ev.type) {
+ case NSEvent.EventType.leftMouseDown,
+ NSEvent.EventType.leftMouseUp,
+ NSEvent.EventType.leftMouseDragged:
+ return 1;
+ case NSEvent.EventType.rightMouseDown,
+ NSEvent.EventType.rightMouseUp,
+ NSEvent.EventType.rightMouseDragged:
+ return 2;
+ case NSEvent.EventType.otherMouseDown,
+ NSEvent.EventType.otherMouseUp,
+ NSEvent.EventType.otherMouseDragged:
+ return 3;
+ default:
+ return 0;
+ }
+ }
+
+
+
+ func mouse(with event: NSEvent, index idx:Int, type t:Int)
+ {
+ var thepoint:NSPoint
+ var button:Int
+
+ thepoint = event.locationInWindow
+ button = get_mouse_button(with:event)
+ /// button = event.buttonNumber
+ /// print(" mouse down button \(event.buttonNumber) at location \(thepoint.x) x \(thepoint.y)")
+ if (eventFuncts[idx] != nil)
+ {
+ if (t == 0)
+ { _ = unsafeBitCast(eventFuncts[idx],to:(@convention(c)(Int32, Int32, Int32, UnsafeRawPointer)->Int32).self)(Int32(button), Int32(thepoint.x), Int32(size_y-1-Int(thepoint.y)), eventParams[idx]) }
+ if (t == 1)
+ { _ = unsafeBitCast(eventFuncts[idx],to:(@convention(c)(Int32, Int32, UnsafeRawPointer)->Int32).self)(Int32(thepoint.x), Int32(size_y-1-Int(thepoint.y)), eventParams[idx]) }
+ }
+ }
+
+ override func mouseDown(with event: NSEvent) { mouse(with:event, index:4, type:0) }
+ override func rightMouseDown(with event: NSEvent) { mouse(with:event, index:4, type:0) }
+ override func otherMouseDown(with event: NSEvent) { mouse(with:event, index:4, type:0) }
+
+ override func mouseUp(with event: NSEvent) { mouse(with:event, index:5, type:0) }
+ override func rightMouseUp(with event: NSEvent) { mouse(with:event, index:5, type:0) }
+ override func otherMouseUp(with event: NSEvent) { mouse(with:event, index:5, type:0) }
+
+ override func mouseMoved(with event: NSEvent) { mouse(with:event, index:6, type:1) }
+ override func mouseDragged(with event: NSEvent) { mouse(with:event, index:6, type:1) }
+ override func rightMouseDragged(with event: NSEvent) { mouse(with:event, index:6, type:1) }
+ override func otherMouseDragged(with event: NSEvent) { mouse(with:event, index:6, type:1) }
+
+
+ override func scrollWheel(with event: NSEvent)
+ {
+ var thepoint:NSPoint
+ var button = 0;
+
+ thepoint = event.locationInWindow
+ if (event.deltaY > 0.2) { button = 4; }
+ if (event.deltaY < -0.2) { button = 5; }
+ if (event.deltaX > 0.2) { button = 6; }
+ if (event.deltaX < -0.2) { button = 7; }
+ if (button != 0 && eventFuncts[4] != nil)
+ {
+ _ = unsafeBitCast(eventFuncts[4],to:(@convention(c)(Int32, Int32, Int32, UnsafeRawPointer)->Int32).self)(Int32(button), Int32(thepoint.x), Int32(thepoint.y), eventParams[4])
+ }
+ }
+
+
+ override func flagsChanged(with event: NSEvent)
+ {
+ var flag:UInt32
+ var the_key:Int32
+ var val:UInt32
+
+ flag = UInt32(event.modifierFlags.rawValue)
+ val = (keyflag|flag)&(~(keyflag&flag))
+ if (val == 0)
+ { return } /// no change - can happen when loosing focus on special key pressed, then re-pressed later
+ the_key = 1
+ while (((val >> (the_key-1)) & 0x01)==0)
+ { the_key += 1 }
+ if (flag > keyflag && eventFuncts[2] != nil)
+ { _ = unsafeBitCast(eventFuncts[2],to:(@convention(c)(Int32, UnsafeRawPointer)->Int32).self)(0xFF+the_key, eventParams[2]) }
+ if (flag < keyflag && eventFuncts[3] != nil)
+ { _ = unsafeBitCast(eventFuncts[3],to:(@convention(c)(Int32, UnsafeRawPointer)->Int32).self)(0xFF+the_key, eventParams[3]) }
+ keyflag = flag
+ }
+
+
+ @objc func exposeNotification(_ notification:Notification)
+ {
+ if (eventFuncts[12] != nil)
+ {
+ _ = unsafeBitCast(eventFuncts[12],to:(@convention(c)(UnsafeRawPointer)->Int32).self)(eventParams[12])
+ }
+ }
+
+ @objc func closeNotification(_ notification:Notification)
+ {
+ if (eventFuncts[17] != nil)
+ {
+ _ = unsafeBitCast(eventFuncts[17],to:(@convention(c)(UnsafeRawPointer)->Int32).self)(eventParams[17])
+ }
+ }
+
+ @objc func deminiaturizeNotification(_ notification:Notification)
+ {
+ exposeNotification(notification)
+ }
+
+}
+
+
+
+
+
+struct textureList
+{
+ var uniformBuffer: MTLBuffer!
+ var uniform_data:UnsafeMutablePointer
+ unowned var image:MlxImg
+}
+
+
+public class MlxWin
+{
+ let vrect: CGRect
+ var winE: WinEvent
+ var mlayer: CAMetalLayer
+
+ unowned var device: MTLDevice
+ var commandQueue: MTLCommandQueue!
+ var pipelineState: MTLRenderPipelineState!
+ var vertexBuffer: MTLBuffer!
+
+ var texture_list: Array = Array()
+ var texture_list_count = 0
+
+ var pixel_image:MlxImg
+ var pixel_count:Int
+
+ var drawable_image: MlxImg
+ var uniq_renderPassDescriptor: MTLRenderPassDescriptor
+ var mtl_origin_null : MTLOrigin
+ var mtl_size_all : MTLSize
+ var doClear = false
+ var GPUbatch = 0
+
+
+ public init(device d:MTLDevice, width w:Int, height h:Int, title t:String)
+ {
+ vrect = CGRect(x: 100, y: 100, width: w, height: h)
+ winE = WinEvent(frame: vrect)
+
+ device = d
+ mlayer = CAMetalLayer()
+ mlayer.device = device
+ mlayer.pixelFormat = .bgra8Unorm
+ mlayer.framebufferOnly = true
+ mlayer.contentsScale = 1.0 /// winE.screen!.backingScaleFactor
+ mlayer.frame = vrect
+ winE.contentView! = NSView(frame: vrect)
+ winE.contentView!.wantsLayer = true
+ winE.contentView!.layer = mlayer
+ winE.title = t
+ winE.isReleasedWhenClosed = false
+ winE.makeKeyAndOrderFront(nil)
+
+
+ /// drawable_image = MlxImg(d: device, w:Int(CGFloat(vrect.size.width)*winE.screen!.backingScaleFactor), h:Int(CGFloat(vrect.size.height)*winE.screen!.backingScaleFactor), t:1)
+ drawable_image = MlxImg(d: device, w:Int(vrect.size.width), h:Int(vrect.size.height), t:1)
+ pixel_image = MlxImg(d: device, w:Int(vrect.size.width), h:Int(vrect.size.height))
+ for i in 0...(pixel_image.texture_height*pixel_image.texture_sizeline/4-1)
+ { pixel_image.texture_data[i] = UInt32(0xFF000000) }
+ pixel_count = 0
+
+ mtl_origin_null = MTLOriginMake(0,0,0)
+ mtl_size_all = MTLSizeMake(drawable_image.texture.width, drawable_image.texture.height, 1)
+
+ uniq_renderPassDescriptor = MTLRenderPassDescriptor()
+ uniq_renderPassDescriptor.colorAttachments[0].clearColor = MTLClearColor(red: 0.0, green: 0.0, blue: 0.0, alpha:0.0)
+ uniq_renderPassDescriptor.colorAttachments[0].texture = drawable_image.texture
+ uniq_renderPassDescriptor.colorAttachments[0].storeAction = .store
+ uniq_renderPassDescriptor.colorAttachments[0].loadAction = .load
+ }
+
+
+/// winEvent calls
+ public func getWinEFrame() -> NSRect { return winE.frame }
+ public func getScreenFrame() -> NSRect { return winE.screen!.frame }
+ public func getMouseLoc() -> NSPoint { return winE.mouseLocationOutsideOfEventStream }
+ public func addHook(index idx:Int, fct fptr:UnsafeMutableRawPointer, param pptr:UnsafeMutableRawPointer)
+ { winE.addHook(index: idx, fct: fptr, param: pptr) }
+ public func setKeyRepeat(_ mode:Int) { winE.setKeyRepeat(mode) }
+ public func destroyWinE() { winE.close() }
+ public func setNotifs() { winE.setNotifs() }
+ public func delNotifs() { winE.delNotifs() }
+
+
+ public func initMetal()
+ {
+ commandQueue = device.makeCommandQueue()!
+
+ /// vertex buffer & shaders stay the always the same.
+ let lib = try! device.makeLibrary(source: shaders, options: nil)
+ let vertexFunction = lib.makeFunction(name: "basic_vertex_function")
+ let fragmentFunction = lib.makeFunction(name: "basic_fragment_function")
+ let pipelineDesc = MTLRenderPipelineDescriptor()
+ pipelineDesc.colorAttachments[0].pixelFormat = .bgra8Unorm
+ pipelineDesc.colorAttachments[0].isBlendingEnabled = true
+ pipelineDesc.colorAttachments[0].rgbBlendOperation = .add
+ pipelineDesc.colorAttachments[0].alphaBlendOperation = .add
+ pipelineDesc.colorAttachments[0].sourceRGBBlendFactor = .oneMinusSourceAlpha
+ pipelineDesc.colorAttachments[0].sourceAlphaBlendFactor = .oneMinusSourceAlpha
+ pipelineDesc.colorAttachments[0].destinationRGBBlendFactor = .sourceAlpha
+ pipelineDesc.colorAttachments[0].destinationAlphaBlendFactor = .sourceAlpha
+ pipelineDesc.vertexFunction = vertexFunction
+ pipelineDesc.fragmentFunction = fragmentFunction
+ pipelineState = try! device.makeRenderPipelineState(descriptor: pipelineDesc)
+
+ let vertexData: [Float] = [
+ -1.0, -1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0,
+ -1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0,
+ 1.0, -1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0,
+ 1.0, -1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0,
+ -1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0,
+ 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0 ]
+ var dataSize = vertexData.count * MemoryLayout.size(ofValue: vertexData[0])
+ vertexBuffer = device.makeBuffer(bytes: vertexData, length: dataSize, options: [])
+
+ let uniformData: [Float] = [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Float(vrect.size.width), Float(vrect.size.height), 0.0, 0.0, 0.0, 0.0,
+ 1.0, 1.0, 1.0, 1.0 ]
+ dataSize = uniformData.count * MemoryLayout.size(ofValue: uniformData[0])
+ for _ in 0...255
+ {
+ let uniformBuffer = device.makeBuffer(bytes: uniformData, length: dataSize, options: [])!
+ let uniform_data = (uniformBuffer.contents()).assumingMemoryBound(to:Float.self)
+ texture_list.append(textureList(uniformBuffer:uniformBuffer, uniform_data:uniform_data, image:pixel_image))
+ }
+
+ self.clearWin();
+ }
+
+
+ public func clearWin()
+ {
+ /// discard previous put_images, doClear become first operation in next render pass.
+ var i = 0
+ while i < texture_list_count
+ {
+ texture_list[i].image.onGPU -= 1
+ i += 1
+ }
+ texture_list_count = 0
+ doClear = true
+ /// next flush images should call draw(), even if there is no image to put
+ }
+
+ func flushPixels()
+ {
+ if (pixel_count > 0)
+ {
+ pixel_count = 0
+ self.putImage(image:pixel_image, x:0, y:0)
+ }
+ }
+
+ public func flushImages()
+ {
+ flushPixels()
+ if (texture_list_count > 0 || doClear)
+ {
+ self.draw()
+ }
+ }
+
+ public func waitForGPU()
+ {
+ while (GPUbatch > 0) { }
+ }
+
+
+ public func pixelPut(_ x:Int32, _ y:Int32, _ color:UInt32)
+ {
+ if (pixel_count == 0)
+ {
+ while (pixel_image.onGPU > 0)
+ {
+ if (GPUbatch > 0) { waitForGPU() }
+ else { flushImages() }
+ }
+ for i in 0...pixel_image.texture_height*pixel_image.texture_sizeline/4-1
+ { pixel_image.texture_data[i] = UInt32(0xFF000000) }
+ }
+ let t = (x&(Int32(vrect.size.width-1)-x))&(y&(Int32(vrect.size.height-1)-y))
+ if t >= 0
+ {
+ pixel_image.texture_data[Int(y)*pixel_image.texture_sizeline/4+Int(x)] = color
+ pixel_count += 1
+ }
+ }
+
+ public func putImage(image img:MlxImg, x posx:Int32, y posy:Int32)
+ {
+ flushPixels()
+ putImageScale(image:img, sx:0, sy:0, sw:Int32(img.texture_width), sh:Int32(img.texture_height),
+ dx:posx, dy:posy, dw:Int32(img.texture_width), dh:Int32(img.texture_height),
+ c:UInt32(0xFFFFFFFF))
+ }
+
+ public func putImageScale(image img:MlxImg, sx src_x:Int32, sy src_y:Int32, sw src_w:Int32, sh src_h:Int32, dx dest_x:Int32, dy dest_y:Int32, dw dest_w:Int32, dh dest_h:Int32, c color:UInt32)
+ {
+ flushPixels()
+ if (texture_list_count == 0) /// means I just draw
+ {
+ waitForGPU() /// to be able to write again in uniforms
+ }
+ texture_list[texture_list_count].uniform_data[0] = Float(img.texture_width)
+ texture_list[texture_list_count].uniform_data[1] = Float(img.texture_height)
+ texture_list[texture_list_count].uniform_data[2] = Float(src_x)
+ texture_list[texture_list_count].uniform_data[3] = Float(src_y)
+ texture_list[texture_list_count].uniform_data[4] = Float(src_w)
+ texture_list[texture_list_count].uniform_data[5] = Float(src_h)
+
+ texture_list[texture_list_count].uniform_data[8] = Float(dest_x)
+ texture_list[texture_list_count].uniform_data[9] = Float(dest_y)
+ texture_list[texture_list_count].uniform_data[10] = Float(dest_w)
+ texture_list[texture_list_count].uniform_data[11] = Float(dest_h)
+
+ texture_list[texture_list_count].uniform_data[12] = Float((color>>16)&0xFF)/255.0;
+ texture_list[texture_list_count].uniform_data[13] = Float((color>>8)&0xFF)/255.0;
+ texture_list[texture_list_count].uniform_data[14] = Float((color>>0)&0xFF)/255.0;
+ texture_list[texture_list_count].uniform_data[15] = Float((color>>24)&0xFF)/255.0;
+
+ texture_list[texture_list_count].image = img
+ img.onGPU += 1
+
+ texture_list_count += 1
+ if (texture_list_count == 255) /// keep 1 slot for put_pixels image
+ {
+ flushImages()
+ }
+ }
+
+
+ func draw()
+ {
+ var commandBuffer = commandQueue.makeCommandBuffer()!
+
+/// clear if asked
+ if (doClear)
+ {
+ uniq_renderPassDescriptor.colorAttachments[0].loadAction = .clear
+ let commandEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: uniq_renderPassDescriptor)!
+ commandEncoder.endEncoding()
+ uniq_renderPassDescriptor.colorAttachments[0].loadAction = .load
+ doClear = false
+ }
+
+/// then draw the images if any.
+ var i = 0
+ while i < texture_list_count
+ {
+ let commandEncoder = commandBuffer.makeRenderCommandEncoder(descriptor: uniq_renderPassDescriptor)!
+ commandEncoder.setRenderPipelineState(pipelineState)
+ commandEncoder.setVertexBuffer(vertexBuffer, offset: 0, index: 0)
+ commandEncoder.setVertexBuffer(texture_list[i].uniformBuffer, offset: 0, index: 1)
+ commandEncoder.setFragmentTexture(texture_list[i].image.texture, index: 0)
+ commandEncoder.drawPrimitives(type: .triangleStrip, vertexStart: 0, vertexCount: 6, instanceCount:2)
+ commandEncoder.endEncoding()
+ ({ j in
+ commandBuffer.addCompletedHandler { cb in self.texture_list[j].image.onGPU -= 1 }
+ })(i)
+ i += 1
+ }
+ texture_list_count = 0
+ commandBuffer.addCompletedHandler { cb in self.GPUbatch -= 1 }
+ commandBuffer.commit()
+ GPUbatch += 1
+
+/// finally copy to MTLdrawable to present, using a new commandqueue
+ commandBuffer = commandQueue.makeCommandBuffer()!
+ let curdraw = mlayer.nextDrawable()!
+
+ let commandBEncoder = commandBuffer.makeBlitCommandEncoder()!
+ commandBEncoder.copy(from:drawable_image.texture, sourceSlice:0, sourceLevel:0, sourceOrigin: mtl_origin_null, sourceSize: mtl_size_all, to:curdraw.texture, destinationSlice:0, destinationLevel:0, destinationOrigin: mtl_origin_null)
+ commandBEncoder.endEncoding()
+
+ commandBuffer.addCompletedHandler { cb in self.GPUbatch -= 1 }
+ commandBuffer.present(curdraw)
+ commandBuffer.commit()
+ GPUbatch += 1
+ }
+
+
+}
+
+
+
+
+let shaders = """
+#include
+using namespace metal;
+
+struct VertexIn {
+ float4 position;
+ float4 UV;
+};
+struct VertexOut {
+ float4 position [[ position ]];
+ float4 color;
+ float2 UV;
+};
+struct uniforms {
+ packed_float2 origin_size;
+ packed_float2 origin_pos;
+ packed_float2 origin_sub;
+ packed_float2 dest_size;
+ packed_float2 dest_pos;
+ packed_float2 dest_sub;
+ packed_float4 color;
+};
+vertex VertexOut basic_vertex_function(const device VertexIn *vertices [[ buffer(0) ]], constant uniforms& uni [[ buffer(1) ]],
+uint vertexID [[ vertex_id ]])
+{
+ VertexOut vOut;
+ float4 start = float4((2.0*uni.dest_pos.x)/(uni.dest_size.x-1.0) - 1.0, 1.0 - (2.0*uni.dest_pos.y)/(uni.dest_size.y-1.0) - (uni.dest_sub.y*2.0)/uni.dest_size.y, 0.0, 0.0);
+ /* vOut.position = (start + (vertices[vertexID].position + 1.0) * float4(uni.dest_sub, 0.0, 0.0))/float4(uni.dest_size, 1.0, 1.0); */
+
+ vOut.position = float4(start.x+((vertices[vertexID].position.x + 1.0)*uni.dest_sub.x)/(uni.dest_size.x),
+ start.y+((vertices[vertexID].position.y + 1.0)*uni.dest_sub.y)/(uni.dest_size.y), 0.0, 1.0);
+
+ vOut.UV = (uni.origin_pos + float2(vertices[vertexID].UV.x, vertices[vertexID].UV.y)*(uni.origin_sub-1.0))/(uni.origin_size-1.0);
+ vOut.color = uni.color;
+ return vOut;
+}
+fragment float4 basic_fragment_function(VertexOut vIn [[ stage_in ]], texture2d texture [[ texture(0) ]])
+{
+ constexpr sampler textureSampler(address::clamp_to_edge);
+ return vIn.color*texture.sample(textureSampler, vIn.UV);
+}
+"""
+
diff --git a/libs/minilibx_mms_20200219/mlx_xpm.c b/libs/minilibx_mms_20200219/mlx_xpm.c
new file mode 100644
index 0000000..25fdafe
--- /dev/null
+++ b/libs/minilibx_mms_20200219/mlx_xpm.c
@@ -0,0 +1,384 @@
+// mlx xpm
+// by ol
+
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "mlx.h"
+
+typedef struct s_xpm_col
+{
+ int name;
+ int col;
+} t_xpm_col;
+
+
+struct s_col_name
+{
+ char *name;
+ int color;
+};
+
+//extern struct s_col_name mlx_col_name[];
+#include "mlx_rgb.c"
+
+
+#define RETURN { if (colors) free(colors); if (tab) free(tab); \
+ if (colors_direct) free(colors_direct); \
+ if (img) mlx_destroy_image(xvar, img); \
+ return ((void *)0); }
+
+
+
+
+//
+// str 2 wordtab & co
+
+int mlx_int_str_str(char *str,char *find,int len)
+{
+ int len_f;
+ int pos;
+ char *s;
+ char *f;
+
+ len_f = strlen(find);
+ if (len_f>len)
+ return (-1);
+ pos = 0;
+ while (*(str+len_f-1))
+ {
+ s = str;
+ f = find;
+ while (*(f++) == *(s++))
+ if (!*f)
+ return (pos);
+ str ++;
+ pos ++;
+ }
+ return (-1);
+}
+
+
+
+int mlx_int_str_str_cote(char *str,char *find,int len)
+{
+ int len_f;
+ int pos;
+ char *s;
+ char *f;
+ int cote;
+
+ len_f = strlen(find);
+ if (len_f>len)
+ return (-1);
+ cote = 0;
+ pos = 0;
+ while (*(str+len_f-1))
+ {
+ if (*str=='"')
+ cote = 1-cote;
+ if (!cote)
+ {
+ s = str;
+ f = find;
+ while (*(f++) == *(s++))
+ if (!*f)
+ return (pos);
+ }
+ str ++;
+ pos ++;
+ }
+ return (-1);
+}
+
+
+char **mlx_int_str_to_wordtab(char *str)
+{
+ char **tab;
+ int pos;
+ int nb_word;
+ int len;
+
+ len = strlen(str);
+ nb_word = 0;
+ pos = 0;
+ while (poslen)
+ {
+ if (copy)
+ free(copy);
+ if (!(copy = malloc(len2+1)))
+ return ((char *)0);
+ len = len2;
+ }
+ /* strcpy(copy,str); */
+ strlcpy(copy, str, len2+1);
+ return (copy);
+}
+
+
+int mlx_int_get_col_name(char *str,int size)
+{
+ int result;
+
+ result = 0;
+ while (size--)
+ result = (result<<8)+*(str++);
+ return (result);
+}
+
+int mlx_int_get_text_rgb(char *name, char *end)
+{
+ int i;
+ char buff[64];
+
+ if (*name == '#')
+ return (strtol(name+1,0,16));
+ if (end)
+ {
+ snprintf(buff, 64, "%s %s", name, end);
+ name = buff;
+ }
+ i = 0;
+ while (mlx_col_name[i].name)
+ {
+ if (!strcasecmp(mlx_col_name[i].name, name))
+ return (mlx_col_name[i].color);
+ i ++;
+ }
+ return (0);
+}
+
+
+void mlx_int_xpm_set_pixel(char *data, int opp, int col, int x)
+{
+ *((unsigned int *)(data+4*x)) = col;
+}
+
+
+void *mlx_int_parse_xpm(void *xvar,void *info,int info_size,char *(*f)(), int *width, int *height)
+{
+ int pos;
+ char *line;
+ char **tab;
+ char *data;
+ char *clip_data;
+ int nc;
+ int opp;
+ int sl;
+ int endian;
+ int cpp;
+ int col;
+ int rgb_col;
+ int col_name;
+ int method;
+ int x;
+ int i;
+ int j;
+ void *img;
+ t_xpm_col *colors;
+ int *colors_direct;
+
+ colors = 0;
+ colors_direct = 0;
+ img = 0;
+ tab = 0;
+ pos = 0;
+ if (!(line = f(info,&pos,info_size)) ||
+ !(tab = mlx_int_str_to_wordtab(line)) || !(*width = atoi(tab[0])) ||
+ !(*height = atoi(tab[1])) || !(nc = atoi(tab[2])) ||
+ !(cpp = atoi(tab[3])) )
+ RETURN;
+ free(tab);
+ tab = 0;
+
+ method = 0;
+ if (cpp<=2)
+ {
+ method = 1;
+ if (!(colors_direct = malloc((cpp==2?65536:256)*sizeof(int))))
+ RETURN;
+ }
+ else
+ if (!(colors = malloc(nc*sizeof(*colors))))
+ RETURN;
+
+ clip_data = 0;
+
+ i = nc;
+ while (i--)
+ {
+ if (!(line = f(info,&pos,info_size)) ||
+ !(tab = mlx_int_str_to_wordtab(line+cpp)) )
+ RETURN;
+ j = 0;
+ while (tab[j] && strcmp(tab[j++],"c"));
+
+ if (!tab[j])
+ RETURN;
+
+ rgb_col = mlx_int_get_text_rgb(tab[j], tab[j+1]);
+ if (method)
+ colors_direct[mlx_int_get_col_name(line,cpp)] = rgb_col;
+ else
+ {
+ colors[i].name = mlx_int_get_col_name(line,cpp);
+ colors[i].col = rgb_col;
+ }
+ free(tab);
+ tab = 0;
+ }
+
+ if (!(img = mlx_new_image(xvar,*width,*height)))
+ RETURN;
+ data = mlx_get_data_addr(img, &opp, &sl, &endian);
+ opp = 4;
+
+ i = *height;
+ while (i--)
+ {
+ if (!(line = f(info,&pos,info_size)))
+ RETURN;
+ x = 0;
+ while (x<*width)
+ {
+ col = 0;
+ col_name = mlx_int_get_col_name(line+cpp*x,cpp);
+ if (method)
+ col = colors_direct[col_name];
+ else
+ {
+ j = nc;
+ while (j--)
+ if (colors[j].name==col_name)
+ {
+ col = colors[j].col;
+ j = 0;
+ }
+ }
+ if (col==-1)
+ col = 0xFF000000;
+ mlx_int_xpm_set_pixel(data, opp, col, x);
+ x ++;
+ }
+ data += sl; //img->width*4;
+ }
+ if (colors)
+ free(colors);
+ if (colors_direct)
+ free(colors_direct);
+ return (img);
+}
+
+
+void mlx_int_file_get_rid_comment(char *ptr, int size)
+{
+ int com_begin;
+ int com_end;
+
+ while ((com_begin = mlx_int_str_str_cote(ptr,"/*",size))!=-1)
+ {
+ com_end = mlx_int_str_str(ptr+com_begin+2,"*/",size-com_begin-2);
+ memset(ptr+com_begin,' ',com_end+4);
+ }
+ while ((com_begin = mlx_int_str_str_cote(ptr,"//",size))!=-1)
+ {
+ com_end = mlx_int_str_str(ptr+com_begin+2,"\n",size-com_begin-2);
+ memset(ptr+com_begin,' ',com_end+3);
+ }
+}
+
+
+void *mlx_xpm_file_to_image(void *xvar,char *file,int *width,int *height)
+{
+ int fd;
+ int size;
+ char *ptr;
+ void *img;
+
+ if ((fd = open(file,O_RDONLY))==-1 || (size = lseek(fd,0,SEEK_END))==-1 ||
+ (ptr = mmap(0,size,PROT_WRITE|PROT_READ,MAP_PRIVATE,fd,0))==
+ (void *)MAP_FAILED)
+ {
+ if (fd>=0)
+ close(fd);
+ return ((void *)0);
+ }
+ mlx_int_file_get_rid_comment(ptr, size);
+ img = mlx_int_parse_xpm(xvar,ptr,size,mlx_int_get_line, width, height);
+ munmap(ptr,size);
+ close(fd);
+ return (img);
+}
+
+void *mlx_xpm_to_image(void *xvar,char **xpm_data,int *width,int *height)
+{
+ return (mlx_int_parse_xpm(xvar,xpm_data,0,mlx_int_static_line, width, height));
+}
diff --git a/libs/minilibx_mms_20200219_beta.tgz b/libs/minilibx_mms_20200219_beta.tgz
deleted file mode 100644
index 950a43a..0000000
Binary files a/libs/minilibx_mms_20200219_beta.tgz and /dev/null differ
diff --git a/libs/minilibx_opengl.tgz b/libs/minilibx_opengl.tgz
deleted file mode 100644
index 72a387c..0000000
Binary files a/libs/minilibx_opengl.tgz and /dev/null differ
diff --git a/libs/minilibx_opengl_20191021/._font.xcf b/libs/minilibx_opengl_20191021/._font.xcf
new file mode 100644
index 0000000..d31c1a3
Binary files /dev/null and b/libs/minilibx_opengl_20191021/._font.xcf differ
diff --git a/libs/minilibx_opengl_20191021/Makefile b/libs/minilibx_opengl_20191021/Makefile
new file mode 100644
index 0000000..2e44836
--- /dev/null
+++ b/libs/minilibx_opengl_20191021/Makefile
@@ -0,0 +1,24 @@
+#
+#
+
+NOM=libmlx.a
+SRC= mlx_shaders.c mlx_new_window.m mlx_init_loop.m mlx_new_image.m mlx_xpm.c mlx_int_str_to_wordtab.c
+SRC+= mlx_png.c mlx_mouse.m
+OBJ1=$(SRC:.c=.o)
+OBJ=$(OBJ1:.m=.o)
+CFLAGS+=-O2
+
+# add to match string put with X11 in size and position
+CFLAGS+= -DSTRINGPUTX11
+
+all: $(NOM)
+
+$(NOM): $(OBJ)
+ ar -r $(NOM) $(OBJ)
+ ranlib $(NOM)
+
+clean:
+ rm -f $(NOM) $(OBJ) *~
+ rm -f mlx_app
+
+re: clean all
diff --git a/libs/minilibx_opengl_20191021/font.c b/libs/minilibx_opengl_20191021/font.c
new file mode 100644
index 0000000..656d248
--- /dev/null
+++ b/libs/minilibx_opengl_20191021/font.c
@@ -0,0 +1,3525 @@
+/* GIMP RGBA C-Source image dump (font.c) */
+
+static const struct {
+ unsigned int width;
+ unsigned int height;
+ unsigned int bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */
+ unsigned char pixel_data[1140 * 20 * 4 + 1];
+} font_atlas = {
+ 1140, 20, 4,
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\214\377\377\377\224\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377I\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377"
+ ")\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\216\377\377\377\263\377\377\377\13\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377b\377\377\377V\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\215\377\377\377\270\377\377"
+ "\377u\377\377\377\13\377\377\377\252\377\377\377\255\377\377\377\13\0\0\0"
+ "\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\317\377\377\377\374\377\377"
+ "\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377"
+ "\377e\377\377\3775\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\234\377\377\377\267"
+ "\377\377\377B\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\343\377\377"
+ "\377\375\377\377\377M\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
+ "\377\377\13\377\377\377\355\377\377\377\367\377\377\3778\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377j\377\377\377\373\377\377\377\243\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377b\377\377\377\237\377\377\377\233\377\377\377Z\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "b\377\377\377c\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377)\377\377\377e\377\377\377I\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377U\377\377\377"
+ "c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377b\377\377\377c\377\377\377\13\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377S\377\377\377c\377\377\3775\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\213\377"
+ "\377\377\363\377\377\377\364\377\377\377\364\377\377\377\372\377\377\377"
+ "\225\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377u\377\377"
+ "\377\371\377\377\377\233\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\215\377\377\377\372"
+ "\377\377\377\364\377\377\377\364\377\377\377\363\377\377\377\224\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377U\377\377\377e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\377\377\377\13\377\377\377\351\377\377\377\376\377\377\377s\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\214\377\377\377\372\377"
+ "\377\377\\\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\367\377\377\377"
+ "\315\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\3775\377\377\377\340"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\304\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377\214\377\377\377\372\377\377\377\\\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377s\377\377\377\366\377\377\377\342\377\377\377%"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377s\377\377\377\366\377\377\377\342\377\377\377%\0\0\0"
+ "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377"
+ "\372\377\377\377\225\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\306\377\377\377\374\377"
+ "\377\377\370\377\377\377\370\377\377\377\304\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377E\377\377"
+ "\377\317\377\377\377\357\377\377\377\373\377\377\377\225\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\320"
+ "\377\377\377\374\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\215\377\377\377\372\377\377\377\363\377"
+ "\377\377\333\377\377\377m\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\1\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\13\377\377\377\364\377\377\377\366\377\377\377%\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377"
+ "\377\361\377\377\377\377\377\377\377\254\377\377\377=\377\377\377\375\377"
+ "\377\377\372\377\377\377)\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\215\377\377\377\363\377\377\377%\377\377\377"
+ "\224\377\377\377\363\377\377\377%\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\3772\377\377\377\336\377\377\377\375\377"
+ "\377\377x\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377\262\377\377\377\372\377\377\377\370\377\377\377\246\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377=\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\377\377\377~\377\377\377\374\377\377\377\377\377\377"
+ "\377\376\377\377\377\224\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377V\377\377\377\375\377\377\377"
+ "\376\377\377\377l\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\325\377\377\377\377"
+ "\377\377\377\271\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\355\377\377\377\33\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377v\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
+ "\315\377\377\377\367\377\377\377\373\377\377\377\334\377\377\377B\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377`\377\377\377\300\377\377\377\342\377\377\377Z\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\224\377\377"
+ "\377\347\377\377\377\373\377\377\377\364\377\377\377\312\377\377\377)\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377"
+ "\226\377\377\377\346\377\377\377\370\377\377\377\360\377\377\377\327\377"
+ "\377\377b\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\214\377\377\377\343\377\377\377\273"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377"
+ "\377\377\315\377\377\377\337\377\377\377\333\377\377\377\333\377\377\377"
+ "\333\377\377\377\343\377\377\377\223\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\215\377\377\377\346\377\377\377"
+ "\370\377\377\377\364\377\377\377\320\377\377\377O\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\377\377\377\13\377\377\377\315\377\377\377\337\377\377\377"
+ "\333\377\377\377\333\377\377\377\333\377\377\377\333\377\377\377\333\377"
+ "\377\377\323\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0"
+ "\0\377\377\3772\377\377\377\316\377\377\377\366\377\377\377\373\377\377\377"
+ "\344\377\377\377\200\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\377\377\377u\377\377\377\342\377\377\377\370\377\377\377\364"
+ "\377\377\377\305\377\377\377%\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377)\377\377\3775\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\371\371\377.\377\377\377V\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377\13\377\377\377\321\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\271\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377Q\377\377\377"
+ "\273\377\377\377\332\377\377\377\322\377\377\377\206\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\3778\377\377"
+ "\377\367\377\377\377\376\377\377\377s\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\374\377\377\377\360\377\377\377\253\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377"
+ "\13\377\377\377\304\377\377\377\375\377\377\377\377\377\377\377\377\377\377"
+ "\377\373\377\377\377\247\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377\307\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\374\377\377\377\324\377\377\377B\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\346"
+ "\377\377\377\13\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377"
+ "\377\377\352\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\376\377\377\377l\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\377\377\3775\377\377\377\333\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\361\377\377\377\202\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\307\377\377\377\376\377"
+ "\377\377i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\352\377\377\377\364"
+ "\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373\377\377\377"
+ "\377\377\377\377\377\377\377\377\303\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377\13\377\377\377\361\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\225\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377"
+ "\377\377\377\225\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\356\377\377\377"
+ "\376\377\377\377v\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13"
+ "\377\377\377\352\377\377\377\364\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\307\377"
+ "\377\377\377\377\377\377\243\0\0\0\0\0\0\0\0\377\377\377u\377\377\377\375"
+ "\377\377\377\321\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
+ "\377\307\377\377\377\377\377\377\377\251\0\0\0\0\0\0\0\0\377\377\377\13\377"
+ "\377\377\355\377\377\377\330\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\377\377\377\206\377\377\377\366\377\377\377\377\377\377\377"
+ "\377\377\377\377\373\377\377\377\246\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\370\377\377\377\324\377\377\377"
+ "B\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\206"
+ "\377\377\377\370\377\377\377\377\377\377\377\377\377\377\377\373\377\377"
+ "\377\240\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
+ "\377\224\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\364\377\377\377\312\377\377\377\33\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\377\377\377\204\377\377\377\365\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\342\377\377\377V\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\377\377\377\224\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\373\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\252\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\377\377\377\307\377\377\377\376\377\377\377i\0\0\0\0\0\0"
+ "\0\0\377\377\377\13\377\377\377\352\377\377\377\364\377\377\377%\377\377"
+ "\377\377\377\377\377\377\377\377\377}\377\377\377\376\377\377\377\332\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\262\377\377\377\377\377\377\377"
+ "\216\377\377\377\377\377\377\377\377\377\377\377\345\377\377\377\372\377"
+ "\377\377=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355"
+ "\377\377\377\356\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377"
+ "\345\377\377\377\376\377\377\377~\0\0\0\0\0\0\0\0\377\377\3778\377\377\377"
+ "\367\377\377\377\360\377\377\377\33\377\377\377\377\377\377\377\377\377\377"
+ "\377\206\377\377\377\377\377\377\377\332\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\266\377\377\377\377\377\377\377\234\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\361"
+ "\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\224\377\377\377\377\377\377\377\312\377\377\377\255\377\377\377"
+ "\266\377\377\377u\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
+ "\377;\377\377\377\373\377\377\377\347\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377`\377\377"
+ "\377\266\377\377\377\263\377\377\377\256\377\377\377\373\377\377\377\254"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\33\377\377\377\371\377\377\377\376\377\377\377_\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377b\377\377\377\374"
+ "\377\377\377\355\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "\224\377\377\377\376\377\377\377l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377"
+ "\377\377\374\377\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\334\377\377\377\377\377\377\377\346\377\377\377\272\377\377\377"
+ "\342\377\377\377\276\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377"
+ "l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\215\377\377\377\377"
+ "\377\377\377\377\377\377\377l\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\215\377\377\377\377\377"
+ "\377\377\377\377\377\377l\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377K\377\377\377\375\377\377\377\254\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
+ "\377\377\247\377\377\377\343\377\377\377\340\377\377\377\377\377\377\377"
+ "\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377`\377\377\377\262\377\377\377=\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\342\377\377\377\377\377\377\377"
+ "\325\377\377\377\266\377\377\377u\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377"
+ "\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
+ "\377\377`\377\377\377\263\377\377\377\307\377\377\377\376\377\377\377\363"
+ "\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\0\377\377\377\0\377\377\377\0\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377"
+ "\377\351\377\377\377\366\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\356\377\377\377\377"
+ "\377\377\377\243\377\377\377;\377\377\377\374\377\377\377\364\377\377\377"
+ "%\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\313\377\377\377\355\0\0\0\0\377\377\377\320\377\377\377\346\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\247"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\352\377\377\377S\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377"
+ "}\377\377\377\377\377\377\377\326\377\377\377\334\377\377\377\376\377\377"
+ "\377l\0\0\0\0\377\377\377}\377\377\377\377\377\377\377\323\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\354\377\377\377\364\377"
+ "\377\377\226\377\377\377\373\377\377\377\337\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\33\377\377"
+ "\377\362\377\377\377\376\377\377\377l\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\232\377"
+ "\377\377\377\377\377\377\336\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\302\377\377\377\377\377"
+ "\377\377\277\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377|\377\377\377\205\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377_\377\377\377\232\377\377\377\13\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "!\377\377\377\371\377\377\377\352\377\377\377\13\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\345\377\377\377\377\377"
+ "\377\377\365\377\377\377\353\377\377\377\377\377\377\377\367\377\377\377"
+ "2\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\313"
+ "\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377l\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\314\377"
+ "\377\377\377\377\377\377\376\377\377\377\335\377\377\377\371\377\377\377"
+ "\377\377\377\377\352\377\377\377\33\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377\302\377\377\377\377\377\377\377\377\377\377\377\342"
+ "\377\377\377\362\377\377\377\377\377\377\377\375\377\377\377\\\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "U\377\377\377\374\377\377\377\377\377\377\377\333\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\361\377\377\377"
+ "\377\377\377\377\373\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\251\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377"
+ "\377\377\247\377\377\377\377\377\377\377\377\377\377\377\360\377\377\377"
+ "\373\377\377\377\377\377\377\377\360\377\377\377\33\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\377\377\377\332\377\377\377\377\377\377\377\376\377\377"
+ "\377\374\377\377\377\374\377\377\377\376\377\377\377\377\377\377\377\367"
+ "\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\25\377"
+ "\377\377\356\377\377\377\377\377\377\377\351\377\377\377\350\377\377\377"
+ "\376\377\377\377\376\377\377\377s\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377|\377\377\377\376\377\377\377\377\377\377\377\345\377"
+ "\377\377\356\377\377\377\377\377\377\377\355\377\377\377%\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377}\377\377\377\374\377\377\377\254\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
+ "\377\377V\377\377\377\375\377\377\377\241\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\3778\377"
+ "\377\377\372\377\377\377\343\377\377\377u\377\377\377\217\377\377\377\374"
+ "\377\377\377\375\377\377\377M\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\377\377\377\233\377\377\377\376\377\377\377\377\377\377\377"
+ "\354\377\377\377\375\377\377\377\377\377\377\377\257\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\232\377\377\377"
+ "\377\377\377\377\377\377\377\377\277\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377"
+ "\342\377\377\377\304\377\377\377\332\377\377\377\376\377\377\377\377\377"
+ "\377\377\227\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377"
+ "\377\377\331\377\377\377\377\377\377\377\373\377\377\377\306\377\377\377"
+ "\307\377\377\377\375\377\377\377\376\377\377\377Q\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\377\377\377\313\377\377\377\377\377\377\377\330\377\377"
+ "\377\310\377\377\377\370\377\377\377\377\377\377\377\375\377\377\377f\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\374"
+ "\377\377\377\376\377\377\377\323\377\377\377\327\377\377\377\327\377\377"
+ "\377\327\377\377\377\316\377\377\377\33\377\377\377\377\377\377\377\377\0"
+ "\0\0\0\377\377\377\13\377\377\377\356\377\377\377\376\377\377\377\324\377"
+ "\377\377\327\377\377\377\327\377\377\377\327\377\377\377\312\377\377\377"
+ "%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\33\377\377\377\362"
+ "\377\377\377\377\377\377\377\365\377\377\377\277\377\377\377\321\377\377"
+ "\377\377\377\377\377\366\377\377\377\33\377\377\377\377\377\377\377\377\0"
+ "\0\0\0\377\377\377\313\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377"
+ "\377\13\377\377\377\356\377\377\377\366\377\377\377%\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377}\377\377\377\332\377\377\377\323\377\377"
+ "\377\371\377\377\377\377\377\377\377\331\377\377\377\327\377\377\377\266"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377"
+ "\302\377\377\377\323\377\377\377\322\377\377\377\322\377\377\377\342\377"
+ "\377\377\377\377\377\377\252\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\224\377\377\377\377\377\377\377\252\0\0\0\0\0\0\0\0\377"
+ "\377\377\335\377\377\377\377\377\377\377\315\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\13\377\377\377\356\377\377\377\366\377\377"
+ "\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377\313\377\377\377\377\377\377\377\336\0\0\0\0\0\0"
+ "\0\0\377\377\377\275\377\377\377\377\377\377\377\330\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\312\377\377\377\377\377\377\377"
+ "\364\377\377\377%\0\0\0\0\377\377\377\13\377\377\377\361\377\377\377\333"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377j\377\377\377"
+ "\375\377\377\377\377\377\377\377\325\377\377\377\313\377\377\377\376\377"
+ "\377\377\377\377\377\377\225\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\224\377\377\377\377\377\377\377\342\377\377\377\310\377"
+ "\377\377\322\377\377\377\366\377\377\377\377\377\377\377\355\377\377\377"
+ "\33\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377j\377\377\377\375"
+ "\377\377\377\377\377\377\377\321\377\377\377\307\377\377\377\376\377\377"
+ "\377\377\377\377\377\216\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377\224\377\377\377\377\377\377\377\342\377\377\377\310\377\377"
+ "\377\322\377\377\377\371\377\377\377\377\377\377\377\336\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\374\377\377\377"
+ "\377\377\377\377\330\377\377\377\271\377\377\377\351\377\377\377\377\377"
+ "\377\377\334\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377}\377\377"
+ "\377\332\377\377\377\327\377\377\377\323\377\377\377\371\377\377\377\377"
+ "\377\377\377\331\377\377\377\326\377\377\377\332\377\377\377p\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377"
+ "i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\356\377\377\377\366\377\377"
+ "\377%\377\377\377\377\377\377\377\377\377\377\377\33\377\377\377\365\377"
+ "\377\377\375\377\377\3778\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\345"
+ "\377\377\377\375\377\377\377Q\377\377\377\377\377\377\377\377\377\377\377"
+ "\313\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\13\377\377\377\361\377\377\377\347\377\377\377\377\377\377\377\377\0"
+ "\0\0\0\377\377\377\214\377\377\377\377\377\377\377\343\0\0\0\0\0\0\0\0\377"
+ "\377\377\261\377\377\377\377\377\377\377\272\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\377\377\377\13\377\377\377\351\377\377\377\376\377\377\377i"
+ "\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\366\377\377\377\372\377\377\377"
+ "8\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377v\377\377\377\327\377"
+ "\377\377\322\377\377\377\322\377\377\377\316\377\377\377\351\377\377\377"
+ "\377\377\377\377\360\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377U\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377"
+ "\377\377\320\377\377\377\376\377\377\377_\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\13\377\377\377\364\377\377\377\254\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377"
+ "\377\377\377\377\377\377\377\377\377\377\272\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\233\377\377\377\371\377\377\377"
+ "i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\376\377\377"
+ "\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377I\377\377\377\373\377\377\377"
+ "\356\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377"
+ "\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "S\377\377\377\314\377\377\377\271\377\377\377\13\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377S\377"
+ "\377\377\314\377\377\377\271\377\377\377\13\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\375\377\377\377\252\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\360\377\377\377\334\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\247\377\377\377\377\377\377\377l\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\361\377\377\377\337\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\313\377\377\377\372\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\3\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\331"
+ "\377\377\377\376\377\377\377i\377\377\377K\377\377\377\374\377\377\377\366"
+ "\377\377\377)\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\316\377\377\377\333\0\0\0\0\377\377\377\316\377\377\377"
+ "\333\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "8\377\377\377\372\377\377\377\377\377\377\377\307\377\377\377\237\377\377"
+ "\377\364\377\377\377\377\377\377\377\244\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\377\377\377\232\377\377\377\375\377\377\3772\377\377\377=\377\377"
+ "\377\375\377\377\377\254\377\377\377!\377\377\377\371\377\377\377\367\377"
+ "\377\3778\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377;\377\377\377"
+ "\372\377\377\377\346\377\377\377\13\377\377\377\371\377\377\377\333\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\13\377\377\377\355\377\377\377\375\377\377\377\\\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\13\377\377\377\355\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377!\377\377\377\372\377\377\377\375\377\377\3778\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\327\377\377\377\343\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\320\377\377"
+ "\377\374\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\252\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\204\377"
+ "\377\377\377\377\377\377\353\377\377\377\13\0\0\0\0\377\377\377\320\377\377"
+ "\377\377\377\377\377\260\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\377\377\377\205\377\377\377\322\377\377\377\353\377\377\377\376"
+ "\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\325\377\377\377\375\377\377\377M\0\0\0\0\377\377\377\33"
+ "\377\377\377\356\377\377\377\376\377\377\377l\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\215\377\377\377\375\377\377\377Z\0\0\0\0"
+ "\0\0\0\0\377\377\377\325\377\377\377\377\377\377\377\257\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\25\377\377\377"
+ "\356\377\377\377\377\377\377\377\377\377\377\377\326\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\374\377\377"
+ "\377\330\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377!\377\377\377\371\377\377\377\377\377"
+ "\377\377\216\0\0\0\0\0\0\0\0\377\377\377\302\377\377\377\224\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\302\377\377\377\377\377\377\377\252\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377V\377\377\377\375\377\377\377\333"
+ "\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\260\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\330\377\377\377\377"
+ "\377\377\377\251\0\0\0\0\377\377\377\13\377\377\377\336\377\377\377\377\377"
+ "\377\377\227\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\250\377\377\377\276\377\377\377\33\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\250\377\377\377\276\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\276\377\377\377\377\377\377\377\377\377\377\377\225\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377I\377\377\377\373\377\377\377\377\377\377\377\325\377"
+ "\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\306\377"
+ "\377\377\376\377\377\377l\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377K\377\377\377\374\377\377\377\375\377\377\377q\0\0\0\0\377\377"
+ "\377\33\377\377\377\362\377\377\377\366\377\377\377%\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\334\377\377\377\377\377"
+ "\377\377\376\377\377\377\360\377\377\377\33\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\243"
+ "\0\0\0\0\0\0\0\0\377\377\377\223\377\377\377\377\377\377\377\327\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377s\377\377\377\376\377"
+ "\377\377\375\377\377\377_\0\0\0\0\0\0\0\0\377\377\377z\377\377\377\257\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377"
+ "\376\377\377\377U\0\0\0\0\377\377\377\33\377\377\377\353\377\377\377\377"
+ "\377\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
+ "\377K\377\377\377\374\377\377\377\326\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377"
+ "\377\355\377\377\377\366\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\247\377\377\377"
+ "\377\377\377\377\364\377\377\377)\0\0\0\0\0\0\0\0\377\377\377\246\377\377"
+ "\377\213\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313"
+ "\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
+ "\355\377\377\377\366\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\355\377\377\377\363\377\377\377\13\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\213\377\377\377\377\377\377\377"
+ "\252\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377"
+ "\377\377\377\377\377\377\252\0\0\0\0\377\377\377\270\377\377\377\377\377"
+ "\377\377\355\377\377\377\33\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0"
+ "\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
+ "\377\377\307\377\377\377\377\377\377\377\375\377\377\3778\377\377\377\13"
+ "\377\377\377\352\377\377\377\377\377\377\377\327\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\307\377\377\377\377\377\377\377\377"
+ "\377\377\377\251\0\0\0\0\377\377\377\13\377\377\377\361\377\377\377\333\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377"
+ "\377\377\377\377\315\0\0\0\0\0\0\0\0\377\377\377\253\377\377\377\377\377"
+ "\377\377\346\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "\224\377\377\377\377\377\377\377\243\0\0\0\0\0\0\0\0\377\377\377\25\377\377"
+ "\377\356\377\377\377\376\377\377\377l\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\313\377\377\377\377\377\377\377\310\0\0\0\0\0\0\0\0\377"
+ "\377\377\253\377\377\377\377\377\377\377\342\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\243\0\0"
+ "\0\0\0\0\0\0\377\377\377!\377\377\377\371\377\377\377\367\377\377\377)\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\232\377\377\377\377\377"
+ "\377\377\315\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\302\377\377\377z\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\355\377\377\377\363\377\377\377\13\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377"
+ "i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377"
+ "\377%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\312\377\377\377"
+ "\377\377\377\377\215\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377"
+ "\377\347\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\247\377\377"
+ "\377\377\377\377\377\206\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377"
+ "\377\377\374\377\377\377\333\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\377\377\377\342\377\377\377\376\377\377\377v\377\377\377\33\377\377"
+ "\377\366\377\377\377\367\377\377\377)\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377\214\377\377\377\377\377\377\377\316\0\0\0\0\0\0"
+ "\0\0\377\377\377\232\377\377\377\377\377\377\377\264\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\25\377\377\377\356\377\377\377\376\377\377\377v\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\376"
+ "\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\377\377\377\377\277\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\364\377\377\377\254\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\335\377\377\377\370\377\377\377\353\377\377\377\363\377"
+ "\377\377%\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377)\377\377\377V\377\377\377\33\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224"
+ "\377\377\377\376\377\377\377b\0\0\0\0\377\377\377S\377\377\3775\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377S\377\377\377I\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377S\377"
+ "\377\3775\377\377\377;\377\377\377\374\377\377\377\333\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377)\377\377"
+ "\377V\377\377\377\13\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377;\377\377\377\374\377\377\377\326"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377E\377\377\377E\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377"
+ "\377\376\377\377\377b\0\0\0\0\377\377\377E\377\377\377S\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377"
+ "\377\375\377\377\377\252\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377"
+ "\377\377\361\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377)\377\377\377X\0"
+ "\0\0\0\0\0\0\0\377\377\377V\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377E\377\377\377S\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377E\377\377\377K\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377S\377\377\3775\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377S\377\377\3775\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377)\377\377\377U\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377E\377\377\377U\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\376\377\377"
+ "\377b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\361"
+ "\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371"
+ "\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377"
+ "%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377"
+ "\377\377\0\377\377\377\6\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371"
+ "\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377l\377\377\377\33"
+ "\377\377\377\364\377\377\377\352\377\377\377\13\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\3772\377\377\377\274\377\377\377\361\377\377"
+ "\377\375\377\377\377\265\377\377\377\367\377\377\377\372\377\377\377\221"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377V\377\377\377"
+ "\374\377\377\377\336\0\0\0\0\0\0\0\0\377\377\3775\377\377\377\261\377\377"
+ "\377\13\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\232\377\377\377"
+ "\371\377\377\377\33\377\377\377;\377\377\377\374\377\377\377\217\377\377"
+ "\377\335\377\377\377\375\377\377\377\\\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377\33\377\377\377\371\377\377\377\333\377\377\377e"
+ "\377\377\377\374\377\377\377\326\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\361\377"
+ "\377\377\364\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377b\377\377\377\375\377\377\377"
+ "\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\266\377\377\377\377\377\377\377"
+ "\227\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\316\377\377\377\334\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\335\377\377"
+ "\377\375\377\377\377=\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\306\377\377\377\377\377\377\377\225\0\0\0\0\0\0\0\0\377"
+ "\377\377`\377\377\377\375\377\377\377\346\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\213\377\377\377\376"
+ "\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\3772\377\377\377f\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\253\377"
+ "\377\377\376\377\377\377i\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\231\377\377\377\377"
+ "\377\377\377\257\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\313\377\377\377\377\377\377\377\356\377\377\377\374"
+ "\377\377\377\332\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377K\377\377\377\374\377\377\377\326\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "\224\377\377\377\377\377\377\377\326\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377b\377\377\377\375\377\377\377\347\377\377\377\13"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377U\377\377\377"
+ "\375\377\377\377\266\0\0\0\0\0\0\0\0\377\377\377;\377\377\377\374\377\377"
+ "\377\236\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\25\377\377\377"
+ "\361\377\377\377\367\377\377\377)\0\0\0\0\0\0\0\0\377\377\377j\377\377\377"
+ "\376\377\377\377\322\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\214\377\377\377\377\377\377\377\377\377\377\377"
+ "\260\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\214\377\377\377\377\377\377\377\377\377\377\377"
+ "\260\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377G\377\377\377\350\377\377\377\377\377\377\377\367"
+ "\377\377\377y\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
+ "\377\377\207\377\377\377\307\377\377\377\304\377\377\377\304\377\377\377"
+ "\304\377\377\377\304\377\377\377\304\377\377\377\243\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377S\377\377\377\351\377\377"
+ "\377\377\377\377\377\365\377\377\377n\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\13\377\377\377\345\377\377\377\376\377\377\377_\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\273\377\377\377\377\377\377\377\234"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\232\377\377\377\376\377\377\377i\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377;\377\377\377\373"
+ "\377\377\377\344\377\377\377\317\377\377\377\376\377\377\377v\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377"
+ "\377\377\377\377\252\0\0\0\0\0\0\0\0\377\377\377X\377\377\377\375\377\377"
+ "\377\327\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\300"
+ "\377\377\377\377\377\377\377\277\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377"
+ "\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377"
+ "\377\375\377\377\377Q\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "K\377\377\377\374\377\377\377\332\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377"
+ "\355\377\377\377\366\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\342\377\377\377\377"
+ "\377\377\377\225\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377"
+ "\377b\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377"
+ "\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\13\377\377\377\355\377\377\377\366\377\377\377)\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\252\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377"
+ "\377\377\237\377\377\377\203\377\377\377\377\377\377\377\375\377\377\377"
+ "Q\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13"
+ "\377\377\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\312\377"
+ "\377\377\377\377\377\377\377\377\377\377\217\377\377\377X\377\377\377\375"
+ "\377\377\377\373\377\377\377\332\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377\313\377\377\377\373\377\377\377\371\377\377\377\366"
+ "\377\377\377%\377\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\377\377\377\33\377\377\377\362\377\377\377\375"
+ "\377\377\377\\\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\366\377\377\377"
+ "\375\377\377\377Q\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224"
+ "\377\377\377\377\377\377\377\252\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\306"
+ "\377\377\377\375\377\377\377\\\377\377\377\377\377\377\377\377\377\377\377"
+ "\33\377\377\377\362\377\377\377\375\377\377\377Q\0\0\0\0\0\0\0\0\377\377"
+ "\377!\377\377\377\371\377\377\377\375\377\377\377M\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\252\0\0\0\0"
+ "\0\0\0\0\377\377\377\25\377\377\377\370\377\377\377\364\377\377\377%\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\232\377\377\377\377\377"
+ "\377\377\304\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355"
+ "\377\377\377\366\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377i\0\0\0\0"
+ "\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\204\377\377\377\377\377"
+ "\377\377\311\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377"
+ "\260\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\222\377\377\377"
+ "\377\377\377\377\252\0\0\0\0\377\377\377\307\377\377\377\355\377\377\377"
+ "%\377\377\377K\377\377\377\374\377\377\377\260\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\377\377\377l\377\377\377\376\377\377\377\333\377\377"
+ "\377\243\377\377\377\377\377\377\377\244\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\345\377\377\377\375\377"
+ "\377\377M\377\377\377\13\377\377\377\351\377\377\377\372\377\377\377)\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\317\377\377\377\377\377\377\377\277\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377"
+ "\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\25\377\377\377\362\377\377\377"
+ "\363\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\364\377"
+ "\377\377\254\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\377\377\377U\377\377\377\374\377\377\377\316\377\377\377\247"
+ "\377\377\377\377\377\377\377\206\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\216\377\377\377\345\377\377"
+ "\377\377\377\377\377\377\377\377\377\376\377\377\377\275\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\376"
+ "\377\377\377\271\377\377\377\364\377\377\377\377\377\377\377\377\377\377"
+ "\377\313\377\377\377\13\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0"
+ "\0\0\0\377\377\377\13\377\377\377\272\377\377\377\371\377\377\377\377\377"
+ "\377\377\377\377\377\377\355\377\377\377\200\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\361\377\377\377\377"
+ "\377\377\377\377\377\377\377\325\377\377\377\377\377\377\377\332\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\3775\377\377\377"
+ "\327\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\267\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\205\377"
+ "\377\377\361\377\377\377\363\377\377\377\377\377\377\377\374\377\377\377"
+ "\364\377\377\377\367\377\377\377\354\377\377\377%\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\377\377\377b\377\377\377\350\377\377\377\377\377"
+ "\377\377\377\377\377\377\360\377\377\377\360\377\377\377\375\377\377\377"
+ "\243\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377"
+ "\376\377\377\377\215\377\377\377\350\377\377\377\377\377\377\377\377\377"
+ "\377\377\346\377\377\3772\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377\301\377\377\377\370\377\377\377\364\377\377\377\364\377\377"
+ "\377\360\377\377\377\350\377\377\377%\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\301\377\377\377\370\377\377\377\364\377"
+ "\377\377\364\377\377\377\360\377\377\377\350\377\377\377%\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\375\377"
+ "\377\377\252\0\0\0\0\0\0\0\0\377\377\377S\377\377\377\354\377\377\377\363"
+ "\377\377\377I\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\342\377\377"
+ "\377\332\377\377\377\374\377\377\377\377\377\377\377\276\377\377\377\353"
+ "\377\377\377\377\377\377\377\352\377\377\377)\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377\214\377\377\377\371\377\377\377\212\377\377\377"
+ "\350\377\377\377\377\377\377\377\377\377\377\377\346\377\377\3772\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377u\377\377\377"
+ "\351\377\377\377\377\377\377\377\377\377\377\377\364\377\377\377\222\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\213\377"
+ "\377\377\371\377\377\377\262\377\377\377\365\377\377\377\377\377\377\377"
+ "\377\377\377\377\313\377\377\377\13\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\361\377\377\377\377\377\377\377"
+ "\377\377\377\377\310\377\377\377\347\377\377\377\315\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\301\377\377\377\351\377"
+ "\377\377)\377\377\377\326\377\377\377\377\377\377\377\377\377\377\377\372"
+ "\377\377\377M\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377"
+ "\224\377\377\377\365\377\377\377\377\377\377\377\377\377\377\377\373\377"
+ "\377\377\300\377\377\377=\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
+ "\377\13\377\377\377\332\377\377\377\360\377\377\377\373\377\377\377\377\377"
+ "\377\377\376\377\377\377\364\377\377\377\367\377\377\377\354\377\377\377"
+ "%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\301\377\377\377\354"
+ "\377\377\3772\0\0\0\0\0\0\0\0\377\377\377I\377\377\377\364\377\377\377\275"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377I\377\377\377\364\377"
+ "\377\377\330\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\267\377\377\377"
+ "\367\377\377\377\\\377\377\377\377\377\377\377\377\377\377\377\335\377\377"
+ "\377\360\377\377\3778\0\0\0\0\377\377\377~\377\377\377\224\0\0\0\0\377\377"
+ "\377\13\377\377\377\332\377\377\377\342\377\377\377\377\377\377\377\377\0"
+ "\0\0\0\377\377\377\275\377\377\377\373\377\377\377\255\0\0\0\0\0\0\0\0\377"
+ "\377\377r\377\377\377\370\377\377\377\315\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\377\377\377I\377\377\377\364\377\377\377\330\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\254\377\377\377\367\377\377\377\\\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\365\377\377\377\364\377"
+ "\377\377\364\377\377\377\364\377\377\377\360\377\377\377\360\377\377\377"
+ "\354\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313"
+ "\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\7\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\313\377\377\377\372\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\306\377\377\377\375"
+ "\377\377\3778\377\377\377\13\377\377\377\364\377\377\377\334\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\364"
+ "\377\377\377\376\377\377\377\370\377\377\377\364\377\377\377\376\377\377"
+ "\377\374\377\377\377\320\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\3778\377\377\377\372\377\377\377\376\377\377\377\307\377\377\377"
+ "O\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
+ "\377\223\377\377\377\377\377\377\377\234\377\377\377\243\377\377\377\376"
+ "\377\377\377\217\377\377\377\373\377\377\377v\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\331\377\377\377\377\377"
+ "\377\377\377\377\377\377\367\377\377\3778\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\323"
+ "\377\377\377\374\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\245\377\377\377\377\377"
+ "\377\377\215\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377V\377\377\377\375\377\377"
+ "\377\322\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377\260\377\377\377\354\377\377\377\236\377\377\377\326\377\377"
+ "\377\361\377\377\377\224\377\377\377\341\377\377\377\314\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313"
+ "\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\325"
+ "\377\377\377\374\377\377\3772\377\377\377\215\377\377\377\241\377\377\377"
+ "\13\377\377\377\361\377\377\377\367\377\377\377)\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\376"
+ "\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\307\377\377\377"
+ "\376\377\377\377l\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\200\377\377\377\363\377\377\377\376"
+ "\377\377\377s\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377"
+ "\377\377\240\377\377\377\377\377\377\377\363\377\377\377V\377\377\377\374"
+ "\377\377\377\333\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377K\377\377\377\374\377\377\377\333\377\377\377\274\377\377\377"
+ "\310\377\377\377\251\377\377\377=\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\377\377\377\314\377\377\377\376\377\377\377l\377\377\377"
+ "j\377\377\377\237\377\377\377\223\377\377\377%\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\342\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\377\377\3778\377\377\377\372\377\377\377\376\377\377\377"
+ "\237\0\0\0\0\377\377\377\254\377\377\377\377\377\377\377\243\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\377\377\377\25\377\377\377\361\377\377\377\366"
+ "\377\377\377\33\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\366\377\377\377"
+ "\355\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\232\377\377\377\377\377\377\377\377\377\377\377\323\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\232\377\377\377\377\377\377\377\377\377\377\377\323\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377"
+ "\377\224\377\377\377\374\377\377\377\377\377\377\377\314\377\377\377\33\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "\274\377\377\377\377\377\377\377\370\377\377\377\370\377\377\377\370\377"
+ "\377\377\370\377\377\377\373\377\377\377\321\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\264\377\377\377"
+ "\377\377\377\377\377\377\377\377\262\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\337"
+ "\377\377\377\377\377\377\377\271\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\377\377\377\25\377\377\377\361\377\377\377\352\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377U\377\377\377\237\377\377\377\376\377\377\377l\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\232\377\377\377\377"
+ "\377\377\377\266\377\377\377\213\377\377\377\377\377\377\377\304\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377"
+ "\377\377\377\377\377\265\377\377\377E\377\377\377y\377\377\377\337\377\377"
+ "\377\377\377\377\377\227\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
+ "\377\13\377\377\377\352\377\377\377\375\377\377\377Q\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
+ "\377\377\313\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\324\377\377\377\376\377\377\377l\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377K\377\377\377\374\377\377\377\337\377\377\377Z\377\377\377"
+ "p\377\377\377p\377\377\377f\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377)\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377"
+ "\377\3775\377\377\377\371\377\377\377\367\377\377\377)\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
+ "\377\377\313\377\377\377\376\377\377\377\224\377\377\377m\377\377\377v\377"
+ "\377\377h\377\377\377\362\377\377\377\366\377\377\377%\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377"
+ "\377\366\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377"
+ "\377\377\377\377\377\377\252\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\224\377\377\377\377\377\377\377\300\377\377\377\372\377"
+ "\377\377\377\377\377\377\236\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377"
+ "\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377\313\377\377\377\370\377\377\377\366\377\377\377"
+ "\317\377\377\377\243\377\377\377\376\377\377\377\372\377\377\377\333\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377"
+ "\367\377\377\377\304\377\377\377\377\377\377\377\251\377\377\377\13\377\377"
+ "\377\361\377\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
+ "\377U\377\377\377\374\377\377\377\343\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\314\377\377\377\376\377\377\377i\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\243\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\335\377\377\377\376\377\377\377l\377\377\377\377\377"
+ "\377\377\377\377\377\377U\377\377\377\374\377\377\377\336\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\317\377\377\377\376\377\377\377l\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377"
+ "\243\0\0\0\0\0\0\0\0\377\377\377`\377\377\377\373\377\377\377\366\377\377"
+ "\377%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377`\377\377\377\374"
+ "\377\377\377\377\377\377\377\336\377\377\377\205\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\13\377\377\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377"
+ "\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377"
+ "\377\366\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "\33\377\377\377\371\377\377\377\360\377\377\377\33\0\0\0\0\377\377\377\320"
+ "\377\377\377\376\377\377\377_\0\0\0\0\377\377\377\377\377\377\377\377\377"
+ "\377\377U\377\377\377\375\377\377\377\277\377\377\377\33\377\377\377\366"
+ "\377\377\377\376\377\377\377m\377\377\377\213\377\377\377\377\377\377\377"
+ "\243\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\324\377\377\377\377\377\377\377\377\377\377\377\355\377\377\377\33\0\0\0"
+ "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\204"
+ "\377\377\377\377\377\377\377\304\377\377\377\204\377\377\377\377\377\377"
+ "\377\260\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\214\377\377\377\377\377\377\377\355\377\377"
+ "\377\33\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\224\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\266\377\377\377\377\377\377\377\206\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\13\377\377\377\364\377\377\377\254\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\266\377\377\377\377\377"
+ "\377\377\207\377\377\377K\377\377\377\374\377\377\377\327\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377}\377\377\377"
+ "\377\377\377\377\373\377\377\377\313\377\377\377\303\377\377\377\374\377"
+ "\377\377\377\377\377\377\252\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\224\377\377\377\377\377\377\377\377\377\377\377\351\377"
+ "\377\377\300\377\377\377\365\377\377\377\377\377\377\377\316\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\346\377\377"
+ "\377\377\377\377\377\365\377\377\377\305\377\377\377\315\377\377\377\376"
+ "\377\377\377\366\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0\0\377"
+ "\377\377}\377\377\377\376\377\377\377\377\377\377\377\325\377\377\377\321"
+ "\377\377\377\376\377\377\377\377\377\377\377\332\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\3778\377\377\377\371\377\377\377\377\377"
+ "\377\377\335\377\377\377\263\377\377\377\351\377\377\377\377\377\377\377"
+ "\304\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377S\377\377"
+ "\377\330\377\377\377\343\377\377\377\377\377\377\377\364\377\377\377\327"
+ "\377\377\377\333\377\377\377\322\377\377\377\33\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\3778\377\377\377\372\377\377\377\376\377\377\377\275"
+ "\377\377\377\307\377\377\377\376\377\377\377\377\377\377\377\324\377\377"
+ "\377y\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377"
+ "\377\377\377\377\377\377\377\377\370\377\377\377\306\377\377\377\356\377"
+ "\377\377\377\377\377\377\322\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\224\377\377\377\336\377\377\377\333\377\377\377\327\377"
+ "\377\377\377\377\377\377\366\377\377\377)\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\336\377\377\377\333"
+ "\377\377\377\327\377\377\377\377\377\377\377\366\377\377\377)\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\375"
+ "\377\377\377\252\0\0\0\0\377\377\377`\377\377\377\373\377\377\377\377\377"
+ "\377\377\242\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\355"
+ "\377\377\377\377\377\377\377\346\377\377\377\362\377\377\377\377\377\377"
+ "\377\362\377\377\377\347\377\377\377\377\377\377\377\215\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\377"
+ "\377\377\377\370\377\377\377\306\377\377\377\356\377\377\377\377\377\377"
+ "\377\322\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377u\377"
+ "\377\377\376\377\377\377\377\377\377\377\321\377\377\377\307\377\377\377"
+ "\375\377\377\377\377\377\377\377\243\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\377\377\377\377"
+ "\352\377\377\377\300\377\377\377\365\377\377\377\377\377\377\377\316\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377}\377\377\377\376"
+ "\377\377\377\377\377\377\377\325\377\377\377\321\377\377\377\376\377\377"
+ "\377\377\377\377\377\332\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377\366\377\377\377\377"
+ "\377\377\377\335\377\377\377\322\377\377\377\343\377\377\377%\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377u\377\377\377\377\377\377\377\370"
+ "\377\377\377\277\377\377\377\262\377\377\377\346\377\377\377\377\377\377"
+ "\377\231\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377"
+ "\315\377\377\377\330\377\377\377\370\377\377\377\377\377\377\377\335\377"
+ "\377\377\327\377\377\377\333\377\377\377\322\377\377\377\33\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377l\0\0"
+ "\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377\341\377\377\377\376\377\377"
+ "\377v\0\0\0\0\0\0\0\0\377\377\377!\377\377\377\371\377\377\377\366\377\377"
+ "\377)\377\377\377\377\377\377\377\377\377\377\377\313\377\377\377\377\377"
+ "\377\377\205\377\377\377\13\377\377\377\364\377\377\377\376\377\377\377Q"
+ "\377\377\377!\377\377\377\371\377\377\377\352\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377I\377\377\377\372\377\377\377\376\377\377\377v\377"
+ "\377\377\33\377\377\377\362\377\377\377\376\377\377\377}\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377\335\377\377\377\376\377\377"
+ "\377v\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\364\377\377\377\372\377"
+ "\377\3772\377\377\377\377\377\377\377\377\0\0\0\0\377\377\3775\377\377\377"
+ "\323\377\377\377\333\377\377\377\333\377\377\377\327\377\377\377\377\377"
+ "\377\377\377\377\377\377\326\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\320\377\377\377\355\377\377\377"
+ "\13\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\313\377\377\377\371\377\377\377\33\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377}\377\377"
+ "\377\313\377\377\377\257\377\377\377\13\0\0\0\0\377\377\377\223\377\377\377"
+ "\252\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\316"
+ "\377\377\377\352\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\377\377\377z\377\377\377\325\377\377\377\33\377"
+ "\377\377\13\377\377\377\314\377\377\377\267\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377!\377\377\377\373\377\377\377"
+ "\211\377\377\377!\377\377\377\374\377\377\377\200\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\205\377\377\377\370"
+ "\377\377\377\377\377\377\377\377\377\377\377\345\377\377\377\200\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\333\377"
+ "\377\377\377\377\377\377\377\377\377\377\321\0\0\0\0\377\377\377r\377\377"
+ "\377z\377\377\377%\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
+ "\377\25\377\377\377\337\377\377\377\377\377\377\377\375\377\377\3778\0\0"
+ "\0\0\377\377\377U\377\377\377\365\377\377\377\256\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\255\377\377\377\275"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\314\377\377\377\376\377\377\377b\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\33\377\377\377\371\377\377\377\333\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377~\377\377\377"
+ "\347\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\361\377\377\377\227\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\312\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\322\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\312\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\322\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\261\377\377\377\377\377\377\377"
+ "\215\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377"
+ "\25\377\377\377\361\377\377\377\363\377\377\377E\377\377\377\375\377\377"
+ "\377\377\377\377\377V\377\377\377\324\377\377\377\366\377\377\377%\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224"
+ "\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377j\377\377"
+ "\377\375\377\377\377\361\377\377\377%\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\215\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377b\377\377\377\374\377\377\377\375\377\377"
+ "\377Q\377\377\377K\377\377\377\374\377\377\377\332\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\375\377\377\377"
+ "\377\377\377\377\374\377\377\377\376\377\377\377\377\377\377\377\375\377"
+ "\377\377s\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\312"
+ "\377\377\377\377\377\377\377\360\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\376\377\377\377\213\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\377\377"
+ "\377\377\315\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\377\377\377\215\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\333\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\321\377\377\377\377\377\377\377\315\377"
+ "\377\377q\377\377\377\221\377\377\377\363\377\377\377\377\377\377\377\364"
+ "\377\377\377)\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377G\377\377\377\330\377\377\377\343\377\377\377c\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "G\377\377\377\330\377\377\377\343\377\377\377c\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377V\377\377\377\375\377\377"
+ "\377\376\377\377\377\214\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377U\377\377\377\374\377\377\377"
+ "\377\377\377\377m\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\330\377\377\377\377\377\377\377\271\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377U\377\377\377"
+ "\375\377\377\377\252\0\0\0\0\377\377\377\233\377\377\377\366\377\377\377"
+ "\377\377\377\377\377\377\377\377\376\377\377\377i\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\377\377\377\334\377\377\377\376\377\377\377U\377"
+ "\377\377!\377\377\377\371\377\377\377\363\377\377\377%\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\371\377"
+ "\377\377)\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377"
+ "\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377"
+ "\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377"
+ "\377\376\377\377\377i\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "K\377\377\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\375\377\377\377)\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377l\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\377\377\377K\377\377\377\374\377\377\377\333"
+ "\0\0\0\0\0\0\0\0\377\377\377\247\377\377\377\327\377\377\377\322\377\377"
+ "\377\300\377\377\377\13\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "\312\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\364\377\377\377%\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377"
+ "\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224"
+ "\377\377\377\377\377\377\377\252\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\332\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377"
+ "\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\377\377\377\313\377\377\377\363\377\377\377\301\377\377"
+ "\377\373\377\377\377\356\377\377\377\333\377\377\377\352\377\377\377\333"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377"
+ "\377\376\377\377\377w\377\377\377\371\377\377\377\366\377\377\377!\377\377"
+ "\377\360\377\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
+ "\377K\377\377\377\374\377\377\377\327\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\312\377\377\377\377\377\377\377\251\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\326\377\377\377"
+ "\247\377\377\377\262\377\377\377\351\377\377\377\377\377\377\377\355\377"
+ "\377\377\33\377\377\377\377\377\377\377\377\377\377\377K\377\377\377\374"
+ "\377\377\377\343\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377"
+ "\377\376\377\377\377i\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "\224\377\377\377\377\377\377\377\356\377\377\377\340\377\377\377\343\377"
+ "\377\377\376\377\377\377\377\377\377\377\304\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\365\377\377\377\377"
+ "\377\377\377\377\377\377\377\364\377\377\377\247\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
+ "\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377i\0\0"
+ "\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\321\377\377"
+ "\377\376\377\377\377i\377\377\377\33\377\377\377\365\377\377\377\355\377"
+ "\377\377\13\0\0\0\0\377\377\377\377\377\377\377\377\377\377\3778\377\377"
+ "\377\372\377\377\377\327\377\377\377c\377\377\377\377\377\377\377\377\377"
+ "\377\377\271\377\377\377\205\377\377\377\376\377\377\377i\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377l\377\377\377\377\377"
+ "\377\377\377\377\377\377\226\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\344\377\377\377\376\377"
+ "\377\377\372\377\377\377\367\377\377\377)\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377!\377\377\377\371\377"
+ "\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\376\377\377"
+ "\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377V\377\377\377\375\377\377\377\326\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\364\377\377\377\254\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\33\377"
+ "\377\377\364\377\377\377\363\377\377\377%\0\0\0\0\377\377\377\335\377\377"
+ "\377\375\377\377\377M\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\377\377\377\177\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\205\377"
+ "\377\377\376\377\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\224\377\377\377\377\377\377\377\257\0\0\0\0\0\0\0\0\377"
+ "\377\377;\377\377\377\373\377\377\377\372\377\377\3778\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\247\377\377\377\377\377\377\377\345\377"
+ "\377\377\33\0\0\0\0\0\0\0\0\377\377\377O\377\377\377X\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\377\377\377\13\377\377\377\351\377\377\377\377\377\377"
+ "\377\252\0\0\0\0\0\0\0\0\377\377\377b\377\377\377\375\377\377\377\332\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\306\377\377\377"
+ "\377\377\377\377\252\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\344\377\377\377"
+ "\372\377\377\377)\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377%\377\377\377\374\377\377\377\326\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\232\377\377\377"
+ "\377\377\377\377\264\0\0\0\0\0\0\0\0\377\377\377\335\377\377\377\376\377"
+ "\377\377Q\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224"
+ "\377\377\377\377\377\377\377\325\377\377\377\13\0\0\0\0\377\377\377;\377"
+ "\377\377\373\377\377\377\363\377\377\377%\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\354\377\377\377\366"
+ "\377\377\377%\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\354\377\377\377\366\377\377\377"
+ "%\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377"
+ "\377\377\375\377\377\377\237\377\377\377j\377\377\377\374\377\377\377\376"
+ "\377\377\377\214\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377"
+ "\377\377\361\377\377\377\352\0\0\0\0\377\377\377\306\377\377\377\375\377"
+ "\377\377=\377\377\377\211\377\377\377\377\377\377\377\252\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\325"
+ "\377\377\377\13\0\0\0\0\377\377\377;\377\377\377\373\377\377\377\363\377"
+ "\377\377%\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\351"
+ "\377\377\377\377\377\377\377\243\0\0\0\0\0\0\0\0\377\377\377r\377\377\377"
+ "\375\377\377\377\363\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377\224\377\377\377\377\377\377\377\257\0\0\0\0\0\0\0\0\377\377"
+ "\377;\377\377\377\373\377\377\377\372\377\377\3778\377\377\377\377\377\377"
+ "\377\377\377\377\377\13\377\377\377\351\377\377\377\377\377\377\377\252\0"
+ "\0\0\0\0\0\0\0\377\377\377b\377\377\377\375\377\377\377\332\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\312\377\377\377\377"
+ "\377\377\377\372\377\377\377f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377"
+ "\333\377\377\377\13\0\0\0\0\0\0\0\0\377\377\377S\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\306\377\377"
+ "\377\376\377\377\377U\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377i\0\0\0\0"
+ "\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\204\377\377\377\377\377\377\377"
+ "\322\0\0\0\0\0\0\0\0\377\377\377\241\377\377\377\377\377\377\377\264\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\377\377\377\224\377\377\377\377\377"
+ "\377\377\266\377\377\377;\377\377\377\374\377\377\377\377\377\377\377\226"
+ "\377\377\377l\377\377\377\377\377\377\377\300\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\377\377\377u\377\377\377\376\377\377\377\361\377\377"
+ "\377\325\377\377\377\377\377\377\377\252\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377s\377\377\377\377\377\377\377\333\0\0"
+ "\0\0\0\0\0\0\377\377\377\215\377\377\377\377\377\377\377\277\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\314\377\377\377\377\377\377\377\333\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377E\377\377\377\217\377\377"
+ "\377\373\377\377\377\343\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377"
+ "\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\376\377"
+ "\377\377\247\377\377\377I\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377\214\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\364\377\377\377\245\377\377\377\372\377\377\377\355\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\324\377\377\377"
+ "\343\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\205\377\377\377"
+ "\271\377\377\377\376\377\377\377\303\377\377\377\262\377\377\377\377\377"
+ "\377\377\315\377\377\377l\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\220\377\377\377\341\377\377\377\377"
+ "\377\377\377\377\377\377\377\233\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\257\377\377\377)\377\377\377"
+ "\313\377\377\377\377\377\377\377\377\377\377\377\375\377\377\377\\\377\377"
+ "\377\377\377\377\377\377\377\377\377\13\377\377\377\342\377\377\377\377\377"
+ "\377\377\373\377\377\377\377\377\377\377\265\0\0\0\0\377\377\377\266\377"
+ "\377\377\377\377\377\377\215\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377"
+ "\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
+ "\360\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\261\377\377\377\377\377\377\377"
+ "\377\377\377\377\332\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377`\377\377\377\262\377\377\377\251\377\377\377\354"
+ "\377\377\377\373\377\377\377\261\377\377\377\262\377\377\377\224\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377v\377\377\377\263\377\377\377\255\377\377\377\255\377"
+ "\377\377\255\377\377\377\255\377\377\377\263\377\377\377\224\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\356\377\377\377\366\377\377"
+ "\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377"
+ "\13\377\377\377\356\377\377\377\363\371\371\377.\377\377\377\362\377\377"
+ "\377\375\377\377\377B\377\377\377\335\377\377\377\366\377\377\377%\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224"
+ "\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377U\377\377\377\373"
+ "\377\377\377\376\377\377\377s\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\205\377\377\377\271\377\377\377"
+ "\332\377\377\377\377\377\377\377\373\377\377\377r\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\377\377\377\33\377\377\377\362\377\377\377\377\377\377\377"
+ "\242\377\377\377E\377\377\377x\377\377\377\374\377\377\377\336\377\377\377"
+ "K\377\377\377\13\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377"
+ "\377\216\377\377\377]\0\0\0\0\0\0\0\0\377\377\377\251\377\377\377\377\377"
+ "\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "\312\377\377\377\377\377\377\377\356\377\377\377v\0\0\0\0\377\377\377\220"
+ "\377\377\377\374\377\377\377\363\377\377\377\33\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\324\377\377\377\376\377"
+ "\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377j\377\377\377\374\377\377\377\367\377\377\377\260\377\377\377"
+ "\342\377\377\377\377\377\377\377\376\377\377\377\224\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\3775\377\377\377\347\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\343\377\377\377\374\377\377"
+ "\377\360\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
+ "\377\377\25\377\377\377\337\377\377\377\377\377\377\377\361\377\377\377\200"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377b\377\377\377\232\377\377\377\232\377\377\377\232\377\377\377"
+ "\232\377\377\377\232\377\377\377\232\377\377\377}\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377_\377\377\377"
+ "\345\377\377\377\377\377\377\377\361\377\377\3778\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377V\377\377\377\376\377"
+ "\377\377\344\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\377\377\377K\377\377\377\374\377\377\377\245\377\377\377l\377\377\377"
+ "\377\377\377\377\344\377\377\377v\377\377\377;\377\377\377\375\377\377\377"
+ "l\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377;\377\377\377\373\377"
+ "\377\377\376\377\377\377\301\377\377\377\271\377\377\377\374\377\377\377"
+ "\376\377\377\377v\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
+ "\377\224\377\377\377\377\377\377\377\304\377\377\377e\377\377\377x\377\377"
+ "\377\300\377\377\377\376\377\377\377\367\377\377\377)\377\377\377\377\377"
+ "\377\377\377\377\377\377\13\377\377\377\361\377\377\377\367\377\377\377)"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377i\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\307\377\377\377\376\377\377\377i\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\343\377"
+ "\377\377|\377\377\377\202\377\377\377\211\377\377\377\202\377\377\377\13"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377"
+ "\355\377\377\377\373\377\377\377\300\377\377\377\276\377\377\377\276\377"
+ "\377\377\302\377\377\377G\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
+ "\377U\377\377\377\374\377\377\377\352\377\377\377\13\0\0\0\0\377\377\377"
+ "\307\377\377\377\374\377\377\377\377\377\377\377\372\377\377\377)\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377"
+ "\377\240\377\377\377\200\377\377\377\210\377\377\377\202\377\377\377\371"
+ "\377\377\377\366\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\377\377\377"
+ "\377\252\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224"
+ "\377\377\377\377\377\377\377\377\377\377\377\311\377\377\377\343\377\377"
+ "\377\377\377\377\377\225\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\313\377\377\377\366\377\377\377]\377\377\377\375\377\377"
+ "\377\377\377\377\377\211\377\377\377\354\377\377\377\333\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377"
+ "\377V\377\377\377\252\377\377\377\377\377\377\377\244\377\377\377\354\377"
+ "\377\377\334\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377U\377\377"
+ "\377\374\377\377\377\326\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\307"
+ "\377\377\377\376\377\377\377\177\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377\224\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\374\377\377\377\324\377\377\377)\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\377\377\377U\377\377\377\374\377\377\377\327\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\307\377\377\377\376\377\377\377l\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377"
+ "\377\377\365\377\377\377\357\377\377\377\377\377\377\377\377\377\377\377"
+ "\224\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\210\377\377\377\335\377\377\377\377\377\377\377"
+ "\377\377\377\377\315\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
+ "\377\313\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377\13\377"
+ "\377\377\355\377\377\377\366\377\377\377)\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\377\377\377\215\377\377\377\377\377\377\377\254\377\377"
+ "\377c\377\377\377\377\377\377\377\273\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\377\377\377\13\377\377\377\361\377\377\377\340\377\377\377\277"
+ "\377\377\377\367\377\377\377\351\377\377\377\352\377\377\377\300\377\377"
+ "\377\375\377\377\377I\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\307\377\377\377\377\377\377\377\377\377\377\377\335\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377}\377\377\377\376\377\377\377\377\377\377\377\252\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\325\377\377\377\377\377\377\377\264\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\224\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\342\377\377\377\375\377\377\3778\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
+ "\364\377\377\377\254\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377I\377\377\377\340\377\377\377\240\0\0\0\0\0\0\0\0"
+ "\377\377\377}\377\377\377\341\377\377\377Z\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377Q\377\377\377\306\377\377\377"
+ "\366\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\332\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377"
+ "\376\377\377\377b\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\320\377\377\377\376"
+ "\377\377\377l\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\317\377"
+ "\377\377\376\377\377\377l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\356\377\377\377"
+ "\372\377\377\377)\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377"
+ "\333\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\351"
+ "\377\377\377\377\377\377\377\361\377\377\377\354\377\377\377\354\377\377"
+ "\377\354\377\377\377\376\377\377\377\376\377\377\377l\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377"
+ "\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377\215\377\377\377\377\377\377\377\311\0\0\0\0\0\0\0\0"
+ "\377\377\377\335\377\377\377\376\377\377\377i\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377_\0\0\0\0"
+ "\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377)\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\13\377\377\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377"
+ "\377\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333\377"
+ "\377\377\374\377\377\377\377\377\377\377\311\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377"
+ "\377\361\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\377\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\377"
+ "\377\377\313\377\377\377\371\377\377\377%\377\377\377\224\377\377\377\377"
+ "\377\377\377\252\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224"
+ "\377\377\377\376\377\377\377_\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
+ "\355\377\377\377\366\377\377\377)\377\377\377\377\377\377\377\377\377\377"
+ "\377\13\377\377\377\356\377\377\377\372\377\377\377)\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\345\377\377\377\376\377\377\377i\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377b\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\321\377\377\377\376\377\377\377l\377\377\377\377"
+ "\377\377\377\377\377\377\377\13\377\377\377\356\377\377\377\372\377\377\377"
+ ")\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377"
+ "\377\377\377\377\205\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\333\377\377\377\377"
+ "\377\377\377\377\377\377\377\354\377\377\377\300\377\377\377\\\0\0\0\0\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\313\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377"
+ "\377i\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333\0\0\0"
+ "\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\355"
+ "\377\377\377\375\377\377\377M\377\377\377\13\377\377\377\355\377\377\377"
+ "\375\377\377\377=\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377U\377"
+ "\377\377\374\377\377\377\333\377\377\377\217\377\377\377\373\377\377\377"
+ "\361\377\377\377\312\377\377\377\241\377\377\377\377\377\377\377\215\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\253\377"
+ "\377\377\377\377\377\377\377\377\377\377\315\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\335\377\377\377"
+ "\376\377\377\377i\0\0\0\0\377\377\377\342\377\377\377\375\377\377\377Q\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\315\377\377\377\377\377\377\377\342\377\377\377\13\0\0\0\0\0\0\0"
+ "\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377V\377\377\377\375\377"
+ "\377\377\377\377\377\377\377\377\377\377\252\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377c\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377l\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\360\377\377"
+ "\377\33\377\377\377\205\377\377\377\365\377\377\377\377\377\377\377\364\377"
+ "\377\377\\\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "|\377\377\377\206\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\307"
+ "\377\377\377\377\377\377\377\377\377\377\377\370\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\244\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\205"
+ "\377\377\377\376\377\377\377\336\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\377\377\377\302\377\377\377\377\377\377\377\242\377\377"
+ "\377\374\377\377\377\264\377\377\377\33\377\377\377\371\377\377\377\316\377"
+ "\377\377\377\377\377\377\377\377\377\377b\377\377\377\376\377\377\377\326"
+ "\377\377\377\25\377\377\377\362\377\377\377\377\377\377\377\304\377\377\377"
+ "\372\377\377\377\360\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\317"
+ "\377\377\377\376\377\377\377_\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377"
+ "\377\361\377\377\377\334\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\377\377\377`\377\377\377\374\377\377\377\343\377"
+ "\377\377\313\377\377\377\377\377\377\377\215\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\306\377"
+ "\377\377\371\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377s\377\377\377\377\377\377\377\304\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\320\377"
+ "\377\377\375\377\377\377=\0\0\0\0\0\0\0\0\377\377\377\25\377\377\377\362"
+ "\377\377\377\366\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377i\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377l\377\377\377\373\377\377\377\376\377\377\377\214\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\204\377\377\377\377\377\377\377\333\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\377\377\377\224\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377m\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\33\377"
+ "\377\377\366\377\377\377\367\377\377\377)\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377\317\377\377\377\376\377\377\377e\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\330\377\377\377\371\377\377\377)\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\365\377\377\377"
+ "\363\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\377\377\377\13\377\377\377\351\377\377\377\375\377\377\377=\0\0\0\0\0\0"
+ "\0\0\377\377\377}\377\377\377\374\377\377\377\366\377\377\377%\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377U\377\377\377p\377"
+ "\377\377M\377\377\377!\377\377\377\373\377\377\377\333\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\234\377"
+ "\377\377\374\377\377\377\377\377\377\377\320\377\377\377%\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\320\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\337\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\271\377\377\377\377\377\377\377\377\377\377"
+ "\377\267\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\251\377\377\377V\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377K\377\377"
+ "\377\374\377\377\377\245\377\377\377|\377\377\377\377\377\377\377y\0\0\0"
+ "\0\377\377\377\247\377\377\377\376\377\377\377l\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377\240\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\373\377\377\377\377\377\377\377\304\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377"
+ "\377\377\377\377\244\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377"
+ "\376\377\377\377l\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\334"
+ "\377\377\377\377\377\377\377\205\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377"
+ "\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377"
+ "\377\377\376\377\377\377i\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
+ "\377K\377\377\377\374\377\377\377\327\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377"
+ "\377\355\377\377\377\366\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\377\377\377\25\377\377\377\362\377"
+ "\377\377\375\377\377\377=\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377"
+ "\377\371\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "\313\377\377\377\376\377\377\377b\0\0\0\0\0\0\0\0\377\377\377\13\377\377"
+ "\377\355\377\377\377\366\377\377\377%\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377"
+ "\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\377\377"
+ "\377\377\257\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "\224\377\377\377\377\377\377\377\331\0\0\0\0\377\377\377j\377\377\377\376"
+ "\377\377\377\366\377\377\377)\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377\313\377\377\377\371\377\377\377\33\377\377\377\351\377\377\377"
+ "\371\377\377\377!\377\377\377\360\377\377\377\333\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377i\377"
+ "\377\377\33\377\377\377\365\377\377\377\365\377\377\377\361\377\377\377\333"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377K\377\377\377\374\377"
+ "\377\377\364\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\340\377\377"
+ "\377\376\377\377\377l\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "\224\377\377\377\377\377\377\377\257\0\0\0\0\377\377\377\13\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377I\377\377\377"
+ "\373\377\377\377\363\377\377\377%\0\0\0\0\0\0\0\0\377\377\377\13\377\377"
+ "\377\345\377\377\377\376\377\377\377i\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\224\377\377\377\377\377\377\377\243\0\0\0\0\377\377\377"
+ "\330\377\377\377\377\377\377\377\257\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "l\377\377\377\373\377\377\377\375\377\377\377M\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366"
+ "\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\313\377\377\377\376\377\377\377b\0\0\0\0\0\0\0\0\377\377"
+ "\377\13\377\377\377\361\377\377\377\355\377\377\377\33\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\377\377\377!\377\377\377\372\377\377\377\337"
+ "\377\377\377\257\377\377\377\376\377\377\377l\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\324\377\377\377\370\377\377\377"
+ "\360\377\377\377\323\377\377\377\255\377\377\377\375\377\377\377\333\377"
+ "\377\377\371\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\377\377\377l\377\377\377\376\377\377\377\337\377\377\377\326\377\377\377"
+ "\377\377\377\377\234\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\356\377\377\377\372\377\377"
+ "\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\377\377\377\232\377\377\377\377\377\377\377\346\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\224\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\232\377\377\377\377\377\377\377\244\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\13\377\377\377\364\377\377\377\254\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\215\377\377\377\376\377\377\377\376\377\377\377\313\377"
+ "\377\377\224\377\377\377\202\377\377\377\374\377\377\377\332\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\376\377"
+ "\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\324\377\377\377\376\377\377"
+ "\377i\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\314\377\377\377"
+ "\376\377\377\377b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\377\377\377\13\377\377\377\355\377\377\377\374\377"
+ "\377\377)\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\352\377"
+ "\377\377\377\377\377\377\321\377\377\377\321\377\377\377\316\377\377\377"
+ "\322\377\377\377\316\377\377\377\315\377\377\377G\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377"
+ "\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\13\377\377\377\361\377\377\377\377\377\377\377\362\377\377"
+ "\377\366\377\377\377\377\377\377\377\326\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377i\0\0"
+ "\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\13\377\377\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\13\377\377\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\374\377\377\377"
+ "\377\377\377\377\370\377\377\377\366\377\377\377\376\377\377\377\214\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\361\377\377"
+ "\377\333\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377%\377\377\377"
+ "\223\377\377\377\377\377\377\377\252\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\224\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377"
+ "\377\13\377\377\377\355\377\377\377\366\377\377\377%\377\377\377\377\377"
+ "\377\377\377\377\377\377\13\377\377\377\355\377\377\377\374\377\377\377)"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\317\377\377\377\376\377\377\377l\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\376\377"
+ "\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\324\377\377\377\376\377\377"
+ "\377i\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\355\377"
+ "\377\377\374\377\377\377)\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377"
+ "\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377"
+ "\377\377\313\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377u\377\377\377\302\377\377\377\357\377\377\377\377\377\377\377\377\377"
+ "\377\377\276\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\313\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377"
+ "\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377;\377\377\377\374\377\377"
+ "\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377"
+ "\377\240\377\377\377\377\377\377\377\266\377\377\377s\377\377\377\377\377"
+ "\377\377\315\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377"
+ "\25\377\377\377\361\377\377\377\361\377\377\377\320\377\377\377\344\377\377"
+ "\377\303\377\377\377\356\377\377\377\316\377\377\377\375\377\377\377M\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\275\377"
+ "\377\377\377\377\377\377\377\377\377\377\314\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377v\377\377\377\377"
+ "\377\377\377\321\377\377\377M\377\377\377\375\377\377\377\327\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\307\377\377\377\377\377\377\377\346\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377b\377\377\377"
+ "\237\377\377\377\374\377\377\377\336\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377"
+ "\377\376\377\377\377\263\377\377\377f\377\377\377\13\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\371\371\377.\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377B\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377\25\377\377\377\304\377\377\377\322\377\377\377S\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\214\377\377\377\374\377"
+ "\377\377\33\377\377\377\222\377\377\377\374\377\377\377%\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\247\377\377\377\377"
+ "\377\377\377\302\377\377\377\\\377\377\3772\377\377\377\264\377\377\377\377"
+ "\377\377\377\326\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
+ "\377\315\377\377\377\377\377\377\377\257\377\377\377;\377\377\377\375\377"
+ "\377\377b\377\377\377\13\377\377\377\360\377\377\377\337\377\377\377\377"
+ "\377\377\377\377\377\377\377\204\377\377\377\377\377\377\377\322\0\0\0\0"
+ "\377\377\377\33\377\377\377\356\377\377\377\377\377\377\377\377\377\377\377"
+ "\217\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\247\377\377\377\377\377"
+ "\377\377\210\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377V\377\377\377\374\377\377"
+ "\377\326\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\377\377\377\317\377\377\377\374\377\377\3778\377\377\377\13\377"
+ "\377\377\351\377\377\377\366\377\377\377\33\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\324\377\377\377\374"
+ "\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\3775\377\377\377\347\377\377\377\367\377\377"
+ "\377\232\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377_\377"
+ "\377\377\355\377\377\377\367\377\377\377}\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377"
+ "\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\261\377\377\377\377\377\377\377\257\0\0"
+ "\0\0\0\0\0\0\377\377\377\204\377\377\377\377\377\377\377\322\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\213\377\377\377\376\377\377\377U\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\375\377\377"
+ "\377\373\377\377\377s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\214\377\377\377}\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377j\377\377\377\376\377\377\377\333\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377~\377\377\377\202\377\377\377\202\377\377"
+ "\377\201\377\377\377\231\377\377\377\377\377\377\377\343\377\377\377z\377"
+ "\377\377\33\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\205\377\377"
+ "\377j\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\376\377\377\377\343"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\255\377\377"
+ "\377\377\377\377\377\264\0\0\0\0\0\0\0\0\377\377\377\25\377\377\377\356\377"
+ "\377\377\372\377\377\377)\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\327\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\356"
+ "\377\377\377\375\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\355\377"
+ "\377\377\367\377\377\377)\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\377\377\3775\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\377\377"
+ "\377\377\257\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377_\377\377\377\355\377\377\377\367\377\377\377}\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\3775\377\377\377\347\377\377\377\367\377\377\377\232\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\3772\377\377\377\327\377\377\377\377\377\377\377\375\377\377\377"
+ "z\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\377\377\3775\377\377\377\362\377\377\377\377\377\377\377"
+ "\346\377\377\377V\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377S\377\377\377\320\377\377\377"
+ "\305\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\377\377\377K\377\377\377\374\377\377\377\252\377\377\377K\377\377\377\374"
+ "\377\377\377\376\377\377\377\363\377\377\377\377\377\377\377\377\377\377"
+ "\377l\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\335\377\377\377"
+ "\376\377\377\377l\0\0\0\0\0\0\0\0\377\377\377;\377\377\377\373\377\377\377"
+ "\363\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224"
+ "\377\377\377\377\377\377\377\243\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
+ "\343\377\377\377\376\377\377\377l\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377\232\377\377\377\377\377\377\377\356\377\377\377)\0\0\0\0\0\0"
+ "\0\0\377\377\3775\377\377\377\260\377\377\377\13\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377U\0\0\0\0\0\0"
+ "\0\0\377\377\377\276\377\377\377\377\377\377\377\346\377\377\377\13\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377\377\374\377\377\377"
+ "\326\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377"
+ "\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377\312\377\377\377\377\377\377\377\321\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377%\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\376\377\377\377i\0\0"
+ "\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\355\377\377\377\366\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377j\377\377\377\330\377\377\377%\0"
+ "\0\0\0\0\0\0\0\377\377\377\312\377\377\377\377\377\377\377\206\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377"
+ "\377\377\244\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\377\377\377\377"
+ "\277\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377"
+ "\377\355\377\377\377\366\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377"
+ "\371\377\377\377%\377\377\377]\377\377\377f\377\377\377\13\377\377\377\361"
+ "\377\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
+ "\377\313\377\377\377\376\377\377\377i\0\0\0\0\377\377\377\232\377\377\377"
+ "\377\377\377\377\377\377\377\377\327\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377\334\377\377\377\377\377\377\377\252\0\0\0\0\0\0"
+ "\0\0\377\377\377}\377\377\377\376\377\377\377\363\377\377\377%\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377"
+ "\252\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\332\377\377\377\377\377\377\377\251\0\0"
+ "\0\0\0\0\0\0\377\377\377\214\377\377\377\377\377\377\377\355\377\377\377"
+ "\13\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377"
+ "\377\377\377\252\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\375\377"
+ "\377\377Q\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\205"
+ "\377\377\377\304\377\377\377\13\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
+ "\362\377\377\377\375\377\377\377Q\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377"
+ "%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
+ "\377\312\377\377\377\377\377\377\377\264\0\0\0\0\0\0\0\0\377\377\377}\377"
+ "\377\377\376\377\377\377\332\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\330\377\377\377\376\377\377\377\372\377"
+ "\377\377\360\377\377\377\33\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377\305\377\377\377\377\377\377\377\377\377\377\377\237"
+ "\377\377\377l\377\377\377\376\377\377\377\377\377\377\377\336\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\351\377\377"
+ "\377\376\377\377\377l\377\377\377K\377\377\377\374\377\377\377\372\377\377"
+ "\3772\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\13\377\377\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377;\377\377\377"
+ "\373\377\377\377\372\377\377\377=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224"
+ "\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377!\377\377"
+ "\377\372\377\377\377\347\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\364\377"
+ "\377\377\254\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377"
+ "\377\377\376\377\377\377b\0\0\0\0\0\0\0\0\377\377\377b\377\377\377\375\377"
+ "\377\377\332\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "\224\377\377\377\377\377\377\377~\0\0\0\0\0\0\0\0\377\377\377U\377\377\377"
+ "\374\377\377\377\366\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377\266\377\377\377\377\377\377\377\326\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\13\377\377\377e\0\0\0\0\377\377\377\377\377\377\377\377\377"
+ "\377\377\13\377\377\377\355\377\377\377\376\377\377\377v\0\0\0\0\0\0\0\0"
+ "\377\377\377s\377\377\377\376\377\377\377\332\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\317\377\377\377\377\377\377\377\251\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377j\377\377\377\375\377\377\377\326\377\377\377\302\377\377\377"
+ "\304\377\377\377\206\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0"
+ "\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377%\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377"
+ "\377\355\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355"
+ "\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\361\377\377\377=\377"
+ "\377\377V\377\377\377\374\377\377\377\375\377\377\377M\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\361"
+ "\377\377\377\355\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\377\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\377\377\377"
+ "\313\377\377\377\371\377\377\377%\377\377\377\223\377\377\377\377\377\377"
+ "\377\252\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377"
+ "\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377"
+ "\377\377\366\377\377\377%\377\377\377\377\377\377\377\377\377\377\377\13"
+ "\377\377\377\355\377\377\377\376\377\377\377\215\0\0\0\0\0\0\0\0\377\377"
+ "\377V\377\377\377\374\377\377\377\367\377\377\377)\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377~\0\0\0\0\0\0"
+ "\0\0\377\377\377K\377\377\377\374\377\377\377\366\377\377\377)\377\377\377"
+ "\377\377\377\377\377\377\377\377\13\377\377\377\355\377\377\377\376\377\377"
+ "\377v\0\0\0\0\0\0\0\0\377\377\377s\377\377\377\375\377\377\377\332\0\0\0"
+ "\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\313\377\377"
+ "\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\3772\377\377\377n\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377`\377\377\377\373\377\377\377\366\377\377\377)\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\317\377\377"
+ "\377\376\377\377\377v\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\314\377\377\377\376\377\377\377b\0\0\0\0"
+ "\0\0\0\0\377\377\377\254\377\377\377\377\377\377\377\332\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\366\377"
+ "\377\377\361\377\377\377\331\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\320\377\377\377\377"
+ "\377\377\377\377\377\377\377\273\377\377\377\205\377\377\377\377\377\377"
+ "\377\376\377\377\377\355\377\377\377\33\377\377\377\377\377\377\377\377\0"
+ "\0\0\0\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\336\377\377\377"
+ "\330\377\377\377\377\377\377\377\256\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\342\377\377\377\375\377"
+ "\377\377\326\377\377\377\376\377\377\377~\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\275\377\377\377\377\377\377"
+ "\377\345\377\377\377\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\323\377\377\377"
+ "\360\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377"
+ "\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377\33\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\377\377\377\0\377"
+ "\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\206\377\377\377\377\377\377"
+ "\377\377\377\377\377\260\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377"
+ "\377\313\377\377\377\360\377\377\377\13\377\377\377\316\377\377\377\352\377"
+ "\377\377\13\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
+ "\377\205\377\377\377\365\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\356\377\377\3778\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\377\377\377\224\377\377\377\377\377\377\377\311\0\0\0\0\377"
+ "\377\377K\377\377\377\374\377\377\377\316\377\377\377y\377\377\377\374\377"
+ "\377\377\273\377\377\377\377\377\377\377\377\377\377\377!\377\377\377\371"
+ "\377\377\377\377\377\377\377\315\377\377\377\242\377\377\377\360\377\377"
+ "\377\377\377\377\377\377\377\377\377\370\377\377\377\237\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377`\377\377\377\375\377\377\377\327\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\266\377\377\377\377\377\377\377\217\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\371\371\377.\377\377"
+ "\377M\0\0\0\0\0\0\0\0\371\371\377.\377\377\377M\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377|\377\377"
+ "\377s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\232\377\377\377\377\377\377\377\377\377"
+ "\377\377\343\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\232\377\377\377\377\377\377\377\377\377\377\377\326\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377!\377\377"
+ "\377\371\377\377\377\352\377\377\377\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\3778\377\377\377\372\377\377"
+ "\377\377\377\377\377\275\377\377\377\253\377\377\377\374\377\377\377\376"
+ "\377\377\377s\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "r\377\377\377\314\377\377\377\304\377\377\377\332\377\377\377\377\377\377"
+ "\377\321\377\377\377\307\377\377\377\271\377\377\377\13\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\263\377\377\377\377\377\377\377\377\377"
+ "\377\377\350\377\377\377\307\377\377\377\322\377\377\377\321\377\377\377"
+ "\310\377\377\377\33\377\377\377\377\377\377\377\377\377\377\3778\377\377"
+ "\377\373\377\377\377\377\377\377\377\325\377\377\377\242\377\377\377\275"
+ "\377\377\377\371\377\377\377\377\377\377\377\272\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377"
+ "\377\377\374\377\377\377\333\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\377\377\3778\377\377\377\373\377\377\377\377\377\377\377\321\377\377"
+ "\377\250\377\377\377\307\377\377\377\375\377\377\377\377\377\377\377\234"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\33\377\377\377"
+ "\362\377\377\377\377\377\377\377\313\377\377\377\214\377\377\377\345\377"
+ "\377\377\377\377\377\377\322\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\376\377\377\377\326\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
+ "\377\302\377\377\377\377\377\377\377\346\377\377\377\226\377\377\377\201"
+ "\377\377\377\320\377\377\377\377\377\377\377\347\377\377\377\13\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\266\377\377\377\377\377\377\377"
+ "\307\377\377\377\250\377\377\377\335\377\377\377\377\377\377\377\356\377"
+ "\377\377\33\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\232\377\377\377\377\377\377\377\377\377\377\377\326\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\232\377\377\377\377\377\377\377\377\377\377\377\343\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\207\377\377\377\374\377\377\377\266"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\377\377\377V\377\377\377\375\377\377\377\247\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\306\377\377\377\377\377\377\377\376\377"
+ "\377\377l\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377"
+ "\377\13\377\377\377\355\377\377\377\352\0\0\0\0\377\377\377s\377\377\377"
+ "\314\377\377\377\315\377\377\377v\377\377\377\245\377\377\377%\377\377\377"
+ "\377\377\377\377\377\377\377\377K\377\377\377\373\377\377\377\360\377\377"
+ "\377\33\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\335\377\377\377\376\377\377\377"
+ "~\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377"
+ "\377\377\377\335\377\377\377\275\377\377\377\310\377\377\377\366\377\377"
+ "\377\377\377\377\377\346\377\377\377\33\377\377\377\377\377\377\377\377\0"
+ "\0\0\0\377\377\377\13\377\377\377\342\377\377\377\377\377\377\377\370\377"
+ "\377\377\300\377\377\377\276\377\377\377\371\377\377\377\377\377\377\377"
+ "\227\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\312\377\377\377"
+ "\377\377\377\377\325\377\377\377\303\377\377\377\361\377\377\377\377\377"
+ "\377\377\375\377\377\377f\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377K\377\377\377\374\377\377\377\362\377\377\377\316\377\377\377"
+ "\316\377\377\377\316\377\377\377\322\377\377\377\273\377\377\377\13\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\356\377\377\377"
+ "\366\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\3778\377\377\377\371\377\377\377\377\377"
+ "\377\377\352\377\377\377\271\377\377\377\321\377\377\377\375\377\377\377"
+ "\372\377\377\377)\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313"
+ "\377\377\377\376\377\377\377l\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
+ "\355\377\377\377\366\377\377\377)\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377u\377\377\377\325\377\377\377\316\377\377\377\371\377\377\377"
+ "\373\377\377\377\320\377\377\377\322\377\377\377\207\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\302\377\377\377\377\377\377\377"
+ "\365\377\377\377\266\377\377\377\324\377\377\377\377\377\377\377\375\377"
+ "\377\377=\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224"
+ "\377\377\377\377\377\377\377\252\0\0\0\0\0\0\0\0\377\377\3778\377\377\377"
+ "\372\377\377\377\376\377\377\377i\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377\13\377\377\377\356\377\377\377\376\377\377\377\320\377\377\377"
+ "\316\377\377\377\316\377\377\377\316\377\377\377\322\377\377\377V\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\371\377\377"
+ "\377%\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\361\377\377\377\333\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377"
+ "\376\377\377\377l\0\0\0\0\377\377\377\13\377\377\377\352\377\377\377\377"
+ "\377\377\377\332\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
+ "\377j\377\377\377\375\377\377\377\377\377\377\377\321\377\377\377\302\377"
+ "\377\377\375\377\377\377\377\377\377\377\234\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\252\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377j\377\377\377\375\377\377\377\377\377\377\377\320"
+ "\377\377\377\307\377\377\377\375\377\377\377\377\377\377\377\216\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377"
+ "\377\377\377\252\0\0\0\0\0\0\0\0\377\377\377\266\377\377\377\377\377\377"
+ "\377\336\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377"
+ "\351\377\377\377\377\377\377\377\370\377\377\377\306\377\377\377\264\377"
+ "\377\377\351\377\377\377\377\377\377\377\343\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\356\377\377"
+ "\377\366\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377b\377\377\377\375\377\377\377\377\377\377\377\325"
+ "\377\377\377\307\377\377\377\374\377\377\377\377\377\377\377\227\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\232"
+ "\377\377\377\377\377\377\377\377\377\377\377\304\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\377"
+ "\377\377\377\375\377\377\377_\377\377\377\33\377\377\377\365\377\377\377"
+ "\377\377\377\377\322\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
+ "\377\377\253\377\377\377\377\377\377\377\322\0\0\0\0\0\0\0\0\377\377\377"
+ "\275\377\377\377\377\377\377\377\315\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\356\377\377\377\366"
+ "\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\334\377\377\377\377\377\377\377\372\377\377\377\310\377"
+ "\377\377\316\377\377\377\316\377\377\377\321\377\377\377\310\377\377\377"
+ "%\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224"
+ "\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\317\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\364\377"
+ "\377\377\254\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\307\377"
+ "\377\377\377\377\377\377\336\377\377\377\233\377\377\377\305\377\377\377"
+ "\376\377\377\377\377\377\377\377\332\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377\224\377\377\377\377\377\377\377\376\377\377\377"
+ "\307\377\377\377\255\377\377\377\370\377\377\377\377\377\377\377\272\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377!\377\377\377\366"
+ "\377\377\377\377\377\377\377\346\377\377\377\271\377\377\377\270\377\377"
+ "\377\365\377\377\377\375\377\377\377M\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\255\377\377\377\377\377\377\377\373\377\377\377\257\377"
+ "\377\377\302\377\377\377\376\377\377\377\377\377\377\377\332\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377`\377\377\377\374\377\377"
+ "\377\377\377\377\377\332\377\377\377\233\377\377\377\260\377\377\377\367"
+ "\377\377\377\316\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377U\377\377\377\374\377\377\377\333\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\215\377"
+ "\377\377\377\377\377\377\342\377\377\377\242\377\377\377\237\377\377\377"
+ "\246\377\377\377\247\377\377\377X\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\377"
+ "\377\377\13\377\377\377\356\377\377\377\366\377\377\377)\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
+ "\356\377\377\377\366\377\377\377)\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377"
+ "\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377K\377\377\377\375\377\377\377\245\0\0\0\0\0\0\0\0\377"
+ "\377\377\233\377\377\377\377\377\377\377\356\377\377\377%\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\355\377"
+ "\377\377\376\377\377\377\302\377\377\377\262\377\377\377\322\377\377\377"
+ "\33\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\361\377\377"
+ "\377\333\0\0\0\0\377\377\377\320\377\377\377\371\377\377\377%\377\377\377"
+ "\223\377\377\377\377\377\377\377\252\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\224\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\377\377"
+ "\377\13\377\377\377\356\377\377\377\366\377\377\377)\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377\214\377\377\377\377\377\377\377\376\377"
+ "\377\377\274\377\377\377\255\377\377\377\370\377\377\377\377\377\377\377"
+ "\265\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377"
+ "\377\377\377\377\377\377\376\377\377\377\307\377\377\377\255\377\377\377"
+ "\370\377\377\377\377\377\377\377\272\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377\255\377\377\377\377\377\377\377\373\377\377\377"
+ "\257\377\377\377\302\377\377\377\376\377\377\377\377\377\377\377\332\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\313\377"
+ "\377\377\376\377\377\377l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377\341\377\377\377\377\377\377"
+ "\377\335\377\377\377\233\377\377\377\213\377\377\377\306\377\377\377\377"
+ "\377\377\377\352\377\377\377\13\377\377\377\377\377\377\377\377\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\241\377\377\377\377\377\377\377\365\377\377\377"
+ "\245\377\377\377\255\377\377\377\325\377\377\3772\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\377\377\377\275\377\377\377\377\377\377\377\361\377\377"
+ "\377\252\377\377\377\331\377\377\377\377\377\377\377\377\377\377\377\332"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\266\377\377\377\377\377\377\377\377\377\377\377\336\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\240\377\377"
+ "\377\377\377\377\377\377\377\377\377\207\377\377\377K\377\377\377\374\377"
+ "\377\377\377\377\377\377\315\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377U\377\377\377\374\377\377\377\372\377\377\3778\377\377\377"
+ "!\377\377\377\366\377\377\377\376\377\377\377\177\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\377\377"
+ "\377\377\377\377\377\377\352\377\377\377\13\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\267\377\377\377\377\377\377\377\377"
+ "\377\377\377\311\377\377\377\302\377\377\377\304\377\377\377\304\377\377"
+ "\377\271\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\13\377\377\377\361\377\377\377\327\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377b\377\377\377\374\377\377\377\377\377\377\377\225\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\316\377\377\377\333\0\0\0\0"
+ "\377\377\377\316\377\377\377\334\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377w\377\377\377\343\377"
+ "\377\377\375\377\377\377\201\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\377\377\377\13\377\377\377\244\377\377\377\13\0\0\0\0\0\0\0"
+ "\0\377\377\377\302\377\377\377\377\377\377\377\377\377\377\377\364\377\377"
+ "\377Z\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377~\377\377\377\370"
+ "\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377\275\377\377"
+ "\377\266\377\377\377\376\377\377\377\323\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\335\377\377\377\376\377\377\377~\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377K\377\377"
+ "\377\373\377\377\377\363\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377I\377\377"
+ "\377\357\377\377\377\377\377\377\377\364\377\377\377)\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\376\377\377\377\377\377\377"
+ "\377\244\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\377\377\377\232\377\377\377\377\377\377\377\251\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\377\377\377l\377\377\377\367\377\377\377\377\377\377\377\377\377\377\377"
+ "\376\377\377\377\223\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\232\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\372\377\377\377"
+ ")\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\355\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\360\377\377\377\33\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377j\377\377\377\350\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\376\377\377\377\302\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377;\377\377\377\372\377\377\377\316\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377u\377\377\377\351\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\373\377\377\377\254\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377S\377\377\377"
+ "\354\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\325\377"
+ "\377\377\33\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\214\377\377\377\377\377\377\377\244\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377"
+ "\377\315\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\342\377\377\3772\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\177\377\377\377\365\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\342\377\377\3772\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377}\377\377\377\376\377"
+ "\377\377\377\377\377\377\244\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377I\377\377\377\357\377\377"
+ "\377\377\377\377\377\364\377\377\377)\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\13\377\377\377M\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\232\377\377\377\377\377\377\377\375"
+ "\377\377\377\\\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0"
+ "\0\0\0\377\377\377\255\377\377\377\377\377\377\377\234\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377"
+ "\224\377\377\377\377\377\377\377\276\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\240\377\377\377\377\377\377\377\266\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\377\377\377\215\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\370\377\377\377\312\377\377\377%\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
+ "\316\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377"
+ "\377\377\255\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "\305\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373\377"
+ "\377\377\330\377\377\377V\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\372\377\377\377"
+ ")\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\351"
+ "\377\377\377\366\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377I\377\377\377\345"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\370\377\377"
+ "\377\241\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\313"
+ "\377\377\377\375\377\377\377\\\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377"
+ "\355\377\377\377\355\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0"
+ "\0\377\377\377\224\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\336\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377\13\377\377\377\316\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\373\377\377\377\213\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377"
+ "\377\377\377\377\377\377\252\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\247\377"
+ "\377\377\377\377\377\377\326\377\377\377\377\377\377\377\377\0\0\0\0\377"
+ "\377\377\13\377\377\377\351\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377_\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\313\377\377\377\366\377\377\377"
+ "%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\344\377\377\377\333\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377\307\377\377\377\375\377\377"
+ "\377Q\0\0\0\0\0\0\0\0\377\377\377\204\377\377\377\377\377\377\377\327\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\206\377"
+ "\377\377\371\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377"
+ "\240\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "\215\377\377\377\377\377\377\377\244\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377"
+ "\206\377\377\377\370\377\377\377\377\377\377\377\377\377\377\377\376\377"
+ "\377\377\241\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
+ "\377\377\214\377\377\377\377\377\377\377\252\0\0\0\0\0\0\0\0\377\377\377"
+ "\33\377\377\377\356\377\377\377\376\377\377\377v\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\377\377\377\25\377\377\377\316\377\377\377\376\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\335\377\377\377)\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377"
+ "\377\377\351\377\377\377\364\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\233\377\377\377\375"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\276\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377;\377\377\377\372\377\377\377\376\377\377\377|\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377u\377\377\377\375\377"
+ "\377\377\355\377\377\377\33\0\0\0\0\377\377\377\320\377\377\377\377\377\377"
+ "\377\244\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\33\377\377\377"
+ "\366\377\377\377\372\377\377\377=\0\0\0\0\0\0\0\0\377\377\377\33\377\377"
+ "\377\362\377\377\377\376\377\377\377_\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\351\377\377\377\364\377\377"
+ "\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377"
+ "\13\377\377\377\356\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\376\377\377\377l\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\224\377"
+ "\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377}\377"
+ "\377\377\377\377\377\377\277\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\364\377\377"
+ "\377\254\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\3775\377\377\377"
+ "\347\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\303\377"
+ "\377\377\362\377\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\377\377\377\224\377\377\377\377\377\377\377\345\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\307\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377I\377\377\377\345\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\373\377\377\377\260"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\310"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\326\377\377"
+ "\377\367\377\377\377\315\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\377\377\377l\377\377\377\356\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\370\377\377\377\231\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377;\377\377\377\373\377\377"
+ "\377\322\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377I\377\377\377\373\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\216\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377"
+ "\376\377\377\377i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\351\377\377"
+ "\377\355\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\13\377\377\377\351\377\377\377\355\377\377\377"
+ "\33\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377\13\377\377\377\355\377\377\377\366\377\377\377)\0"
+ "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377K\377\377"
+ "\377\374\377\377\377\252\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\307\377\377"
+ "\377\377\377\377\377\304\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\223\377\377\377\375\377\377\377\377\377\377"
+ "\377\377\377\377\377\372\377\377\377M\377\377\377\377\377\377\377\377\377"
+ "\377\377\13\377\377\377\361\377\377\377\333\0\0\0\0\377\377\377\275\377\377"
+ "\377\371\377\377\377%\377\377\377\223\377\377\377\377\377\377\377\252\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377\224\377\377\377\376\377"
+ "\377\377i\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\351\377\377\377\355"
+ "\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377"
+ "\240\377\377\377\374\377\377\377\377\377\377\377\377\377\377\377\376\377"
+ "\377\377\275\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
+ "\377\377\224\377\377\377\377\377\377\377\352\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\307\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\377\377\377\310\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\337\377\377\377\377\377\377\377\332\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\307\377"
+ "\377\377\375\377\377\377_\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377c\377\377\377\330\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\354\377"
+ "\377\377Z\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\13\377\377\377\333\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\375\377\377\377_\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377\33\377\377\377\350\377\377\377\377\377\377\377\377\377\377\377"
+ "\376\377\377\377\255\377\377\377\362\377\377\377\323\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377;\377\377\377\372"
+ "\377\377\377\376\377\377\377\206\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377b\377\377\377\374\377\377\377\372\377"
+ "\377\377I\377\377\377\13\377\377\377\355\377\377\377\377\377\377\377\243"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\345\377"
+ "\377\377\376\377\377\377\214\0\0\0\0\0\0\0\0\377\377\377j\377\377\377\374"
+ "\377\377\377\363\377\377\377%\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\335\377\377\377\377\377\377\377\236\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\13\377\377"
+ "\377\355\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\372\377\377\377)\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\360"
+ "\377\377\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371"
+ "\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377"
+ "%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377E\377\377\377S\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377Q\377\377\377n\377\377\377\13\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377b\377\377"
+ "\377e\377\377\377\33\0\0\0\0\0\0\0\0\371\371\377.\377\377\3775\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377V\377\377\377\374\377\377\377\364\377\377"
+ "\3772\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377"
+ "\377\377\13\377\377\377\343\377\377\377\377\377\377\377\215\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\371\377\377\377\334\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377E\377\377\377X\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0"
+ "\0\0\0\377\377\377\341\377\377\377\375\377\377\377=\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377e\377\377\377l\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377E\377\377\377X\377\377\377S\377\377\377\13\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377@\377\377\377e\377\377\377c\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377S\377\377\377K\377\377\377I\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377)\377\377\377e\377\377\377n\377\377\377"
+ "8\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377_\377\377\377p\377\377\377I\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377E\377\377\377X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377\371"
+ "\377\377\377\334\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377`\377\377\377I\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377\33\377\377\377\362\377\377\377"
+ "\376\377\377\377\255\377\377\3775\377\377\377V\377\377\377\322\377\377\377"
+ "\255\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377)\377\377\377X\377\377\377V\377\377\377\13\0\0\0"
+ "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377E\377\377\377"
+ "m\377\377\377c\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\371\371\377.\377\377\377m\377\377\377c\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377b\377\377\377c\377\377\377\13"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\320"
+ "\377\377\377\377\377\377\377\333\377\377\377\33\377\377\377E\377\377\377"
+ "\13\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377e\377\377\377e\377\377"
+ "\3778\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "e\377\377\377n\377\377\3775\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\224\377\377\377\376\377\377\377U\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\25\377\377\377\361\377\377\377\366\377\377"
+ "\377%\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\13\377\377\377\364\377\377\377\254\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\377\377\377\216\377\377\377\233\377\377\377\232\377\377\377\232"
+ "\377\377\377\232\377\377\377\232\377\377\377\232\377\377\377\237\377\377"
+ "\377=\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377U\377\377\377n\377\377\3775\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377E\377\377\377n\377\377\3778\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377@\377\377\377m\377\377\377c\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377@\377\377\377p\377"
+ "\377\377I\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377Q\377\377\377p\377\377\377X\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\377\377\377\324\377\377\377\376\377\377\377"
+ "|\377\377\377S\377\377\377V\377\377\377K\377\377\377\263\377\377\377\377"
+ "\377\377\377\252\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\25\377\377\377\362\377\377\377\360\377\377\377"
+ "\33\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377)\377"
+ "\377\377p\377\377\377c\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377b\377\377\377f\377\377\377"
+ "\13\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
+ "\377\224\377\377\377\376\377\377\377U\377\377\377@\377\377\377e\377\377\377"
+ "8\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377@\377\377\377p\377\377\377I\377\377\377;\377\377\377"
+ "\374\377\377\377\333\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377"
+ "\377e\377\377\377e\377\377\377I\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377O\377\377"
+ "\377X\377\377\377U\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377j\377\377\377n\377\377\377\33\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\33\377\377\377"
+ "\362\377\377\377\367\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\13\377\377\377\361\377\377\377\356\377\377\377%\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377\377\377%\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\335\377\377\377\372\377\377\377)\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\267\377\377\377"
+ "\345\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\237\377\377\377\377\377\377\377\361\377\377"
+ "\3772\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377"
+ "\331\377\377\377\377\377\377\377\304\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\3772\377\377\377\337\377\377\377\377\377\377\377\236\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377b\377"
+ "\377\377\376\377\377\377\330\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\3772\377\377\377\337\377\377\377\377\377\377\377\236\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\377\377\3775\377\377\377\344\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\270\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\3775\377\377\377\362\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\210\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\232\377\377\377\377\377\377"
+ "\377\370\377\377\377\364\377\377\377\372\377\377\377\243\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\266\377\377\377\377\377\377\377\225\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\205\377\377\377\371\377\377\377\364"
+ "\377\377\377\364\377\377\377\377\377\377\377\260\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\377\377\377\13\377\377\377\370\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\377m\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\377\377\377\13\377\377\377\345\377\377\377"
+ "\375\377\377\377f\0\0\0\0\0\0\0\0\377\377\3772\377\377\377\326\377\377\377"
+ "\377\377\377\377\245\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
+ "\377\377\234\377\377\377\205\377\377\377I\377\377\377\272\377\377\377\377"
+ "\377\377\377\326\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
+ "\377\224\377\377\377\376\377\377\377i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377K\377\377\377\374\377\377\377\333\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\377\377\377i\377\377\377\203\377\377\377"
+ "\337\377\377\377\377\377\377\377\260\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\275\377\377\377\377\377\377\377"
+ "\377\377\377\377\373\377\377\377\243\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\371\377"
+ "\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377\177\377\377\377\372\377\377\377\376\377\377\377\377\377\377"
+ "\377\333\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\253\377\377"
+ "\377\340\377\377\377%\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\377\377\377\310\377\377\377\307\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377"
+ "\377\377\13\377\377\377\351\377\377\377\377\377\377\377\276\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377"
+ "\377u\377\377\377\325\377\377\377w\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377"
+ "\377\13\377\377\377\351\377\377\377\377\377\377\377\276\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377`\377\377\377\213\377\377\377\203\377\377"
+ "\3778\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\13\377\377\377\251\377\377\377\322\377\377\377\316"
+ "\377\377\377m\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377`\377\377\377\263\377\377\377\263\377\377\377\263\377\377\377\266"
+ "\377\377\377u\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377G\377\377\377\317\377\377\377w\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377i\377\377\377\266"
+ "\377\377\377\263\377\377\377\263\377\377\377\262\377\377\377_\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\377\377\377`\377\377\377y\377\377\377y\377\377\377y"
+ "\377\377\377y\377\377\377y\377\377\377y\377\377\377x\377\377\377\33\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\377\377\377\237\377\377\377\377\377\377\377\377"
+ "\377\377\377\370\377\377\377\370\377\377\377\377\377\377\377\377\377\377"
+ "\377\325\377\377\377\33\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377"
+ ";\377\377\377\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+ "\377\376\377\377\377z\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377"
+ "\377\377\233\377\377\377\377\377\377\377l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377V\377\377\377\376\377\377\377\327\0\0"
+ "\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\377\377\377\13\377\377\377\361\377\377\377\377"
+ "\377\377\377\377\377\377\377\325\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377v\377\377\377\246\377"
+ "\377\377\266\377\377\377u\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377\377\377\372\377\377\377)\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377"
+ "i\377\377\377\266\377\377\377\255\377\377\377\214\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377s\377\377\377|\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377s\377\377\377"
+ "|\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\0\0\0\0\377\377\377_\377\377\377\266\377\377\377\321\377\377\377\316\377"
+ "\377\377\271\377\377\377q\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\377\377\377`\377\377\377\245\377\377\377\267\377\377\377"
+ "\247\377\377\377=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+ "\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0"
+ "\377\377\377E\377\377\377\212\377\377\377%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\13\377\377\377\211\377\377\377=\0"
+ "\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377"
+ "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377"
+ "\377\377\377\377\377\377\377\0\0\0\0\377\377\377v\377\377\377\232\377\377"
+ "\377q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377"
+ "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377"
+ "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\313\377"
+ "\377\377\363\377\377\377\33\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377"
+ "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0"
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377"
+ "\377\377\377\377",
+};
+
diff --git a/libs/minilibx_opengl_20191021/font.xcf b/libs/minilibx_opengl_20191021/font.xcf
new file mode 100644
index 0000000..b9c8c82
Binary files /dev/null and b/libs/minilibx_opengl_20191021/font.xcf differ
diff --git a/libs/minilibx-linux-master/mlx.h b/libs/minilibx_opengl_20191021/mlx.h
similarity index 68%
rename from libs/minilibx-linux-master/mlx.h
rename to libs/minilibx_opengl_20191021/mlx.h
index 74c0aff..e75b4af 100644
--- a/libs/minilibx-linux-master/mlx.h
+++ b/libs/minilibx_opengl_20191021/mlx.h
@@ -2,10 +2,10 @@
** mlx.h for MinilibX in
**
** Made by Charlie Root
-** Login
+** Login
**
** Started on Mon Jul 31 16:37:50 2000 Charlie Root
-** Last update Tue May 15 16:23:28 2007 Olivier Crouzet
+** Last update Tue Oct 01 16:23:28 2014 Olivier Crouzet
*/
/*
@@ -16,14 +16,29 @@
/*
** FR msg - FR msg - FR msg
**
+** MacOSX
+** La MinilibX utilise 2 frameworks Mac : OpenGL et AppKit
+** qu'il faut ajouter a la compilation :
+** -framework OpenGL -framework AppKit
+**
+** UNIX / Linux
** La MinilibX utilise 2 librairies supplementaires qu'il
** est necessaire de rajouter a la compilation :
** -lmlx -lXext -lX11
**
** La MinilibX permet le chargement des images de type Xpm.
** Notez que cette implementation est incomplete.
-** Merci de communiquer tout probleme de chargement d'image
-** de ce type.
+**
+** Il y a des differences entre X11 et MacOS.
+** les numeros des touches ne sont pas les memes,
+** les numeros des boutons souris ne sont pas les memes.
+** Egalement l'expose est gere differemment, et sous MacOS
+** il est preferable d'entrer le plus tot possible dans mlx_loop,
+** il est normal que les fenetres n'apparaissent pas avant mlx_loop
+** (ou bien forcez avec mlx_do_sync mais c'est pas genial).
+** Sous MacOS, l'octet Alpha est pris en compte dans toutes les
+** images, et represente la transparence et non l'opacite comme
+** c'est normalement le cas.
*/
@@ -63,18 +78,16 @@ int mlx_pixel_put(void *mlx_ptr, void *win_ptr, int x, int y, int color);
void *mlx_new_image(void *mlx_ptr,int width,int height);
/*
** return void *0 if failed
-** obsolete : image2 data is stored using bit planes
-** void *mlx_new_image2(void *mlx_ptr,int width,int height);
*/
char *mlx_get_data_addr(void *img_ptr, int *bits_per_pixel,
int *size_line, int *endian);
/*
** endian : 0 = sever X is little endian, 1 = big endian
-** for mlx_new_image2, 2nd arg of mlx_get_data_addr is number_of_planes
+** endian : useless on macos, client and graphical framework have the same endian
*/
int mlx_put_image_to_window(void *mlx_ptr, void *win_ptr, void *img_ptr,
int x, int y);
-int mlx_get_color_value(void *mlx_ptr, int color);
+unsigned int mlx_get_color_value(void *mlx_ptr, int color);
/*
@@ -106,17 +119,16 @@ int mlx_loop (void *mlx_ptr);
int mlx_string_put(void *mlx_ptr, void *win_ptr, int x, int y, int color,
char *string);
-void mlx_set_font(void *mlx_ptr, void *win_ptr, char *name);
void *mlx_xpm_to_image(void *mlx_ptr, char **xpm_data,
int *width, int *height);
void *mlx_xpm_file_to_image(void *mlx_ptr, char *filename,
int *width, int *height);
+void *mlx_png_file_to_image(void *mlx_ptr, char *file, int *width, int *height);
+
int mlx_destroy_window(void *mlx_ptr, void *win_ptr);
int mlx_destroy_image(void *mlx_ptr, void *img_ptr);
-int mlx_destroy_dispaly(void *mlx_ptr);
-
/*
** generic hook system for all events, and minilibX functions that
** can be hooked. Some macro and defines from X11/X.h are needed here.
@@ -125,15 +137,13 @@ int mlx_destroy_dispaly(void *mlx_ptr);
int mlx_hook(void *win_ptr, int x_event, int x_mask,
int (*funct)(), void *param);
+int mlx_mouse_hide();
+int mlx_mouse_show();
+int mlx_mouse_move(void *win_ptr, int x, int y);
+int mlx_mouse_get_pos(void *win_ptr, int *x, int *y);
+
int mlx_do_key_autorepeatoff(void *mlx_ptr);
int mlx_do_key_autorepeaton(void *mlx_ptr);
int mlx_do_sync(void *mlx_ptr);
-int mlx_mouse_get_pos(void *mlx_ptr, void *win_ptr, int *x, int *y);
-int mlx_mouse_move(void *mlx_ptr, void *win_ptr, int x, int y);
-int mlx_mouse_hide(void *mlx_ptr, void *win_ptr);
-int mlx_mouse_show(void *mlx_ptr, void *win_ptr);
-
-int mlx_get_screen_size(void *mlx_ptr, int *sizex, int *sizey);
-
#endif /* MLX_H */
diff --git a/libs/minilibx_opengl_20191021/mlx_init_loop.m b/libs/minilibx_opengl_20191021/mlx_init_loop.m
new file mode 100644
index 0000000..0377771
--- /dev/null
+++ b/libs/minilibx_opengl_20191021/mlx_init_loop.m
@@ -0,0 +1,192 @@
+// mlx_init_loop.m
+// By Ol
+
+#import
+#import
+#import
+
+#include "mlx_int.h"
+#include "mlx_new_window.h"
+
+#include "font.c"
+
+
+void do_loop_hook2(CFRunLoopTimerRef observer, void * info)
+{
+ ((mlx_ptr_t *)info)->loop_hook(((mlx_ptr_t *)info)->loop_hook_data);
+}
+
+
+void do_loop_flush(CFRunLoopObserverRef observer, CFRunLoopActivity activity, void * info)
+{
+ mlx_ptr_t *mlx_ptr;
+ mlx_win_list_t *win;
+
+ mlx_ptr = (mlx_ptr_t *)info;
+ win = mlx_ptr->win_list;
+ while (win)
+ {
+ if (win->nb_flush > 0 && win->pixmgt)
+ {
+ [(id)win->winid selectGLContext];
+ [(id)win->winid mlx_gl_draw];
+ glFlush();
+ win->nb_flush = 0;
+ }
+ win = win->next;
+ }
+}
+
+
+
+
+void *mlx_init()
+{
+ mlx_ptr_t *new_mlx;
+ int bidon;
+ int i;
+
+ if ((new_mlx = malloc(sizeof(*new_mlx))) == NULL)
+ return ((void *)0);
+ new_mlx->win_list = NULL;
+ new_mlx->img_list = NULL;
+ new_mlx->loop_hook = NULL;
+ new_mlx->loop_hook_data = NULL;
+ new_mlx->main_loop_active = 0;
+
+ new_mlx->appid = [NSApplication sharedApplication];
+
+ // super magic trick to detach app from terminal, get menubar & key input events
+ for (NSRunningApplication * app in [NSRunningApplication runningApplicationsWithBundleIdentifier:@"com.apple.finder"])
+ {
+ [app activateWithOptions:NSApplicationActivateIgnoringOtherApps];
+ break;
+ }
+ usleep(100000);
+ ProcessSerialNumber psn = { 0, kCurrentProcess };
+ (void) TransformProcessType(&psn, kProcessTransformToForegroundApplication);
+ usleep(100000);
+ [[NSRunningApplication currentApplication] activateWithOptions:NSApplicationActivateIgnoringOtherApps];
+
+ // load font
+ new_mlx->font = mlx_new_image(new_mlx, (FONT_WIDTH+2)*95, FONT_HEIGHT);
+ i = 0;
+ while (i < 4*(FONT_WIDTH+2)*95*FONT_HEIGHT)
+ {
+ new_mlx->font->buffer[i+0] = font_atlas.pixel_data[i+2];
+ new_mlx->font->buffer[i+1] = font_atlas.pixel_data[i+1];
+ new_mlx->font->buffer[i+2] = font_atlas.pixel_data[i+0];
+ ((unsigned char *)new_mlx->font->buffer)[i+3] = 0xFF-font_atlas.pixel_data[i+3];
+ i += 4;
+ }
+
+
+#ifdef STRINGPUTX11
+ new_mlx->font->vertexes[2] = FONT_WIDTH/1.4;
+ new_mlx->font->vertexes[4] = FONT_WIDTH/1.4;
+ new_mlx->font->vertexes[5] = (-FONT_HEIGHT-1)/1.4;
+ new_mlx->font->vertexes[7] = (-FONT_HEIGHT-1)/1.4;
+#else
+ new_mlx->font->vertexes[2] = FONT_WIDTH;
+ new_mlx->font->vertexes[4] = FONT_WIDTH;
+ new_mlx->font->vertexes[5] = -FONT_HEIGHT-1;
+ new_mlx->font->vertexes[7] = -FONT_HEIGHT-1;
+#endif
+
+ return ((void *)new_mlx);
+}
+
+
+void mlx_loop(mlx_ptr_t *mlx_ptr)
+{
+ CFRunLoopObserverRef observer;
+ CFRunLoopObserverContext ocontext = {.version = 0, .info = mlx_ptr, .retain = NULL, .release = NULL, .copyDescription = NULL};
+
+ mlx_ptr->main_loop_active = 1;
+
+ observer = CFRunLoopObserverCreate(NULL, kCFRunLoopBeforeTimers, true, 0, do_loop_flush, &ocontext);
+ CFRunLoopAddObserver(CFRunLoopGetMain(), observer, kCFRunLoopCommonModes);
+
+ // [[[MlxLoopHookObj alloc] initWithPtr:mlx_ptr] performSelector:@selector(do_loop_hook) withObject:nil afterDelay:0.0];
+
+ [NSApp run];
+}
+
+
+void mlx_pixel_put(mlx_ptr_t *mlx_ptr, mlx_win_list_t *win_ptr, int x, int y, int color)
+{
+ if (!win_ptr->pixmgt)
+ return ;
+ [(id)(win_ptr->winid) selectGLContext];
+ [(id)(win_ptr->winid) pixelPutColor:color X:x Y:y];
+ win_ptr->nb_flush ++;
+}
+
+
+void mlx_int_loop_once()
+{
+ NSEvent *event;
+ NSDate *thedate;
+
+ thedate = [NSDate dateWithTimeIntervalSinceNow:0.1];
+ while (42)
+ {
+ event = [NSApp nextEventMatchingMask:NSEventMaskAny
+ untilDate:thedate
+ inMode:NSDefaultRunLoopMode
+ dequeue:YES];
+ if (event == nil)
+ {
+ [thedate release];
+ return ;
+ }
+ [NSApp sendEvent:event];
+ [NSApp updateWindows];
+ }
+}
+
+
+int mlx_do_sync(mlx_ptr_t *mlx_ptr)
+{
+ mlx_win_list_t *win;
+
+ win = mlx_ptr->win_list;
+ while (win)
+ {
+ if (win->pixmgt)
+ {
+ [(id)(win->winid) selectGLContext];
+ [(id)(win->winid) mlx_gl_draw];
+ glFlush();
+ if (!mlx_ptr->main_loop_active)
+ mlx_int_loop_once();
+ }
+ win = win->next;
+ }
+ return (0);
+}
+
+
+int mlx_loop_hook(mlx_ptr_t *mlx_ptr, void (*fct)(void *), void *param)
+{
+ CFRunLoopTimerContext tcontext = {0, mlx_ptr, NULL, NULL, NULL};
+ CFRunLoopTimerRef timer;
+
+ if (mlx_ptr->loop_hook != NULL)
+ {
+ CFRunLoopTimerInvalidate(mlx_ptr->loop_timer);
+ [(id)(mlx_ptr->loop_timer) release];
+ }
+
+ mlx_ptr->loop_hook = fct;
+ mlx_ptr->loop_hook_data = param;
+
+ if (fct)
+ {
+ timer = CFRunLoopTimerCreate(kCFAllocatorDefault, 0.0, 0.0001, 0, 0, &do_loop_hook2, &tcontext);
+ mlx_ptr->loop_timer = timer;
+ CFRunLoopAddTimer(CFRunLoopGetMain(), timer, kCFRunLoopCommonModes);
+ }
+
+ return (0);
+}
diff --git a/libs/minilibx_opengl_20191021/mlx_int.h b/libs/minilibx_opengl_20191021/mlx_int.h
new file mode 100644
index 0000000..a93c1c9
--- /dev/null
+++ b/libs/minilibx_opengl_20191021/mlx_int.h
@@ -0,0 +1,102 @@
+//
+// mlx_int.h for minilibx
+//
+// ol@staff.42.fr
+//
+// include opengl needed before mlx_int.h
+//
+
+
+#define MAX_EVENT 32
+#define MAX_PIXEL_NB 200000
+#define UNIQ_BPP 4
+
+#define FONT_WIDTH 10
+#define FONT_HEIGHT 20
+
+
+typedef int (*func_t)();
+
+/* structs */
+
+typedef struct glsl_info_s
+{
+ GLuint pixel_vshader;
+ GLuint pixel_fshader;
+ GLuint pixel_program;
+ GLint loc_pixel_position;
+ GLint loc_pixel_texture;
+ GLint loc_pixel_winhalfsize;
+
+ GLuint image_vshader;
+ GLuint image_fshader;
+ GLuint image_program;
+ GLint loc_image_position;
+ GLint loc_image_winhalfsize;
+ GLint loc_image_texture;
+ GLint loc_image_pos;
+ GLint loc_image_size;
+
+ GLuint font_vshader;
+ GLuint font_fshader;
+ GLuint font_program;
+ GLint loc_font_position;
+ GLint loc_font_winhalfsize;
+ GLint loc_font_texture;
+ GLint loc_font_color;
+ GLint loc_font_posinwin;
+ GLint loc_font_posinatlas;
+ GLint loc_font_atlassize;
+} glsl_info_t;
+
+
+typedef struct mlx_img_list_s
+{
+ int width;
+ int height;
+ char *buffer;
+ GLfloat vertexes[8];
+ struct mlx_img_list_s *next;
+} mlx_img_list_t;
+
+
+typedef struct mlx_img_ctx_s
+{
+ GLuint texture;
+ GLuint vbuffer;
+ mlx_img_list_t *img;
+ struct mlx_img_ctx_s *next;
+} mlx_img_ctx_t;
+
+typedef struct mlx_win_list_s
+{
+ void *winid;
+ mlx_img_ctx_t *img_list;
+ int nb_flush;
+ int pixmgt;
+ struct mlx_win_list_s *next;
+} mlx_win_list_t;
+
+
+typedef struct mlx_ptr_s
+{
+ void *appid;
+ mlx_win_list_t *win_list;
+ mlx_img_list_t *img_list;
+ void (*loop_hook)(void *);
+ void *loop_hook_data;
+ void *loop_timer;
+ mlx_img_list_t *font;
+ int main_loop_active;
+} mlx_ptr_t;
+
+// proto
+
+int mlx_shaders(glsl_info_t *glsl);
+char **mlx_int_str_to_wordtab(char *str);
+int mlx_int_str_str(char *str,char *find,int len);
+int mlx_int_str_str_cote(char *str,char *find,int len);
+int mlx_destroy_image(mlx_ptr_t *mlx_ptr, mlx_img_list_t *img_ptr);
+void *mlx_new_image();
+void *mlx_xpm_to_image(mlx_ptr_t *xvar,char **xpm_data,int *width,int *height);
+int mlx_do_sync(mlx_ptr_t *mlx_ptr);
diff --git a/libs/minilibx-linux-master/mlx_int_str_to_wordtab.c b/libs/minilibx_opengl_20191021/mlx_int_str_to_wordtab.c
similarity index 86%
rename from libs/minilibx-linux-master/mlx_int_str_to_wordtab.c
rename to libs/minilibx_opengl_20191021/mlx_int_str_to_wordtab.c
index 7f92089..3b2ef2e 100644
--- a/libs/minilibx-linux-master/mlx_int_str_to_wordtab.c
+++ b/libs/minilibx_opengl_20191021/mlx_int_str_to_wordtab.c
@@ -1,16 +1,10 @@
-/*
-** mlx_int_str_to_wordtab.c for MinilibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Wed Sep 13 11:36:09 2000 Charlie Root
-** Last update Fri Dec 14 11:02:09 2001 Charlie Root
-*/
+//
+// str 2 wordtab & co
+// by ol
-#include "mlx_int.h"
-
+#include
+#include
int mlx_int_str_str(char *str,char *find,int len)
{
diff --git a/libs/minilibx_opengl_20191021/mlx_mouse.m b/libs/minilibx_opengl_20191021/mlx_mouse.m
new file mode 100644
index 0000000..94ce0a9
--- /dev/null
+++ b/libs/minilibx_opengl_20191021/mlx_mouse.m
@@ -0,0 +1,52 @@
+#include
+
+#import
+#import
+
+#include "mlx_int.h"
+#include "mlx_new_window.h"
+
+int mlx_mouse_hide()
+{
+ // CGDisplayHideCursor(kCGDirectMainDisplay);
+ [NSCursor hide];
+ return (0);
+}
+
+int mlx_mouse_show()
+{
+ // CGDisplayShowCursor(kCGDirectMainDisplay);
+ [NSCursor unhide];
+ return (0);
+}
+
+int mlx_mouse_move(mlx_win_list_t *win, int x, int y)
+{
+ CGPoint point;
+ NSRect pos;
+ id thewin;
+
+ thewin = [(id)(win->winid) win];
+ pos = [thewin frame];
+ // printf("got win pos %f %f\n", pos.origin.x, pos.origin.y);
+ point.x = pos.origin.x + x;
+ point.y = NSHeight([[thewin screen] frame]) - NSHeight([(id)(win->winid) frame]) - pos.origin.y + 1 + y;
+ CGWarpMouseCursorPosition(point);
+ CGAssociateMouseAndMouseCursorPosition(true);
+ return (0);
+}
+
+
+int mlx_mouse_get_pos(mlx_win_list_t *win, int *x, int *y)
+{
+ CGPoint point;
+ id thewin;
+ NSRect pos;
+
+ thewin = [(id)(win->winid) win];
+ pos = [(id)(win->winid) frame];
+ point = [thewin mouseLocationOutsideOfEventStream];
+ *x = point.x;
+ *y = NSHeight(pos) - 1 - point.y;
+ return (0);
+}
diff --git a/libs/minilibx_opengl_20191021/mlx_new_image.m b/libs/minilibx_opengl_20191021/mlx_new_image.m
new file mode 100644
index 0000000..46e1df1
--- /dev/null
+++ b/libs/minilibx_opengl_20191021/mlx_new_image.m
@@ -0,0 +1,198 @@
+// mlx_new_image
+//
+// by Ol
+//
+
+
+#import
+#import
+
+#include "mlx_int.h"
+#include "mlx_new_window.h"
+
+
+
+void *mlx_new_image(mlx_ptr_t *mlx_ptr, int width, int height)
+{
+ mlx_img_list_t *newimg;
+
+ // if (mlx_ptr->win_list == NULL)
+ // return (NULL); // need at leat one window created to have openGL context and create texture
+ if ((newimg = malloc(sizeof(*newimg))) == NULL)
+ return ((void *)0);
+ newimg->next = mlx_ptr->img_list;
+ mlx_ptr->img_list = newimg;
+ newimg->width = width;
+ newimg->height = height;
+ newimg->vertexes[0] = 0.0; newimg->vertexes[1] = 0.0;
+ newimg->vertexes[2] = width; newimg->vertexes[3] = 0.0;
+ newimg->vertexes[4] = width; newimg->vertexes[5] = -height;
+ newimg->vertexes[6] = 0.0; newimg->vertexes[7] = -height;
+ newimg->buffer = malloc(UNIQ_BPP*width*height);
+ bzero(newimg->buffer, UNIQ_BPP*width*height);
+
+ return (newimg);
+}
+
+mlx_img_ctx_t *add_img_to_ctx(mlx_img_list_t *img, mlx_win_list_t *win)
+{
+ mlx_img_ctx_t *imgctx;
+
+ imgctx = win->img_list;
+ while (imgctx)
+ {
+ if (imgctx->img == img)
+ return (imgctx);
+ imgctx = imgctx->next;
+ }
+
+ imgctx = malloc(sizeof(*imgctx));
+ imgctx->img = img;
+ imgctx->next = win->img_list;
+ win->img_list = imgctx;
+
+ glGenTextures(1, &(imgctx->texture));
+ glBindTexture(GL_TEXTURE_2D, imgctx->texture);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glTexImage2D(
+ GL_TEXTURE_2D, 0, /* target, level of detail */
+ GL_RGBA8, /* internal format */
+ img->width, img->height, 0, /* width, height, border */
+ GL_BGRA, GL_UNSIGNED_BYTE, /* external format, type */
+ img->buffer /* pixels */
+ );
+
+ glGenBuffers(1, &(imgctx->vbuffer));
+ glBindBuffer(GL_ARRAY_BUFFER, imgctx->vbuffer);
+ glBufferData(GL_ARRAY_BUFFER, sizeof(img->vertexes), img->vertexes, GL_DYNAMIC_DRAW); // 4 points buff
+
+ return (imgctx);
+}
+
+
+void mlx_put_image_to_window(mlx_ptr_t *mlx_ptr, mlx_win_list_t *win_ptr, mlx_img_list_t *img_ptr, int x, int y)
+{
+ mlx_img_ctx_t *imgctx;
+
+ if (!win_ptr->pixmgt)
+ return ;
+
+ [(id)(win_ptr->winid) selectGLContext];
+ imgctx = add_img_to_ctx(img_ptr, win_ptr);
+
+ // update texture
+ glBindTexture(GL_TEXTURE_2D, imgctx->texture);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, img_ptr->width, img_ptr->height, 0,
+ GL_BGRA, GL_UNSIGNED_BYTE, img_ptr->buffer);
+
+ [(id)(win_ptr->winid) mlx_gl_draw_img:img_ptr andCtx:imgctx andX:x andY:y];
+
+ win_ptr->nb_flush ++;
+}
+
+// assume here 32bpp little endian
+
+char *mlx_get_data_addr(mlx_img_list_t *img_ptr, int *bits_per_pixel, int *size_line, int *endian)
+{
+ *bits_per_pixel = UNIQ_BPP*8;
+ *size_line = img_ptr->width*UNIQ_BPP;
+ *endian = 0; // little endian for now on mac-intel
+ return (img_ptr->buffer);
+}
+
+unsigned int mlx_get_color_value(mlx_ptr_t *mlx_ptr, int color)
+{
+ return (color);
+}
+
+int mlx_string_put(mlx_ptr_t *mlx_ptr, mlx_win_list_t *win_ptr, int x, int y, int color, unsigned char *string)
+{
+ mlx_img_ctx_t *imgctx;
+ int gX;
+ int gY;
+
+ if (!win_ptr->pixmgt)
+ return(0);
+
+#ifdef STRINGPUTX11
+ y -= (FONT_HEIGHT * 2)/3;
+#endif
+
+ [(id)(win_ptr->winid) selectGLContext];
+
+ imgctx = add_img_to_ctx(mlx_ptr->font, win_ptr);
+
+ while (*string)
+ {
+ if (*string >= 32 && *string <= 127)
+ {
+ gX = (FONT_WIDTH+2)*(*string-32);
+ gY = 0;
+ // printf("put char %c pos %d %d\n", *string, gX, gY);
+ [(id)(win_ptr->winid) mlx_gl_draw_font:mlx_ptr->font andCtx:imgctx andX:x andY:y andColor:color glyphX:gX glyphY:gY];
+#ifdef STRINGPUTX11
+ x += FONT_WIDTH/1.4;
+#else
+ x += FONT_WIDTH;
+#endif
+ }
+ string ++;
+ }
+
+ win_ptr->nb_flush ++;
+
+ return (0);
+}
+
+int mlx_destroy_image(mlx_ptr_t *mlx_ptr, mlx_img_list_t *img_todel)
+{
+ mlx_img_ctx_t ctx_first;
+ mlx_img_ctx_t *ctx;
+ mlx_img_ctx_t *ctx_to_del;
+ mlx_img_list_t img_first;
+ mlx_img_list_t *img;
+ mlx_win_list_t *win;
+
+ img_first.next = mlx_ptr->img_list;
+ img = &img_first;
+ while (img && img->next)
+ {
+ if (img->next == img_todel)
+ img->next = img->next->next;
+ img = img->next;
+ }
+ mlx_ptr->img_list = img_first.next;
+
+
+ win = mlx_ptr->win_list;
+ while (win)
+ {
+ ctx_first.next = win->img_list;
+ ctx = &ctx_first;
+ while (ctx && ctx->next)
+ {
+ if (ctx->next->img == img_todel)
+ {
+ [(id)(win->winid) selectGLContext];
+ glDeleteBuffers(1, &(ctx->next->vbuffer));
+ glDeleteTextures(1, &(ctx->next->texture));
+ ctx_to_del = ctx->next;
+ ctx->next = ctx->next->next;
+ free(ctx_to_del);
+ }
+ ctx = ctx->next;
+ }
+ win->img_list = ctx_first.next;
+ win = win->next;
+ }
+
+
+ free(img_todel->buffer);
+ free(img_todel);
+
+ // printf("destroy image done.\n");
+ return (0);
+}
diff --git a/libs/minilibx_opengl_20191021/mlx_new_window.h b/libs/minilibx_opengl_20191021/mlx_new_window.h
new file mode 100644
index 0000000..d173e61
--- /dev/null
+++ b/libs/minilibx_opengl_20191021/mlx_new_window.h
@@ -0,0 +1,57 @@
+//
+// mlx_int.h for minilibx
+//
+// ol@staff.42.fr
+//
+// include opengl needed before mlx_int.h
+//
+
+#import
+#import "mlx_int.h"
+
+@interface NSWindowEvent : NSWindow
+{
+ func_t event_funct[MAX_EVENT];
+ void *(event_param[MAX_EVENT]);
+ int keyrepeat;
+ int keyflag;
+ int size_x;
+ int size_y;
+}
+- (NSWindowEvent *) initWithContentRect:(NSRect)rect styleMask:(NSUInteger)winstyle backing:(NSBackingStoreType)bck defer:(BOOL) dfr;
+- (void) setEvent:(int)event andFunc:(func_t)func andParam:(void *)param;
+- (void) setKeyRepeat:(int)mode;
+- (void) exposeNotification:(NSNotification *)note;
+- (void) closeNotification:(NSNotification *)note;
+@end
+
+
+@interface MlxWin : NSOpenGLView
+{
+ NSWindowEvent *win;
+ NSOpenGLContext *ctx;
+ glsl_info_t glsl;
+ int openglwin;
+
+ int size_x;
+ int size_y;
+
+ int pixel_nb;
+ GLuint pixel_vbuffer;
+ GLuint pixel_texture;
+ unsigned int *pixtexbuff;
+}
+
+- (id) initWithRect: (NSRect)rect andTitle: (NSString *)title pfaAttrs: (NSOpenGLPixelFormatAttribute *)attrs;
+- (void) selectGLContext;
+- (void) flushGLContext;
+- (void) pixelPutColor: (int)color X:(int)x Y:(int)y;
+- (void) mlx_gl_draw;
+- (void) mlx_gl_draw_img:(mlx_img_list_t *)img andCtx:(mlx_img_ctx_t *)imgctx andX:(int)x andY:(int)y;
+- (void) mlx_gl_draw_font:(mlx_img_list_t *)img andCtx:(mlx_img_ctx_t *)imgctx andX:(int)x andY:(int)y andColor:(int)color glyphX:(int)gx glyphY:(int)gy;
+- (NSOpenGLContext *) ctx;
+- (NSWindowEvent *) win;
+- (void) setEvent:(int)event andFunc:(func_t)func andParam:(void *)param;
+- (void) setKeyRepeat:(int)mode;
+- (void) ctxNeedsUpdate;
+@end
diff --git a/libs/minilibx_opengl_20191021/mlx_new_window.m b/libs/minilibx_opengl_20191021/mlx_new_window.m
new file mode 100644
index 0000000..6d4fea4
--- /dev/null
+++ b/libs/minilibx_opengl_20191021/mlx_new_window.m
@@ -0,0 +1,766 @@
+// mlx_new_window.m
+
+#import
+#import
+#import
+
+#include
+#include
+
+#include "mlx_int.h"
+#include "mlx_new_window.h"
+
+
+NSOpenGLPixelFormatAttribute pfa_attrs[] =
+ {
+ NSOpenGLPFADepthSize, 32,
+ NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersionLegacy,
+ 0
+ };
+
+static const GLfloat pixel_vertexes[8] =
+ {
+ -1.0 , -1.0,
+ 1.0, -1.0,
+ 1.0, 1.0,
+ -1.0, 1.0
+ };
+
+
+
+int get_mouse_button(NSEventType eventtype)
+{
+ switch (eventtype) {
+ case NSEventTypeLeftMouseDown:
+ case NSEventTypeLeftMouseUp:
+ case NSEventTypeLeftMouseDragged:
+ return 1;
+ case NSEventTypeRightMouseDown:
+ case NSEventTypeRightMouseUp:
+ case NSEventTypeRightMouseDragged:
+ return 2;
+ case NSEventTypeOtherMouseDown:
+ case NSEventTypeOtherMouseUp:
+ case NSEventTypeOtherMouseDragged:
+ return 3;
+ default:
+ return 0;
+ }
+}
+
+
+// classes for window & events
+
+
+
+
+@implementation NSWindowEvent
+
+- (NSWindowEvent *) initWithContentRect:(NSRect)rect styleMask:(NSUInteger)winstyle backing:(NSBackingStoreType)bck defer:(BOOL) dfr
+{
+ int i;
+
+ if ((self = [super initWithContentRect:rect
+ styleMask:winstyle
+ backing:bck
+ defer:dfr]))
+ {
+ i = MAX_EVENT;
+ while (i--)
+ {
+ event_funct[i] = NULL;
+ event_param[i] = NULL;
+ }
+ keyrepeat = 0;
+ keyflag = 0;
+ size_x = rect.size.width;
+ size_y = rect.size.height;
+ }
+ return (self);
+}
+
+
+- (void) setEvent:(int)event andFunc:(func_t)func andParam:(void *)param
+{
+ event_funct[event] = func;
+ event_param[event] = param;
+ if (event == 6 || event == 32) // motion notify && high precision motion notify
+ {
+ if (func == NULL)
+ [self setAcceptsMouseMovedEvents:NO];
+ else
+ [self setAcceptsMouseMovedEvents:YES];
+ }
+}
+
+
+- (void) setKeyRepeat:(int)mode
+{
+ keyrepeat = mode;
+}
+
+- (BOOL) acceptsFirstResponder
+{
+ return (YES);
+}
+
+- (void) flagsChanged:(NSEvent *)theEvent
+{
+ unsigned int flag;
+ int the_key;
+ unsigned int val;
+
+ flag = [theEvent modifierFlags];
+ // printf("Key flag changed: %x => %x\n", keyflag, flag);
+ // printf("**mlx flag low part : %d - %x\n", flag&0xFFFF, flag&0xFFFF);
+
+ if (!(val = (keyflag|flag)&(~(keyflag&flag))))
+ return ; // no change - can happen when loosing focus on special key pressed, then re-pressed later
+ the_key = 1;
+ while (((val >> (the_key-1)) & 0x01)==0)
+ the_key ++;
+ if (flag > keyflag && event_funct[2] != NULL)
+ event_funct[2](0xFF+the_key, event_param[2]);
+ if (flag < keyflag && event_funct[3] != NULL)
+ event_funct[3](0xFF+the_key, event_param[3]);
+ /*
+ if (event_funct[2] != NULL)
+ {
+ if (!(keyflag & NSAlphaShiftKeyMask) && (flag&NSAlphaShiftKeyMask)) event_funct[2](0xFF+1, event_param[2]);
+ if (!(keyflag & NSShiftKeyMask) && (flag&NSShiftKeyMask)) event_funct[2](0xFF+2, event_param[2]);
+ if (!(keyflag & NSControlKeyMask) && (flag&NSControlKeyMask)) event_funct[2](0xFF+3, event_param[2]);
+ if (!(keyflag & NSAlternateKeyMask) && (flag&NSAlternateKeyMask)) event_funct[2](0xFF+4, event_param[2]);
+ if (!(keyflag & NSCommandKeyMask) && (flag&NSCommandKeyMask)) event_funct[2](0xFF+5, event_param[2]);
+ if (!(keyflag & NSNumericPadKeyMask) && (flag&NSNumericPadKeyMask)) event_funct[2](0xFF+6, event_param[2]);
+ if (!(keyflag & NSHelpKeyMask) && (flag&NSHelpKeyMask)) event_funct[2](0xFF+7, event_param[2]);
+ if (!(keyflag & NSFunctionKeyMask) && (flag&NSFunctionKeyMask)) event_funct[2](0xFF+8, event_param[2]);
+ }
+ if (event_funct[3] != NULL)
+ {
+ if ((keyflag & NSShiftKeyMask) && !(flag&NSShiftKeyMask)) event_funct[3](NSShiftKeyMask, event_param[3]);
+
+ if ((keyflag & NSAlphaShiftKeyMask) && !(flag&NSAlphaShiftKeyMask)) event_funct[3](0xFF+1, event_param[3]);
+ if ((keyflag & NSShiftKeyMask) && !(flag&NSShiftKeyMask)) event_funct[3](0xFF+2, event_param[3]);
+ if ((keyflag & NSControlKeyMask) && !(flag&NSControlKeyMask)) event_funct[3](0xFF+3, event_param[3]);
+ if ((keyflag & NSAlternateKeyMask) && !(flag&NSAlternateKeyMask)) event_funct[3](0xFF+4, event_param[3]);
+ if ((keyflag & NSCommandKeyMask) && !(flag&NSCommandKeyMask)) event_funct[3](0xFF+5, event_param[3]);
+ if ((keyflag & NSNumericPadKeyMask) && !(flag&NSNumericPadKeyMask)) event_funct[3](0xFF+6, event_param[3]);
+ if ((keyflag & NSHelpKeyMask) && !(flag&NSHelpKeyMask)) event_funct[3](0xFF+7, event_param[3]);
+ if ((keyflag & NSFunctionKeyMask) && !(flag&NSFunctionKeyMask)) event_funct[3](0xFF+8, event_param[3]);
+ }
+ */
+ keyflag = flag;
+}
+
+- (void) keyDown:(NSEvent *)theEvent
+{
+ if (keyrepeat==0 && [theEvent isARepeat])
+ return ;
+ // printf("Key Down: %d\n", [theEvent keyCode]);
+ if (event_funct[2] != NULL)
+ event_funct[2]([theEvent keyCode], event_param[2]);
+ // else [super keyDown: theEvent];
+}
+
+- (void) keyUp:(NSEvent *)theEvent
+{
+ // printf("Key Up: %d\n", [theEvent keyCode]);
+ if (event_funct[3] != NULL)
+ event_funct[3]([theEvent keyCode], event_param[3]);
+ // else [super keyUp: theEvent];
+
+}
+
+- (void) mouseDown:(NSEvent *)theEvent
+{
+ NSPoint thepoint;
+ int button;
+
+ thepoint = [theEvent locationInWindow];
+ button = get_mouse_button([theEvent type]);
+ // printf("Mouse pressed bt %d pos: %f, %f\n", button, thepoint.x, thepoint.y);
+ if (event_funct[4] != NULL)
+ event_funct[4](button, (int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[4]);
+}
+
+- (void) rightMouseDown:(NSEvent *)theEvent
+{
+ NSPoint thepoint;
+ int button;
+
+ thepoint = [theEvent locationInWindow];
+ button = get_mouse_button([theEvent type]);
+ // printf("Mouse pressed bt %d pos: %f, %f\n", button, thepoint.x, thepoint.y);
+ if (event_funct[4] != NULL)
+ event_funct[4](button, (int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[4]);
+}
+
+- (void) otherMouseDown:(NSEvent *)theEvent
+{
+ NSPoint thepoint;
+ int button;
+
+ thepoint = [theEvent locationInWindow];
+ button = get_mouse_button([theEvent type]);
+ // printf("Mouse pressed bt %d pos: %f, %f\n", button, thepoint.x, thepoint.y);
+ if (event_funct[4] != NULL)
+ event_funct[4](button, (int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[4]);
+}
+
+- (void) mouseUp:(NSEvent *)theEvent
+{
+ NSPoint thepoint;
+ int button;
+
+ thepoint = [theEvent locationInWindow];
+ button = get_mouse_button([theEvent type]);
+ // printf("Mouse release bt %d pos: %f, %f\n", button, thepoint.x, thepoint.y);
+ if (event_funct[5] != NULL)
+ event_funct[5](button, (int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[5]);
+}
+
+- (void) rightMouseUp:(NSEvent *)theEvent
+{
+ NSPoint thepoint;
+ int button;
+
+ thepoint = [theEvent locationInWindow];
+ button = get_mouse_button([theEvent type]);
+ // printf("Mouse release bt %d pos: %f, %f\n", button, thepoint.x, thepoint.y);
+ if (event_funct[5] != NULL)
+ event_funct[5](button, (int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[5]);
+}
+
+- (void) otherMouseUp:(NSEvent *)theEvent
+{
+ NSPoint thepoint;
+ int button;
+
+ thepoint = [theEvent locationInWindow];
+ button = get_mouse_button([theEvent type]);
+ // printf("Mouse release bt %d pos: %f, %f\n", button, thepoint.x, thepoint.y);
+ if (event_funct[5] != NULL)
+ event_funct[5](button, (int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[5]);
+}
+
+- (void) mouseMoved:(NSEvent *)theEvent
+{
+ NSPoint thepoint;
+
+ thepoint = [theEvent locationInWindow];
+ // printf("Mouse moved pos: %f, %f\n", thepoint.x, thepoint.y);
+ if (event_funct[6] != NULL)
+ event_funct[6]((int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[6]);
+}
+
+
+- (void) mouseDragged:(NSEvent *)theEvent
+{
+ NSPoint thepoint;
+
+ thepoint = [theEvent locationInWindow];
+ // printf("Mouse moved pos: %f, %f\n", thepoint.x, thepoint.y);
+ if (event_funct[6] != NULL)
+ event_funct[6]((int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[6]);
+}
+
+
+- (void) rightMouseDragged:(NSEvent *)theEvent
+{
+ NSPoint thepoint;
+
+ thepoint = [theEvent locationInWindow];
+ // printf("Mouse moved pos: %f, %f\n", thepoint.x, thepoint.y);
+ if (event_funct[6] != NULL)
+ event_funct[6]((int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[6]);
+}
+
+
+- (void) otherMouseDragged:(NSEvent *)theEvent
+{
+ NSPoint thepoint;
+
+ thepoint = [theEvent locationInWindow];
+ // printf("Mouse moved pos: %f, %f\n", thepoint.x, thepoint.y);
+ if (event_funct[6] != NULL)
+ event_funct[6]((int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[6]);
+}
+
+
+- (void) scrollWheel:(NSEvent *)theEvent
+{
+ NSPoint thepoint;
+ int button;
+ float sens;
+
+ if (event_funct[4] == NULL)
+ return ;
+
+ button = 0;
+ thepoint = [theEvent locationInWindow];
+ sens = [theEvent deltaY];
+ if (sens > 0.2)
+ button = 4;
+ if (sens < -0.2)
+ button = 5;
+ sens = [theEvent deltaX];
+ if (sens > 0.2)
+ button = 6;
+ if (sens < -0.2)
+ button = 7;
+ if (button != 0)
+ event_funct[4](button, (int)(thepoint.x), size_y - 1 - (int)(thepoint.y), event_param[4]);
+}
+
+
+- (void) exposeNotification:(NSNotification *)note
+{
+ // printf("Expose...\n");
+ if (event_funct[12] != NULL)
+ event_funct[12](event_param[12]);
+ // printf("Expose done.\n");
+}
+
+- (void) closeNotification:(NSNotification *)note
+{
+ if (event_funct[17] != NULL)
+ event_funct[17](event_param[17]);
+}
+
+- (void) deminiaturizeNotification:(NSNotification *)note
+{
+ // if (event_funct[??] != NULL)
+ // event_funct[??](event_param[??]);
+ [self exposeNotification:note];
+}
+@end
+
+
+@implementation MlxWin
+
+- (id) initWithRect: (NSRect)rect andTitle: (NSString *)title pfaAttrs: (NSOpenGLPixelFormatAttribute *)attrs
+{
+ NSOpenGLPixelFormat* pixFmt = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs];
+
+ if ((self = [super initWithFrame:rect pixelFormat:pixFmt]) != nil)
+ {
+ NSUInteger windowStyle = NSWindowStyleMaskTitled | NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable;
+
+ win = [[NSWindowEvent alloc] initWithContentRect:rect
+ styleMask:windowStyle
+ backing:NSBackingStoreBuffered // NSBackingStoreNonretained
+ defer:NO];
+ [win setContentView:self];
+ [win setTitle:title];
+ [win setKeyRepeat:1];
+ [win makeKeyAndOrderFront:self];
+
+ // printf("init ctx: current %p ", [NSOpenGLContext currentContext]);
+
+ // ctx = [[NSOpenGLContext alloc] initWithFormat:pixFmt shareContext:[NSOpenGLContext currentContext]]; //other_context];
+ // [ctx setView:self];
+ // [ctx makeCurrentContext];
+
+ [[self openGLContext] makeCurrentContext];
+ [[self openGLContext] setView:self];
+ [self prepareOpenGL];
+
+ [self setNextKeyView:self];
+
+ // [[NSNotificationCenter defaultCenter] addObserver:win selector:@selector(exposeNotification:) name:@"NSWindowDidExposeNotification" object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:win selector:@selector(exposeNotification:) name:@"NSWindowDidBecomeKeyNotification" object:win];
+ [[NSNotificationCenter defaultCenter] addObserver:win selector:@selector(deminiaturizeNotification:) name:@"NSWindowDidDeminiaturizeNotification" object:win];
+ [[NSNotificationCenter defaultCenter] addObserver:win selector:@selector(closeNotification:) name:@"NSWindowWillCloseNotification" object:win];
+ // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ctxNeedsUpdate:)
+ // name:NSViewGlobalFrameDidChangeNotification
+ // object:nil];
+
+ size_x = rect.size.width;
+ size_y = rect.size.height;
+
+ glClearColor(0, 0, 0, 0);
+ glClear(GL_COLOR_BUFFER_BIT);
+ glFlush();
+
+ //[win makeKeyAndOrderFront:nil];
+ // BOOL r = [win isKeyWindow];
+ // if (r==YES) printf("keywindow ok\n"); else printf("keywindow KO\n");
+
+ // Window controller subclass to set title
+ // NSWindowController* windowController = [[NSWindowController alloc] initWithWindow:win];
+ // [windowController windowTitleForDocumentDisplayName:title];
+ // [windowController showWindow:nil];
+ // MlxWinController *mlxWinCont = [[MlxWinController alloc] initWin:win andTitle:title];
+
+ // after nswindowcontroller who will retake first responder
+ // BOOL r = [win makeFirstResponder:nil];
+ // if (r==YES) printf("responder ok\n"); else printf("responder KO\n");
+
+ [pixFmt release];
+ }
+ return (self);
+}
+
+- (int) pixel_management
+{
+ bzero(&glsl, sizeof(glsl)); // so gldelete[shader/program] go silent on error.
+
+ glDisable(GL_DEPTH_TEST);
+ glGenBuffers(1, &pixel_vbuffer);
+ glBindBuffer(GL_ARRAY_BUFFER, pixel_vbuffer);
+ glBufferData(GL_ARRAY_BUFFER, sizeof(pixel_vertexes), pixel_vertexes, GL_DYNAMIC_DRAW); // 4 points buff
+ // pixel_ptr = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
+
+ glGenTextures(1, &pixel_texture);
+ glBindTexture(GL_TEXTURE_2D, pixel_texture);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ pixtexbuff = malloc(sizeof(unsigned int)*size_x*size_y);
+ pixel_nb = size_x*size_y;
+ while (pixel_nb--) pixtexbuff[pixel_nb] = 0xFF000000;
+ pixel_nb = 0;
+ glTexImage2D(
+ GL_TEXTURE_2D, 0, /* target, level of detail */
+ GL_RGBA8, /* internal format */
+ size_x, size_y, 0, /* width, height, border */
+ GL_BGRA, GL_UNSIGNED_BYTE, /* external format, type */
+ pixtexbuff /* pixels */
+ );
+ // printf("pix tex err? 0x%x\n", glGetError());
+
+ if (mlx_shaders(&glsl))
+ return (0);
+
+ glUseProgram(glsl.pixel_program);
+ glsl.loc_pixel_texture = glGetUniformLocation(glsl.pixel_program, "texture");
+ //glsl.loc_pixel_winhalfsize = glGetUniformLocation(glsl.pixel_program, "winhalfsize");
+ glsl.loc_pixel_position = glGetAttribLocation(glsl.pixel_program, "position");
+ // printf("err? 0x%x\n", glGetError());
+
+ glUseProgram(glsl.image_program);
+ glsl.loc_image_texture = glGetUniformLocation(glsl.image_program, "texture");
+ glsl.loc_image_pos = glGetUniformLocation(glsl.image_program, "imagepos");
+ glsl.loc_image_size = glGetUniformLocation(glsl.image_program, "imagesize");
+ glsl.loc_image_winhalfsize = glGetUniformLocation(glsl.image_program, "winhalfsize");
+ glsl.loc_image_position = glGetAttribLocation(glsl.image_program, "position");
+ // printf("err? 0x%x\n", glGetError());
+
+ glUseProgram(glsl.font_program);
+ glsl.loc_font_texture = glGetUniformLocation(glsl.font_program, "texture");
+ glsl.loc_font_color = glGetUniformLocation(glsl.font_program, "color");
+ glsl.loc_font_posinwin = glGetUniformLocation(glsl.font_program, "fontposinwin");
+ glsl.loc_font_posinatlas = glGetUniformLocation(glsl.font_program, "fontposinatlas");
+ glsl.loc_font_atlassize = glGetUniformLocation(glsl.font_program, "fontatlassize");
+ glsl.loc_font_winhalfsize = glGetUniformLocation(glsl.font_program, "winhalfsize");
+ glsl.loc_font_position = glGetAttribLocation(glsl.font_program, "position");
+ // printf("err? 0x%x\n", glGetError());
+
+ glFlush();
+ return (1);
+}
+
+- (void) ctxNeedsUpdate
+{
+ // printf("Context update\n");
+ [ctx update];
+}
+
+- (void) selectGLContext
+{
+ if ([NSOpenGLContext currentContext] != [self openGLContext])
+ {
+ // printf("ctx: %p => %p\n", [NSOpenGLContext currentContext], [self openGLContext]);
+ [[self openGLContext] makeCurrentContext];
+ }
+}
+
+- (void) flushGLContext
+{
+ [[self openGLContext] flushBuffer];
+}
+
+- (NSOpenGLContext *) ctx
+{
+ return (ctx);
+}
+
+- (NSWindowEvent *) win
+{
+ return (win);
+}
+
+
+- (void) pixelPutColor: (int)color X:(int)x Y:(int)y
+{
+ pixel_nb ++;
+
+ glBindTexture(GL_TEXTURE_2D, pixel_vbuffer);
+ glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, 1, 1, GL_BGRA, GL_UNSIGNED_BYTE, (GLvoid *)(&color));
+
+ if (pixel_nb >= MAX_PIXEL_NB)
+ [self mlx_gl_draw];
+}
+
+- (void) destroyPixelManagement
+{
+ free(pixtexbuff);
+ [self selectGLContext];
+ glDeleteBuffers(1, &pixel_vbuffer);
+ glDeleteTextures(1, &pixel_texture);
+ glDeleteProgram(glsl.pixel_program);
+ glDeleteProgram(glsl.image_program);
+ glDeleteShader(glsl.pixel_vshader);
+ glDeleteShader(glsl.pixel_fshader);
+ glDeleteShader(glsl.image_vshader);
+ glDeleteShader(glsl.image_fshader);
+}
+
+
+- (void) destroyMe
+{
+ [[NSNotificationCenter defaultCenter] removeObserver:win];
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+ // [ctx release];
+ [win close];
+ [self release];
+}
+
+- (void) setEvent:(int)event andFunc:(func_t)func andParam:(void *)param
+{
+ [win setEvent:event andFunc:func andParam:param];
+}
+
+- (void) setKeyRepeat:(int)mode
+{
+ [win setKeyRepeat:mode];
+}
+
+- (void) clearWin
+{
+ glClearColor(0, 0, 0, 0);
+ glClear(GL_COLOR_BUFFER_BIT);
+}
+
+- (void) mlx_gl_draw_img:(mlx_img_list_t *)img andCtx:(mlx_img_ctx_t *)imgctx andX:(int)x andY:(int)y
+{
+
+ if (pixel_nb >0)
+ [self mlx_gl_draw];
+
+ glUseProgram(glsl.image_program);
+
+ glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, imgctx->texture);
+ glUniform1i(glsl.loc_image_texture, 0);
+
+ glUniform2f(glsl.loc_image_winhalfsize, size_x/2, size_y/2);
+ glUniform2f(glsl.loc_image_pos, x, size_y - y);
+ glUniform2f(glsl.loc_image_size, img->width, -img->height);
+
+ glBindBuffer(GL_ARRAY_BUFFER, imgctx->vbuffer);
+ glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2*sizeof(GLfloat), (void*)0);
+ glEnableVertexAttribArray(0);
+
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); // src alpha 0xFF : keep dst
+ glBlendEquation(GL_FUNC_ADD);
+
+ glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
+ glDisableVertexAttribArray(0);
+
+}
+
+
+- (void) mlx_gl_draw_font:(mlx_img_list_t *)img andCtx:(mlx_img_ctx_t *)imgctx andX:(int)x andY:(int)y andColor:(int)color glyphX:(int)gx glyphY:(int)gy
+{
+ GLfloat color_tab[4];
+
+ if (pixel_nb >0)
+ [self mlx_gl_draw];
+
+ color_tab[0] = ((float)((color&0xFF0000)>>16))/255.0;
+ color_tab[1] = ((float)((color&0xFF00)>>8))/255.0;
+ color_tab[2] = ((float)((color&0xFF)>>0))/255.0;
+ color_tab[3] = 1.0;
+ glUseProgram(glsl.font_program);
+
+ glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, imgctx->texture);
+ glUniform1i(glsl.loc_font_texture, 0);
+ glUniform4fv(glsl.loc_font_color, 1, color_tab);
+
+ glUniform2f(glsl.loc_font_winhalfsize, size_x/2, size_y/2);
+ glUniform2f(glsl.loc_font_posinwin, x, size_y - 1 - y);
+ glUniform2f(glsl.loc_font_posinatlas, gx, gy);
+ glUniform2f(glsl.loc_font_atlassize, img->width, img->height);
+
+ glBindBuffer(GL_ARRAY_BUFFER, imgctx->vbuffer);
+ glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2*sizeof(GLfloat), (void*)0);
+ glEnableVertexAttribArray(0);
+
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); // src alpha 0xFF : keep dst
+ glBlendEquation(GL_FUNC_ADD);
+
+ glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
+ glDisableVertexAttribArray(0);
+
+}
+
+
+- (void) mlx_gl_draw
+{
+ if (pixel_nb <= 0)
+ return ;
+
+ glUseProgram(glsl.pixel_program);
+
+ glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, pixel_vbuffer);
+ glUniform1i(glsl.loc_pixel_texture, 0);
+
+ glBindBuffer(GL_ARRAY_BUFFER, pixel_vbuffer);
+ glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2*sizeof(GLfloat), (void*)0);
+ glEnableVertexAttribArray(0);
+
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); // src alpha 0xFF : keep dst
+ glBlendEquation(GL_FUNC_ADD);
+
+ glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
+ glDisableVertexAttribArray(0);
+
+ pixel_nb = size_x*size_y;
+ while (pixel_nb--) pixtexbuff[pixel_nb] = 0xFF000000;
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, size_x, size_y, 0, GL_BGRA, GL_UNSIGNED_BYTE, pixtexbuff);
+ pixel_nb = 0;
+
+}
+
+@end
+
+
+// mlx API
+
+
+void *mlx_new_window(mlx_ptr_t *mlx_ptr, int size_x, int size_y, char *title)
+{
+ mlx_win_list_t *newwin;
+ NSString *str;
+
+ if ((newwin = malloc(sizeof(*newwin))) == NULL)
+ return ((void *)0);
+ newwin->img_list = NULL;
+ newwin->next = mlx_ptr->win_list;
+ newwin->nb_flush = 0;
+ newwin->pixmgt = 1;
+ mlx_ptr->win_list = newwin;
+
+ NSRect windowRect = NSMakeRect(100, 100, size_x, size_y);
+ str = [NSString stringWithCString:title encoding:NSASCIIStringEncoding];
+ newwin->winid = [[MlxWin alloc] initWithRect:windowRect andTitle:str pfaAttrs:pfa_attrs];
+ if (newwin->winid)
+ if (![(id)(newwin->winid) pixel_management])
+ {
+ [(id)(newwin->winid) destroyPixelManagement];
+ [(id)(newwin->winid) destroyMe];
+ }
+ return ((void *)newwin);
+}
+
+
+void mlx_clear_window(mlx_ptr_t *mlx_ptr, mlx_win_list_t *win_ptr)
+{
+ [(id)(win_ptr->winid) selectGLContext];
+ [(id)(win_ptr->winid) clearWin];
+ win_ptr->nb_flush ++;
+}
+
+
+void mlx_expose_hook(mlx_win_list_t *win_ptr, int (*funct_ptr)(), void *param)
+{
+ [(id)(win_ptr->winid) setEvent:12 andFunc:funct_ptr andParam:param];
+}
+
+void mlx_key_hook(mlx_win_list_t *win_ptr, int (*funct_ptr)(), void *param)
+{
+ [(id)(win_ptr->winid) setEvent:3 andFunc:funct_ptr andParam:param];
+}
+
+void mlx_mouse_hook(mlx_win_list_t *win_ptr, int (*funct_ptr)(), void *param)
+{
+ [(id)(win_ptr->winid) setEvent:4 andFunc:funct_ptr andParam:param];
+}
+
+void mlx_hook(mlx_win_list_t *win_ptr, int x_event, int x_mask, int (*funct_ptr)(), void *param)
+{
+ [(id)(win_ptr->winid) setEvent:x_event andFunc:funct_ptr andParam:param];
+}
+
+int mlx_do_key_autorepeatoff(mlx_ptr_t *mlx_ptr)
+{
+ mlx_win_list_t *win;
+
+ win = mlx_ptr->win_list;
+ while (win)
+ {
+ [(id)(win->winid) setKeyRepeat:0];
+ win = win->next;
+ }
+ return (0);
+}
+
+int mlx_do_key_autorepeaton(mlx_ptr_t *mlx_ptr)
+{
+ mlx_win_list_t *win;
+
+ win = mlx_ptr->win_list;
+ while (win)
+ {
+ [(id)(win->winid) setKeyRepeat:1];
+ win = win->next;
+ }
+ return (0);
+}
+
+
+int mlx_destroy_window(mlx_ptr_t *mlx_ptr, mlx_win_list_t *win_to_del)
+{
+ mlx_win_list_t first;
+ mlx_win_list_t *win;
+ mlx_img_ctx_t *ctx;
+ mlx_img_ctx_t *ctx2;
+
+ first.next = mlx_ptr->win_list;
+ win = &first;
+ while (win && win->next)
+ {
+ if (win->next == win_to_del)
+ win->next = win->next->next;
+ win = win->next;
+ }
+ mlx_ptr->win_list = first.next;
+
+ if (win_to_del->pixmgt)
+ {
+ [(id)(win_to_del->winid) selectGLContext];
+ ctx = win_to_del->img_list; // should be null anyway if no pixel management
+ while (ctx)
+ {
+ glDeleteBuffers(1, &(ctx->vbuffer));
+ glDeleteTextures(1, &(ctx->texture));
+ ctx2 = ctx;
+ ctx = ctx->next;
+ free(ctx2);
+ }
+ [(id)(win_to_del->winid) destroyPixelManagement];
+ }
+ [(id)(win_to_del->winid) destroyMe];
+ free(win_to_del);
+
+ // printf("destroy window done.\n");
+ mlx_do_sync(mlx_ptr);
+ return (0);
+}
diff --git a/libs/minilibx_opengl_20191021/mlx_opengl.h b/libs/minilibx_opengl_20191021/mlx_opengl.h
new file mode 100644
index 0000000..bb39267
--- /dev/null
+++ b/libs/minilibx_opengl_20191021/mlx_opengl.h
@@ -0,0 +1,21 @@
+/*
+**
+** mlx_opengl.h
+**
+** public include, use it after mlx.h
+** designed only for minilibx_macos
+**
+*/
+
+void *mlx_new_opengl_window(void *mlx_ptr, int size_x, int size_y, char *title);
+
+/* create an opengl window. put_image & pixel_put & string_put do not work there. */
+
+int mlx_opengl_swap_buffers(void *win_ptr);
+
+/* the created window is double buffered. Use this funct to swap buffers */
+/* this funct will call glFlush(). Don't call it. */
+
+int mlx_opengl_window_set_context(void *win_ptr);
+
+/* in case multiple opengl windows are present, change opengl active context */
diff --git a/libs/minilibx_opengl_20191021/mlx_opengl.m b/libs/minilibx_opengl_20191021/mlx_opengl.m
new file mode 100644
index 0000000..554d79b
--- /dev/null
+++ b/libs/minilibx_opengl_20191021/mlx_opengl.m
@@ -0,0 +1,57 @@
+// mlx_opengl.m
+
+#import
+#import
+#import
+
+#include
+
+#include "mlx_int.h"
+#include "mlx_new_window.h"
+
+
+
+
+
+NSOpenGLPixelFormatAttribute pfa_attrs_opengl[] =
+ {
+ NSOpenGLPFADepthSize, 32,
+ NSOpenGLPFADoubleBuffer,
+ NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion4_1Core,
+ 0
+ };
+
+
+
+void *mlx_new_opengl_window(mlx_ptr_t *mlx_ptr, int size_x, int size_y, char *title)
+{
+ mlx_win_list_t *newwin;
+ NSString *str;
+
+ if ((newwin = malloc(sizeof(*newwin))) == NULL)
+ return ((void *)0);
+ newwin->img_list = NULL;
+ newwin->next = mlx_ptr->win_list;
+ newwin->nb_flush = 0;
+ newwin->pixmgt = 0;
+ mlx_ptr->win_list = newwin;
+
+ NSRect windowRect = NSMakeRect(100, 100, size_x, size_y);
+ str = [NSString stringWithCString:title encoding:NSASCIIStringEncoding];
+ newwin->winid = [[MlxWin alloc] initWithRect:windowRect andTitle:str pfaAttrs:pfa_attrs_opengl];
+
+ return ((void *)newwin);
+}
+
+
+int mlx_opengl_swap_buffers(mlx_win_list_t *win_ptr)
+{
+ [(id)(win_ptr->winid) flushGLContext];
+ return (0);
+}
+
+int mlx_opengl_window_set_context(mlx_win_list_t *win_ptr)
+{
+ [(id)(win_ptr->winid) selectGLContext];
+ return (0);
+}
diff --git a/libs/minilibx_opengl_20191021/mlx_png.c b/libs/minilibx_opengl_20191021/mlx_png.c
new file mode 100644
index 0000000..ca8024d
--- /dev/null
+++ b/libs/minilibx_opengl_20191021/mlx_png.c
@@ -0,0 +1,418 @@
+
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include "zlib.h"
+
+#include
+#include "mlx_int.h"
+
+
+#define PNG_MAGIC_SIZE 8
+unsigned char magic[PNG_MAGIC_SIZE] = {137, 80, 78, 71, 13, 10, 26, 10};
+#define PNG_HDR_SIZE 13
+
+#define Z_CHUNK 32768
+
+#define ERR_MAGIC_SIZE 1
+#define ERR_MAGIC_WRONG 2
+#define ERR_STRUCT_INCOMPLETE 3
+#define ERR_STRUCT_HDR 4
+#define ERR_STRUCT_END 5
+#define ERR_STRUCT_CRC 6
+#define ERR_STRUCT_INCIMPL 7
+#define ERR_STRUCT_DAT 8
+#define ERR_STRUCT_MISSCHK 9
+#define ERR_ZLIB 10
+#define ERR_DATA_MISMATCH 11
+#define ERR_DATA_FILTER 12
+char *(mipng_err[]) =
+{
+ "No error",
+ "Not enough size for magic",
+ "Wrong magic",
+ "Incomplete chunk structure",
+ "Duplicate or incorrect header",
+ "Duplicate or incorrect end",
+ "Invalid CRC in chunk",
+ "Incorrect header or configuration not implemented",
+ "Non consecutive dat chunks",
+ "Missing header/dat/end chunk(s)",
+ "Zlib inflate error",
+ "Inflated data size mismatch",
+ "Unknown scanline filter"
+};
+
+typedef struct png_info_s
+{
+ unsigned int width;
+ unsigned int height;
+ int depth;
+ int color;
+ int interlace;
+ int bpp;
+} png_info_t;
+
+
+int mipng_is_type(unsigned char *ptr, char *type)
+{
+ if (ptr[4] == type[0] && ptr[5] == type[1] && ptr[6] == type[2] && ptr[7] == type[3])
+ return (1);
+ return (0);
+}
+
+
+unsigned char mipng_defilter_none(unsigned char *buff, int pos, int a, int b, int c)
+{ return (buff[pos]); }
+unsigned char mipng_defilter_sub(unsigned char *buff, int pos, int a, int b, int c)
+{ return (buff[pos]+(unsigned int)a); }
+unsigned char mipng_defilter_up(unsigned char *buff, int pos, int a, int b, int c)
+{ return (buff[pos]+(unsigned int)b); }
+unsigned char mipng_defilter_average(unsigned char *buff, int pos, int a, int b, int c)
+{ return (buff[pos]+((unsigned int)a+(unsigned int)b)/2); }
+unsigned char mipng_defilter_paeth(unsigned char *buff, int pos, int a, int b, int c)
+{
+ int p;
+ int result;
+
+ p = a + b - c;
+ if (abs(b - c) <= abs(a - c) && abs(b - c) <= abs(a + b - c - c))
+ result = a;
+ else
+ if (abs(a - c) <= abs(a + b - c - c))
+ result = b;
+ else
+ result = c;
+ return (buff[pos]+result);
+}
+
+
+
+unsigned char (*(mipng_defilter[]))(unsigned char *buff, int pos, int a, int b, int c) =
+{
+ mipng_defilter_none,
+ mipng_defilter_sub,
+ mipng_defilter_up,
+ mipng_defilter_average,
+ mipng_defilter_paeth
+};
+
+// only work for mlx mac or img 32bpp
+int mipng_fill_img(mlx_img_list_t *img, unsigned char *buf, png_info_t *pi)
+{
+ unsigned int current_filter;
+ int ipos;
+ int bpos;
+ int ilen;
+ int iline;
+ int blen;
+ unsigned char tmp;
+ unsigned char *ibuf;
+
+ ibuf = (unsigned char *)img->buffer;
+ iline = img->width * UNIQ_BPP;
+ ilen = img->width * img->height * UNIQ_BPP;
+ blen = img->width * img->height * pi->bpp + img->height;
+ ipos = 0;
+ bpos = 0;
+ while (ipos < ilen && bpos < blen)
+ {
+ if ((ipos % iline) == 0)
+ {
+ if ((current_filter = buf[bpos++]) > 4)
+ return (ERR_DATA_FILTER);
+ }
+ ibuf[ipos] = mipng_defilter[current_filter](buf, bpos,
+ ipos%iline>3?ibuf[ipos-UNIQ_BPP]:0,
+ (ipos>=iline)?ibuf[ipos-iline]:0,
+ (ipos>=iline && ipos%iline>3)?ibuf[ipos-iline-UNIQ_BPP]:0);
+ ipos ++;
+ bpos ++;
+ if (pi->depth == 16)
+ bpos ++;
+ if (ipos % 4 == 3 && pi->color == 2) // no alpha
+ img->buffer[ipos++] = 0xFF;
+ }
+ if (ipos != ilen || bpos != blen)
+ {
+ // printf("fill err ipos %d vs %d, bpos %d vs %d\n", ipos, ilen, bpos, blen);
+ return (ERR_DATA_MISMATCH);
+ }
+ ipos = 0;
+ while (ipos < ilen)
+ {
+ tmp = ibuf[ipos];
+ ibuf[ipos] = ibuf[ipos+2];
+ ibuf[ipos+2] = tmp;
+ ibuf[ipos+3] = 0xFF - ibuf[ipos+3];
+ ipos += UNIQ_BPP;
+ }
+ return (0);
+}
+
+
+int mipng_data(mlx_img_list_t *img, unsigned char *dat, png_info_t *pi)
+{
+ unsigned int len;
+ int b_pos;
+ unsigned char *buffer;
+ int ret;
+ int z_ret;
+ unsigned z_have;
+ z_stream z_strm;
+ unsigned char z_out[Z_CHUNK];
+
+ b_pos = 0;
+ if (!(buffer = malloc((long long)img->width*(long long)img->height*(long long)pi->bpp + img->height)))
+ err(1, "Can't malloc");
+ z_strm.zalloc = Z_NULL;
+ z_strm.zfree = Z_NULL;
+ z_strm.opaque = Z_NULL;
+ z_strm.avail_in = 0;
+ z_strm.next_in = Z_NULL;
+ z_ret = inflateInit(&z_strm);
+ if (z_ret != Z_OK)
+ return (ERR_ZLIB);
+
+ while (mipng_is_type(dat, "IDAT"))
+ {
+ len = *((unsigned int *)dat);
+ len = ntohl(len);
+ z_strm.avail_in = len;
+ z_strm.next_in = dat + 8;
+ z_strm.avail_out = 0;
+ while (z_strm.avail_out == 0)
+ {
+ z_strm.avail_out = Z_CHUNK;
+ z_strm.next_out = z_out;
+ z_ret = inflate(&z_strm, Z_NO_FLUSH);
+ // printf("inflate ret %d avail_out %d\n", z_ret, z_strm.avail_out);
+ if (z_ret != Z_OK && z_ret != Z_STREAM_END)
+ {
+ inflateEnd(&z_strm);
+ return (ERR_ZLIB);
+ }
+ if (b_pos + Z_CHUNK - z_strm.avail_out > img->width*img->height*pi->bpp+img->height)
+ {
+ inflateEnd(&z_strm);
+ return (ERR_DATA_MISMATCH);
+ }
+ bcopy(z_out, buffer+b_pos, Z_CHUNK - z_strm.avail_out);
+ b_pos += Z_CHUNK - z_strm.avail_out;
+ }
+ dat += len + 4 + 4 + 4;
+ }
+ inflateEnd(&z_strm);
+ if (b_pos != img->width*img->height*pi->bpp+img->height)
+ {
+ // printf("pb : bpos %d vs expected %d\n", b_pos, img->width*img->height*pi->bpp+img->height);
+ return (ERR_DATA_MISMATCH);
+ }
+ if ((ret = mipng_fill_img(img, buffer, pi)))
+ return (ret);
+ return (0);
+}
+
+
+
+int mipng_magic(unsigned char *ptr, int size)
+{
+ int i;
+
+ if (size < PNG_MAGIC_SIZE)
+ return (ERR_MAGIC_SIZE);
+ i = 0;
+ while (i < PNG_MAGIC_SIZE)
+ if (*(ptr++) != magic[i++])
+ return (ERR_MAGIC_WRONG);
+ return (0);
+}
+
+
+unsigned long crc_table[256] = { 0, 0x77073096, 0xee0e612c, 0x990951ba, 0x76dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0xedb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x9b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x1db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x6b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0xf00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x86d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x3b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x4db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0xd6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0xa00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x26d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x5005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0xcb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0xbdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d };
+
+// From http://www.w3.org/TR/PNG/#D-CRCAppendix
+int mipng_crc(unsigned char *ptr, int len)
+{
+ unsigned int file_crc;
+ unsigned long crc;
+ int i;
+
+ file_crc = *((unsigned int *)(ptr+4+4+len));
+ file_crc = ntohl(file_crc);
+
+ crc = 0xffffffffL;
+ i = 0;
+ while (i < len+4)
+ crc = crc_table[(crc ^ ptr[(i++)+4]) & 0xff] ^ (crc >> 8);
+ crc ^= 0xffffffffL;
+
+ if (file_crc != crc)
+ return (1);
+ return (0);
+}
+
+
+int mipng_structure(unsigned char *ptr, int size, unsigned char **hdr, unsigned char **dat)
+{
+ unsigned int len;
+ int dat_state;
+ int end;
+
+ dat_state = 0;
+ *hdr = NULL;
+ *dat = NULL;
+ end = 0;
+ while (size)
+ {
+ if (size >= 4) // length present
+ {
+ len = *((unsigned int *)ptr);
+ len = ntohl(len);
+ if (size < 4 + 4 + 4 + len)
+ return (ERR_STRUCT_INCOMPLETE);
+ if (mipng_crc(ptr, len))
+ return (ERR_STRUCT_CRC);
+ // printf("found chunk len %d type %c%c%c%c\n", len, *(ptr+4), *(ptr+5), *(ptr+6), *(ptr+7));
+ if (mipng_is_type(ptr, "IHDR"))
+ {
+ if (*hdr || len != PNG_HDR_SIZE)
+ return (ERR_STRUCT_HDR);
+ *hdr = ptr;
+ }
+ if (mipng_is_type(ptr, "IEND"))
+ {
+ if (len != 0 || size != 4+4+4)
+ return (ERR_STRUCT_END);
+ end = 1;
+ }
+ if (mipng_is_type(ptr, "IDAT"))
+ {
+ if (dat_state == 0)
+ {
+ dat_state = 1;
+ *dat = ptr;
+ }
+ if (dat_state == 2)
+ return (ERR_STRUCT_DAT);
+ }
+ else
+ if (dat_state == 1)
+ dat_state = 2;
+ size -= 4+4+4+len;
+ ptr += 4+4+4+len;
+ }
+ else
+ return (ERR_STRUCT_INCOMPLETE);
+ }
+ if (*hdr == 0 || *dat == 0 || end == 0)
+ return (ERR_STRUCT_MISSCHK);
+ return (0);
+}
+
+
+int mipng_verif_hdr(unsigned char *hdr, png_info_t *pi)
+{
+ unsigned int compress;
+ unsigned int filter;
+
+ hdr += 8;
+ pi->width = ntohl(*((unsigned long *)hdr));
+ pi->height = ntohl(*((unsigned long *)(hdr+4)));
+ pi->depth = *(hdr+8);
+ pi->color = *(hdr+9);
+ compress = *(hdr+10);
+ filter = *(hdr+11);
+ pi->interlace = *(hdr+12);
+ if (pi->width <= 0 || pi->height <= 0 || (pi->depth != 8 && pi->depth != 16)
+ || (pi->color != 2 && pi->color != 6) || compress != 0 || filter != 0 || pi->interlace != 0)
+ return (ERR_STRUCT_INCIMPL);
+ pi->bpp = pi->depth / 8;
+ if (pi->color == 2)
+ pi->bpp *= 3;
+ if (pi->color == 6)
+ pi->bpp *= 4;
+ // printf("hdr info : %d x %d, depth %d, col type %d, comp %d, filter %d, interlace %d\nbpp is %d\n",
+ // pi->width, pi->height, pi->depth, pi->color, compress, filter, pi->interlace, pi->bpp);
+ return (0);
+}
+
+
+mlx_img_list_t *mlx_int_parse_png(mlx_ptr_t *xvar, unsigned char *fptr, int size)
+{
+ int err;
+ unsigned char *hdr;
+ unsigned char *dat;
+ png_info_t pi;
+ mlx_img_list_t *img;
+
+ if ((err = mipng_magic(fptr, size)))
+ {
+ warnx("mlx PNG error : %s", mipng_err[err]);
+ return ((mlx_img_list_t *)0);
+ }
+ fptr += PNG_MAGIC_SIZE;
+ size -= PNG_MAGIC_SIZE;
+ if ((err = mipng_structure(fptr, size, &hdr, &dat)))
+ {
+ warnx("mlx PNG error : %s", mipng_err[err]);
+ return ((mlx_img_list_t *)0);
+ }
+ if ((err = mipng_verif_hdr(hdr, &pi)))
+ {
+ warnx("mlx PNG error : %s", mipng_err[err]);
+ return ((mlx_img_list_t *)0);
+ }
+ if (!(img = mlx_new_image(xvar, pi.width, pi.height)))
+ {
+ warnx("mlx PNG error : Can't create mlx image");
+ return ((mlx_img_list_t *)0);
+ }
+ if ((err = mipng_data(img, dat, &pi)))
+ {
+ mlx_destroy_image(xvar, img);
+ warnx("mlx PNG error : %s", mipng_err[err]);
+ return ((mlx_img_list_t *)0);
+ }
+ return (img);
+}
+
+
+
+
+void *mlx_png_file_to_image(mlx_ptr_t *xvar, char *file, int *width, int *height)
+{
+ int fd;
+ int size;
+ unsigned char *ptr;
+ mlx_img_list_t *img;
+
+ if ((fd = open(file, O_RDONLY)) == -1 || (size = lseek(fd, 0, SEEK_END)) == -1 ||
+ (ptr = mmap(0, size, PROT_READ, MAP_PRIVATE, fd, 0)) == (void *)MAP_FAILED)
+ {
+ if (fd >= 0)
+ close(fd);
+ warnx("Can't map png file '%s'", file);
+ return ((void *)0);
+ }
+ if ((img = mlx_int_parse_png(xvar, ptr, size)))
+ {
+ *width = img->width;
+ *height = img->height;
+ }
+ else
+ {
+ *width = 0;
+ *height = 0;
+ }
+ munmap(ptr,size);
+ close(fd);
+ return (img);
+}
diff --git a/libs/minilibx_opengl_20191021/mlx_png.h b/libs/minilibx_opengl_20191021/mlx_png.h
new file mode 100644
index 0000000..83ef145
--- /dev/null
+++ b/libs/minilibx_opengl_20191021/mlx_png.h
@@ -0,0 +1,4 @@
+
+
+
+void *mlx_png_file_to_image(void *xvar, char *file, int *width, int *height);
diff --git a/libs/minilibx_opengl_20191021/mlx_rgb.c b/libs/minilibx_opengl_20191021/mlx_rgb.c
new file mode 100644
index 0000000..3f98717
--- /dev/null
+++ b/libs/minilibx_opengl_20191021/mlx_rgb.c
@@ -0,0 +1,763 @@
+/*
+** This is a generated file with rgb2c.pl and rgb.txt from
+** the XFree86 distribution.
+*/
+
+
+struct s_col_name mlx_col_name[] =
+{
+ { "snow" , 0xfffafa },
+ { "ghost white" , 0xf8f8ff },
+ { "ghostwhite" , 0xf8f8ff },
+ { "white smoke" , 0xf5f5f5 },
+ { "whitesmoke" , 0xf5f5f5 },
+ { "gainsboro" , 0xdcdcdc },
+ { "floral white" , 0xfffaf0 },
+ { "floralwhite" , 0xfffaf0 },
+ { "old lace" , 0xfdf5e6 },
+ { "oldlace" , 0xfdf5e6 },
+ { "linen" , 0xfaf0e6 },
+ { "antique white" , 0xfaebd7 },
+ { "antiquewhite" , 0xfaebd7 },
+ { "papaya whip" , 0xffefd5 },
+ { "papayawhip" , 0xffefd5 },
+ { "blanched almond" , 0xffebcd },
+ { "blanchedalmond" , 0xffebcd },
+ { "bisque" , 0xffe4c4 },
+ { "peach puff" , 0xffdab9 },
+ { "peachpuff" , 0xffdab9 },
+ { "navajo white" , 0xffdead },
+ { "navajowhite" , 0xffdead },
+ { "moccasin" , 0xffe4b5 },
+ { "cornsilk" , 0xfff8dc },
+ { "ivory" , 0xfffff0 },
+ { "lemon chiffon" , 0xfffacd },
+ { "lemonchiffon" , 0xfffacd },
+ { "seashell" , 0xfff5ee },
+ { "honeydew" , 0xf0fff0 },
+ { "mint cream" , 0xf5fffa },
+ { "mintcream" , 0xf5fffa },
+ { "azure" , 0xf0ffff },
+ { "alice blue" , 0xf0f8ff },
+ { "aliceblue" , 0xf0f8ff },
+ { "lavender" , 0xe6e6fa },
+ { "lavender blush" , 0xfff0f5 },
+ { "lavenderblush" , 0xfff0f5 },
+ { "misty rose" , 0xffe4e1 },
+ { "mistyrose" , 0xffe4e1 },
+ { "white" , 0xffffff },
+ { "black" , 0x0 },
+ { "dark slate" , 0x2f4f4f },
+ { "darkslategray" , 0x2f4f4f },
+ { "dark slate" , 0x2f4f4f },
+ { "darkslategrey" , 0x2f4f4f },
+ { "dim gray" , 0x696969 },
+ { "dimgray" , 0x696969 },
+ { "dim grey" , 0x696969 },
+ { "dimgrey" , 0x696969 },
+ { "slate gray" , 0x708090 },
+ { "slategray" , 0x708090 },
+ { "slate grey" , 0x708090 },
+ { "slategrey" , 0x708090 },
+ { "light slate" , 0x778899 },
+ { "lightslategray" , 0x778899 },
+ { "light slate" , 0x778899 },
+ { "lightslategrey" , 0x778899 },
+ { "gray" , 0xbebebe },
+ { "grey" , 0xbebebe },
+ { "light grey" , 0xd3d3d3 },
+ { "lightgrey" , 0xd3d3d3 },
+ { "light gray" , 0xd3d3d3 },
+ { "lightgray" , 0xd3d3d3 },
+ { "midnight blue" , 0x191970 },
+ { "midnightblue" , 0x191970 },
+ { "navy" , 0x80 },
+ { "navy blue" , 0x80 },
+ { "navyblue" , 0x80 },
+ { "cornflower blue" , 0x6495ed },
+ { "cornflowerblue" , 0x6495ed },
+ { "dark slate" , 0x483d8b },
+ { "darkslateblue" , 0x483d8b },
+ { "slate blue" , 0x6a5acd },
+ { "slateblue" , 0x6a5acd },
+ { "medium slate" , 0x7b68ee },
+ { "mediumslateblue" , 0x7b68ee },
+ { "light slate" , 0x8470ff },
+ { "lightslateblue" , 0x8470ff },
+ { "medium blue" , 0xcd },
+ { "mediumblue" , 0xcd },
+ { "royal blue" , 0x4169e1 },
+ { "royalblue" , 0x4169e1 },
+ { "blue" , 0xff },
+ { "dodger blue" , 0x1e90ff },
+ { "dodgerblue" , 0x1e90ff },
+ { "deep sky" , 0xbfff },
+ { "deepskyblue" , 0xbfff },
+ { "sky blue" , 0x87ceeb },
+ { "skyblue" , 0x87ceeb },
+ { "light sky" , 0x87cefa },
+ { "lightskyblue" , 0x87cefa },
+ { "steel blue" , 0x4682b4 },
+ { "steelblue" , 0x4682b4 },
+ { "light steel" , 0xb0c4de },
+ { "lightsteelblue" , 0xb0c4de },
+ { "light blue" , 0xadd8e6 },
+ { "lightblue" , 0xadd8e6 },
+ { "powder blue" , 0xb0e0e6 },
+ { "powderblue" , 0xb0e0e6 },
+ { "pale turquoise" , 0xafeeee },
+ { "paleturquoise" , 0xafeeee },
+ { "dark turquoise" , 0xced1 },
+ { "darkturquoise" , 0xced1 },
+ { "medium turquoise" , 0x48d1cc },
+ { "mediumturquoise" , 0x48d1cc },
+ { "turquoise" , 0x40e0d0 },
+ { "cyan" , 0xffff },
+ { "light cyan" , 0xe0ffff },
+ { "lightcyan" , 0xe0ffff },
+ { "cadet blue" , 0x5f9ea0 },
+ { "cadetblue" , 0x5f9ea0 },
+ { "medium aquamarine" , 0x66cdaa },
+ { "mediumaquamarine" , 0x66cdaa },
+ { "aquamarine" , 0x7fffd4 },
+ { "dark green" , 0x6400 },
+ { "darkgreen" , 0x6400 },
+ { "dark olive" , 0x556b2f },
+ { "darkolivegreen" , 0x556b2f },
+ { "dark sea" , 0x8fbc8f },
+ { "darkseagreen" , 0x8fbc8f },
+ { "sea green" , 0x2e8b57 },
+ { "seagreen" , 0x2e8b57 },
+ { "medium sea" , 0x3cb371 },
+ { "mediumseagreen" , 0x3cb371 },
+ { "light sea" , 0x20b2aa },
+ { "lightseagreen" , 0x20b2aa },
+ { "pale green" , 0x98fb98 },
+ { "palegreen" , 0x98fb98 },
+ { "spring green" , 0xff7f },
+ { "springgreen" , 0xff7f },
+ { "lawn green" , 0x7cfc00 },
+ { "lawngreen" , 0x7cfc00 },
+ { "green" , 0xff00 },
+ { "chartreuse" , 0x7fff00 },
+ { "medium spring" , 0xfa9a },
+ { "mediumspringgreen" , 0xfa9a },
+ { "green yellow" , 0xadff2f },
+ { "greenyellow" , 0xadff2f },
+ { "lime green" , 0x32cd32 },
+ { "limegreen" , 0x32cd32 },
+ { "yellow green" , 0x9acd32 },
+ { "yellowgreen" , 0x9acd32 },
+ { "forest green" , 0x228b22 },
+ { "forestgreen" , 0x228b22 },
+ { "olive drab" , 0x6b8e23 },
+ { "olivedrab" , 0x6b8e23 },
+ { "dark khaki" , 0xbdb76b },
+ { "darkkhaki" , 0xbdb76b },
+ { "khaki" , 0xf0e68c },
+ { "pale goldenrod" , 0xeee8aa },
+ { "palegoldenrod" , 0xeee8aa },
+ { "light goldenrod" , 0xfafad2 },
+ { "lightgoldenrodyellow" , 0xfafad2 },
+ { "light yellow" , 0xffffe0 },
+ { "lightyellow" , 0xffffe0 },
+ { "yellow" , 0xffff00 },
+ { "gold" , 0xffd700 },
+ { "light goldenrod" , 0xeedd82 },
+ { "lightgoldenrod" , 0xeedd82 },
+ { "goldenrod" , 0xdaa520 },
+ { "dark goldenrod" , 0xb8860b },
+ { "darkgoldenrod" , 0xb8860b },
+ { "rosy brown" , 0xbc8f8f },
+ { "rosybrown" , 0xbc8f8f },
+ { "indian red" , 0xcd5c5c },
+ { "indianred" , 0xcd5c5c },
+ { "saddle brown" , 0x8b4513 },
+ { "saddlebrown" , 0x8b4513 },
+ { "sienna" , 0xa0522d },
+ { "peru" , 0xcd853f },
+ { "burlywood" , 0xdeb887 },
+ { "beige" , 0xf5f5dc },
+ { "wheat" , 0xf5deb3 },
+ { "sandy brown" , 0xf4a460 },
+ { "sandybrown" , 0xf4a460 },
+ { "tan" , 0xd2b48c },
+ { "chocolate" , 0xd2691e },
+ { "firebrick" , 0xb22222 },
+ { "brown" , 0xa52a2a },
+ { "dark salmon" , 0xe9967a },
+ { "darksalmon" , 0xe9967a },
+ { "salmon" , 0xfa8072 },
+ { "light salmon" , 0xffa07a },
+ { "lightsalmon" , 0xffa07a },
+ { "orange" , 0xffa500 },
+ { "dark orange" , 0xff8c00 },
+ { "darkorange" , 0xff8c00 },
+ { "coral" , 0xff7f50 },
+ { "light coral" , 0xf08080 },
+ { "lightcoral" , 0xf08080 },
+ { "tomato" , 0xff6347 },
+ { "orange red" , 0xff4500 },
+ { "orangered" , 0xff4500 },
+ { "red" , 0xff0000 },
+ { "hot pink" , 0xff69b4 },
+ { "hotpink" , 0xff69b4 },
+ { "deep pink" , 0xff1493 },
+ { "deeppink" , 0xff1493 },
+ { "pink" , 0xffc0cb },
+ { "light pink" , 0xffb6c1 },
+ { "lightpink" , 0xffb6c1 },
+ { "pale violet" , 0xdb7093 },
+ { "palevioletred" , 0xdb7093 },
+ { "maroon" , 0xb03060 },
+ { "medium violet" , 0xc71585 },
+ { "mediumvioletred" , 0xc71585 },
+ { "violet red" , 0xd02090 },
+ { "violetred" , 0xd02090 },
+ { "magenta" , 0xff00ff },
+ { "violet" , 0xee82ee },
+ { "plum" , 0xdda0dd },
+ { "orchid" , 0xda70d6 },
+ { "medium orchid" , 0xba55d3 },
+ { "mediumorchid" , 0xba55d3 },
+ { "dark orchid" , 0x9932cc },
+ { "darkorchid" , 0x9932cc },
+ { "dark violet" , 0x9400d3 },
+ { "darkviolet" , 0x9400d3 },
+ { "blue violet" , 0x8a2be2 },
+ { "blueviolet" , 0x8a2be2 },
+ { "purple" , 0xa020f0 },
+ { "medium purple" , 0x9370db },
+ { "mediumpurple" , 0x9370db },
+ { "thistle" , 0xd8bfd8 },
+ { "snow1" , 0xfffafa },
+ { "snow2" , 0xeee9e9 },
+ { "snow3" , 0xcdc9c9 },
+ { "snow4" , 0x8b8989 },
+ { "seashell1" , 0xfff5ee },
+ { "seashell2" , 0xeee5de },
+ { "seashell3" , 0xcdc5bf },
+ { "seashell4" , 0x8b8682 },
+ { "antiquewhite1" , 0xffefdb },
+ { "antiquewhite2" , 0xeedfcc },
+ { "antiquewhite3" , 0xcdc0b0 },
+ { "antiquewhite4" , 0x8b8378 },
+ { "bisque1" , 0xffe4c4 },
+ { "bisque2" , 0xeed5b7 },
+ { "bisque3" , 0xcdb79e },
+ { "bisque4" , 0x8b7d6b },
+ { "peachpuff1" , 0xffdab9 },
+ { "peachpuff2" , 0xeecbad },
+ { "peachpuff3" , 0xcdaf95 },
+ { "peachpuff4" , 0x8b7765 },
+ { "navajowhite1" , 0xffdead },
+ { "navajowhite2" , 0xeecfa1 },
+ { "navajowhite3" , 0xcdb38b },
+ { "navajowhite4" , 0x8b795e },
+ { "lemonchiffon1" , 0xfffacd },
+ { "lemonchiffon2" , 0xeee9bf },
+ { "lemonchiffon3" , 0xcdc9a5 },
+ { "lemonchiffon4" , 0x8b8970 },
+ { "cornsilk1" , 0xfff8dc },
+ { "cornsilk2" , 0xeee8cd },
+ { "cornsilk3" , 0xcdc8b1 },
+ { "cornsilk4" , 0x8b8878 },
+ { "ivory1" , 0xfffff0 },
+ { "ivory2" , 0xeeeee0 },
+ { "ivory3" , 0xcdcdc1 },
+ { "ivory4" , 0x8b8b83 },
+ { "honeydew1" , 0xf0fff0 },
+ { "honeydew2" , 0xe0eee0 },
+ { "honeydew3" , 0xc1cdc1 },
+ { "honeydew4" , 0x838b83 },
+ { "lavenderblush1" , 0xfff0f5 },
+ { "lavenderblush2" , 0xeee0e5 },
+ { "lavenderblush3" , 0xcdc1c5 },
+ { "lavenderblush4" , 0x8b8386 },
+ { "mistyrose1" , 0xffe4e1 },
+ { "mistyrose2" , 0xeed5d2 },
+ { "mistyrose3" , 0xcdb7b5 },
+ { "mistyrose4" , 0x8b7d7b },
+ { "azure1" , 0xf0ffff },
+ { "azure2" , 0xe0eeee },
+ { "azure3" , 0xc1cdcd },
+ { "azure4" , 0x838b8b },
+ { "slateblue1" , 0x836fff },
+ { "slateblue2" , 0x7a67ee },
+ { "slateblue3" , 0x6959cd },
+ { "slateblue4" , 0x473c8b },
+ { "royalblue1" , 0x4876ff },
+ { "royalblue2" , 0x436eee },
+ { "royalblue3" , 0x3a5fcd },
+ { "royalblue4" , 0x27408b },
+ { "blue1" , 0xff },
+ { "blue2" , 0xee },
+ { "blue3" , 0xcd },
+ { "blue4" , 0x8b },
+ { "dodgerblue1" , 0x1e90ff },
+ { "dodgerblue2" , 0x1c86ee },
+ { "dodgerblue3" , 0x1874cd },
+ { "dodgerblue4" , 0x104e8b },
+ { "steelblue1" , 0x63b8ff },
+ { "steelblue2" , 0x5cacee },
+ { "steelblue3" , 0x4f94cd },
+ { "steelblue4" , 0x36648b },
+ { "deepskyblue1" , 0xbfff },
+ { "deepskyblue2" , 0xb2ee },
+ { "deepskyblue3" , 0x9acd },
+ { "deepskyblue4" , 0x688b },
+ { "skyblue1" , 0x87ceff },
+ { "skyblue2" , 0x7ec0ee },
+ { "skyblue3" , 0x6ca6cd },
+ { "skyblue4" , 0x4a708b },
+ { "lightskyblue1" , 0xb0e2ff },
+ { "lightskyblue2" , 0xa4d3ee },
+ { "lightskyblue3" , 0x8db6cd },
+ { "lightskyblue4" , 0x607b8b },
+ { "slategray1" , 0xc6e2ff },
+ { "slategray2" , 0xb9d3ee },
+ { "slategray3" , 0x9fb6cd },
+ { "slategray4" , 0x6c7b8b },
+ { "lightsteelblue1" , 0xcae1ff },
+ { "lightsteelblue2" , 0xbcd2ee },
+ { "lightsteelblue3" , 0xa2b5cd },
+ { "lightsteelblue4" , 0x6e7b8b },
+ { "lightblue1" , 0xbfefff },
+ { "lightblue2" , 0xb2dfee },
+ { "lightblue3" , 0x9ac0cd },
+ { "lightblue4" , 0x68838b },
+ { "lightcyan1" , 0xe0ffff },
+ { "lightcyan2" , 0xd1eeee },
+ { "lightcyan3" , 0xb4cdcd },
+ { "lightcyan4" , 0x7a8b8b },
+ { "paleturquoise1" , 0xbbffff },
+ { "paleturquoise2" , 0xaeeeee },
+ { "paleturquoise3" , 0x96cdcd },
+ { "paleturquoise4" , 0x668b8b },
+ { "cadetblue1" , 0x98f5ff },
+ { "cadetblue2" , 0x8ee5ee },
+ { "cadetblue3" , 0x7ac5cd },
+ { "cadetblue4" , 0x53868b },
+ { "turquoise1" , 0xf5ff },
+ { "turquoise2" , 0xe5ee },
+ { "turquoise3" , 0xc5cd },
+ { "turquoise4" , 0x868b },
+ { "cyan1" , 0xffff },
+ { "cyan2" , 0xeeee },
+ { "cyan3" , 0xcdcd },
+ { "cyan4" , 0x8b8b },
+ { "darkslategray1" , 0x97ffff },
+ { "darkslategray2" , 0x8deeee },
+ { "darkslategray3" , 0x79cdcd },
+ { "darkslategray4" , 0x528b8b },
+ { "aquamarine1" , 0x7fffd4 },
+ { "aquamarine2" , 0x76eec6 },
+ { "aquamarine3" , 0x66cdaa },
+ { "aquamarine4" , 0x458b74 },
+ { "darkseagreen1" , 0xc1ffc1 },
+ { "darkseagreen2" , 0xb4eeb4 },
+ { "darkseagreen3" , 0x9bcd9b },
+ { "darkseagreen4" , 0x698b69 },
+ { "seagreen1" , 0x54ff9f },
+ { "seagreen2" , 0x4eee94 },
+ { "seagreen3" , 0x43cd80 },
+ { "seagreen4" , 0x2e8b57 },
+ { "palegreen1" , 0x9aff9a },
+ { "palegreen2" , 0x90ee90 },
+ { "palegreen3" , 0x7ccd7c },
+ { "palegreen4" , 0x548b54 },
+ { "springgreen1" , 0xff7f },
+ { "springgreen2" , 0xee76 },
+ { "springgreen3" , 0xcd66 },
+ { "springgreen4" , 0x8b45 },
+ { "green1" , 0xff00 },
+ { "green2" , 0xee00 },
+ { "green3" , 0xcd00 },
+ { "green4" , 0x8b00 },
+ { "chartreuse1" , 0x7fff00 },
+ { "chartreuse2" , 0x76ee00 },
+ { "chartreuse3" , 0x66cd00 },
+ { "chartreuse4" , 0x458b00 },
+ { "olivedrab1" , 0xc0ff3e },
+ { "olivedrab2" , 0xb3ee3a },
+ { "olivedrab3" , 0x9acd32 },
+ { "olivedrab4" , 0x698b22 },
+ { "darkolivegreen1" , 0xcaff70 },
+ { "darkolivegreen2" , 0xbcee68 },
+ { "darkolivegreen3" , 0xa2cd5a },
+ { "darkolivegreen4" , 0x6e8b3d },
+ { "khaki1" , 0xfff68f },
+ { "khaki2" , 0xeee685 },
+ { "khaki3" , 0xcdc673 },
+ { "khaki4" , 0x8b864e },
+ { "lightgoldenrod1" , 0xffec8b },
+ { "lightgoldenrod2" , 0xeedc82 },
+ { "lightgoldenrod3" , 0xcdbe70 },
+ { "lightgoldenrod4" , 0x8b814c },
+ { "lightyellow1" , 0xffffe0 },
+ { "lightyellow2" , 0xeeeed1 },
+ { "lightyellow3" , 0xcdcdb4 },
+ { "lightyellow4" , 0x8b8b7a },
+ { "yellow1" , 0xffff00 },
+ { "yellow2" , 0xeeee00 },
+ { "yellow3" , 0xcdcd00 },
+ { "yellow4" , 0x8b8b00 },
+ { "gold1" , 0xffd700 },
+ { "gold2" , 0xeec900 },
+ { "gold3" , 0xcdad00 },
+ { "gold4" , 0x8b7500 },
+ { "goldenrod1" , 0xffc125 },
+ { "goldenrod2" , 0xeeb422 },
+ { "goldenrod3" , 0xcd9b1d },
+ { "goldenrod4" , 0x8b6914 },
+ { "darkgoldenrod1" , 0xffb90f },
+ { "darkgoldenrod2" , 0xeead0e },
+ { "darkgoldenrod3" , 0xcd950c },
+ { "darkgoldenrod4" , 0x8b6508 },
+ { "rosybrown1" , 0xffc1c1 },
+ { "rosybrown2" , 0xeeb4b4 },
+ { "rosybrown3" , 0xcd9b9b },
+ { "rosybrown4" , 0x8b6969 },
+ { "indianred1" , 0xff6a6a },
+ { "indianred2" , 0xee6363 },
+ { "indianred3" , 0xcd5555 },
+ { "indianred4" , 0x8b3a3a },
+ { "sienna1" , 0xff8247 },
+ { "sienna2" , 0xee7942 },
+ { "sienna3" , 0xcd6839 },
+ { "sienna4" , 0x8b4726 },
+ { "burlywood1" , 0xffd39b },
+ { "burlywood2" , 0xeec591 },
+ { "burlywood3" , 0xcdaa7d },
+ { "burlywood4" , 0x8b7355 },
+ { "wheat1" , 0xffe7ba },
+ { "wheat2" , 0xeed8ae },
+ { "wheat3" , 0xcdba96 },
+ { "wheat4" , 0x8b7e66 },
+ { "tan1" , 0xffa54f },
+ { "tan2" , 0xee9a49 },
+ { "tan3" , 0xcd853f },
+ { "tan4" , 0x8b5a2b },
+ { "chocolate1" , 0xff7f24 },
+ { "chocolate2" , 0xee7621 },
+ { "chocolate3" , 0xcd661d },
+ { "chocolate4" , 0x8b4513 },
+ { "firebrick1" , 0xff3030 },
+ { "firebrick2" , 0xee2c2c },
+ { "firebrick3" , 0xcd2626 },
+ { "firebrick4" , 0x8b1a1a },
+ { "brown1" , 0xff4040 },
+ { "brown2" , 0xee3b3b },
+ { "brown3" , 0xcd3333 },
+ { "brown4" , 0x8b2323 },
+ { "salmon1" , 0xff8c69 },
+ { "salmon2" , 0xee8262 },
+ { "salmon3" , 0xcd7054 },
+ { "salmon4" , 0x8b4c39 },
+ { "lightsalmon1" , 0xffa07a },
+ { "lightsalmon2" , 0xee9572 },
+ { "lightsalmon3" , 0xcd8162 },
+ { "lightsalmon4" , 0x8b5742 },
+ { "orange1" , 0xffa500 },
+ { "orange2" , 0xee9a00 },
+ { "orange3" , 0xcd8500 },
+ { "orange4" , 0x8b5a00 },
+ { "darkorange1" , 0xff7f00 },
+ { "darkorange2" , 0xee7600 },
+ { "darkorange3" , 0xcd6600 },
+ { "darkorange4" , 0x8b4500 },
+ { "coral1" , 0xff7256 },
+ { "coral2" , 0xee6a50 },
+ { "coral3" , 0xcd5b45 },
+ { "coral4" , 0x8b3e2f },
+ { "tomato1" , 0xff6347 },
+ { "tomato2" , 0xee5c42 },
+ { "tomato3" , 0xcd4f39 },
+ { "tomato4" , 0x8b3626 },
+ { "orangered1" , 0xff4500 },
+ { "orangered2" , 0xee4000 },
+ { "orangered3" , 0xcd3700 },
+ { "orangered4" , 0x8b2500 },
+ { "red1" , 0xff0000 },
+ { "red2" , 0xee0000 },
+ { "red3" , 0xcd0000 },
+ { "red4" , 0x8b0000 },
+ { "deeppink1" , 0xff1493 },
+ { "deeppink2" , 0xee1289 },
+ { "deeppink3" , 0xcd1076 },
+ { "deeppink4" , 0x8b0a50 },
+ { "hotpink1" , 0xff6eb4 },
+ { "hotpink2" , 0xee6aa7 },
+ { "hotpink3" , 0xcd6090 },
+ { "hotpink4" , 0x8b3a62 },
+ { "pink1" , 0xffb5c5 },
+ { "pink2" , 0xeea9b8 },
+ { "pink3" , 0xcd919e },
+ { "pink4" , 0x8b636c },
+ { "lightpink1" , 0xffaeb9 },
+ { "lightpink2" , 0xeea2ad },
+ { "lightpink3" , 0xcd8c95 },
+ { "lightpink4" , 0x8b5f65 },
+ { "palevioletred1" , 0xff82ab },
+ { "palevioletred2" , 0xee799f },
+ { "palevioletred3" , 0xcd6889 },
+ { "palevioletred4" , 0x8b475d },
+ { "maroon1" , 0xff34b3 },
+ { "maroon2" , 0xee30a7 },
+ { "maroon3" , 0xcd2990 },
+ { "maroon4" , 0x8b1c62 },
+ { "violetred1" , 0xff3e96 },
+ { "violetred2" , 0xee3a8c },
+ { "violetred3" , 0xcd3278 },
+ { "violetred4" , 0x8b2252 },
+ { "magenta1" , 0xff00ff },
+ { "magenta2" , 0xee00ee },
+ { "magenta3" , 0xcd00cd },
+ { "magenta4" , 0x8b008b },
+ { "orchid1" , 0xff83fa },
+ { "orchid2" , 0xee7ae9 },
+ { "orchid3" , 0xcd69c9 },
+ { "orchid4" , 0x8b4789 },
+ { "plum1" , 0xffbbff },
+ { "plum2" , 0xeeaeee },
+ { "plum3" , 0xcd96cd },
+ { "plum4" , 0x8b668b },
+ { "mediumorchid1" , 0xe066ff },
+ { "mediumorchid2" , 0xd15fee },
+ { "mediumorchid3" , 0xb452cd },
+ { "mediumorchid4" , 0x7a378b },
+ { "darkorchid1" , 0xbf3eff },
+ { "darkorchid2" , 0xb23aee },
+ { "darkorchid3" , 0x9a32cd },
+ { "darkorchid4" , 0x68228b },
+ { "purple1" , 0x9b30ff },
+ { "purple2" , 0x912cee },
+ { "purple3" , 0x7d26cd },
+ { "purple4" , 0x551a8b },
+ { "mediumpurple1" , 0xab82ff },
+ { "mediumpurple2" , 0x9f79ee },
+ { "mediumpurple3" , 0x8968cd },
+ { "mediumpurple4" , 0x5d478b },
+ { "thistle1" , 0xffe1ff },
+ { "thistle2" , 0xeed2ee },
+ { "thistle3" , 0xcdb5cd },
+ { "thistle4" , 0x8b7b8b },
+ { "gray0" , 0x0 },
+ { "grey0" , 0x0 },
+ { "gray1" , 0x30303 },
+ { "grey1" , 0x30303 },
+ { "gray2" , 0x50505 },
+ { "grey2" , 0x50505 },
+ { "gray3" , 0x80808 },
+ { "grey3" , 0x80808 },
+ { "gray4" , 0xa0a0a },
+ { "grey4" , 0xa0a0a },
+ { "gray5" , 0xd0d0d },
+ { "grey5" , 0xd0d0d },
+ { "gray6" , 0xf0f0f },
+ { "grey6" , 0xf0f0f },
+ { "gray7" , 0x121212 },
+ { "grey7" , 0x121212 },
+ { "gray8" , 0x141414 },
+ { "grey8" , 0x141414 },
+ { "gray9" , 0x171717 },
+ { "grey9" , 0x171717 },
+ { "gray10" , 0x1a1a1a },
+ { "grey10" , 0x1a1a1a },
+ { "gray11" , 0x1c1c1c },
+ { "grey11" , 0x1c1c1c },
+ { "gray12" , 0x1f1f1f },
+ { "grey12" , 0x1f1f1f },
+ { "gray13" , 0x212121 },
+ { "grey13" , 0x212121 },
+ { "gray14" , 0x242424 },
+ { "grey14" , 0x242424 },
+ { "gray15" , 0x262626 },
+ { "grey15" , 0x262626 },
+ { "gray16" , 0x292929 },
+ { "grey16" , 0x292929 },
+ { "gray17" , 0x2b2b2b },
+ { "grey17" , 0x2b2b2b },
+ { "gray18" , 0x2e2e2e },
+ { "grey18" , 0x2e2e2e },
+ { "gray19" , 0x303030 },
+ { "grey19" , 0x303030 },
+ { "gray20" , 0x333333 },
+ { "grey20" , 0x333333 },
+ { "gray21" , 0x363636 },
+ { "grey21" , 0x363636 },
+ { "gray22" , 0x383838 },
+ { "grey22" , 0x383838 },
+ { "gray23" , 0x3b3b3b },
+ { "grey23" , 0x3b3b3b },
+ { "gray24" , 0x3d3d3d },
+ { "grey24" , 0x3d3d3d },
+ { "gray25" , 0x404040 },
+ { "grey25" , 0x404040 },
+ { "gray26" , 0x424242 },
+ { "grey26" , 0x424242 },
+ { "gray27" , 0x454545 },
+ { "grey27" , 0x454545 },
+ { "gray28" , 0x474747 },
+ { "grey28" , 0x474747 },
+ { "gray29" , 0x4a4a4a },
+ { "grey29" , 0x4a4a4a },
+ { "gray30" , 0x4d4d4d },
+ { "grey30" , 0x4d4d4d },
+ { "gray31" , 0x4f4f4f },
+ { "grey31" , 0x4f4f4f },
+ { "gray32" , 0x525252 },
+ { "grey32" , 0x525252 },
+ { "gray33" , 0x545454 },
+ { "grey33" , 0x545454 },
+ { "gray34" , 0x575757 },
+ { "grey34" , 0x575757 },
+ { "gray35" , 0x595959 },
+ { "grey35" , 0x595959 },
+ { "gray36" , 0x5c5c5c },
+ { "grey36" , 0x5c5c5c },
+ { "gray37" , 0x5e5e5e },
+ { "grey37" , 0x5e5e5e },
+ { "gray38" , 0x616161 },
+ { "grey38" , 0x616161 },
+ { "gray39" , 0x636363 },
+ { "grey39" , 0x636363 },
+ { "gray40" , 0x666666 },
+ { "grey40" , 0x666666 },
+ { "gray41" , 0x696969 },
+ { "grey41" , 0x696969 },
+ { "gray42" , 0x6b6b6b },
+ { "grey42" , 0x6b6b6b },
+ { "gray43" , 0x6e6e6e },
+ { "grey43" , 0x6e6e6e },
+ { "gray44" , 0x707070 },
+ { "grey44" , 0x707070 },
+ { "gray45" , 0x737373 },
+ { "grey45" , 0x737373 },
+ { "gray46" , 0x757575 },
+ { "grey46" , 0x757575 },
+ { "gray47" , 0x787878 },
+ { "grey47" , 0x787878 },
+ { "gray48" , 0x7a7a7a },
+ { "grey48" , 0x7a7a7a },
+ { "gray49" , 0x7d7d7d },
+ { "grey49" , 0x7d7d7d },
+ { "gray50" , 0x7f7f7f },
+ { "grey50" , 0x7f7f7f },
+ { "gray51" , 0x828282 },
+ { "grey51" , 0x828282 },
+ { "gray52" , 0x858585 },
+ { "grey52" , 0x858585 },
+ { "gray53" , 0x878787 },
+ { "grey53" , 0x878787 },
+ { "gray54" , 0x8a8a8a },
+ { "grey54" , 0x8a8a8a },
+ { "gray55" , 0x8c8c8c },
+ { "grey55" , 0x8c8c8c },
+ { "gray56" , 0x8f8f8f },
+ { "grey56" , 0x8f8f8f },
+ { "gray57" , 0x919191 },
+ { "grey57" , 0x919191 },
+ { "gray58" , 0x949494 },
+ { "grey58" , 0x949494 },
+ { "gray59" , 0x969696 },
+ { "grey59" , 0x969696 },
+ { "gray60" , 0x999999 },
+ { "grey60" , 0x999999 },
+ { "gray61" , 0x9c9c9c },
+ { "grey61" , 0x9c9c9c },
+ { "gray62" , 0x9e9e9e },
+ { "grey62" , 0x9e9e9e },
+ { "gray63" , 0xa1a1a1 },
+ { "grey63" , 0xa1a1a1 },
+ { "gray64" , 0xa3a3a3 },
+ { "grey64" , 0xa3a3a3 },
+ { "gray65" , 0xa6a6a6 },
+ { "grey65" , 0xa6a6a6 },
+ { "gray66" , 0xa8a8a8 },
+ { "grey66" , 0xa8a8a8 },
+ { "gray67" , 0xababab },
+ { "grey67" , 0xababab },
+ { "gray68" , 0xadadad },
+ { "grey68" , 0xadadad },
+ { "gray69" , 0xb0b0b0 },
+ { "grey69" , 0xb0b0b0 },
+ { "gray70" , 0xb3b3b3 },
+ { "grey70" , 0xb3b3b3 },
+ { "gray71" , 0xb5b5b5 },
+ { "grey71" , 0xb5b5b5 },
+ { "gray72" , 0xb8b8b8 },
+ { "grey72" , 0xb8b8b8 },
+ { "gray73" , 0xbababa },
+ { "grey73" , 0xbababa },
+ { "gray74" , 0xbdbdbd },
+ { "grey74" , 0xbdbdbd },
+ { "gray75" , 0xbfbfbf },
+ { "grey75" , 0xbfbfbf },
+ { "gray76" , 0xc2c2c2 },
+ { "grey76" , 0xc2c2c2 },
+ { "gray77" , 0xc4c4c4 },
+ { "grey77" , 0xc4c4c4 },
+ { "gray78" , 0xc7c7c7 },
+ { "grey78" , 0xc7c7c7 },
+ { "gray79" , 0xc9c9c9 },
+ { "grey79" , 0xc9c9c9 },
+ { "gray80" , 0xcccccc },
+ { "grey80" , 0xcccccc },
+ { "gray81" , 0xcfcfcf },
+ { "grey81" , 0xcfcfcf },
+ { "gray82" , 0xd1d1d1 },
+ { "grey82" , 0xd1d1d1 },
+ { "gray83" , 0xd4d4d4 },
+ { "grey83" , 0xd4d4d4 },
+ { "gray84" , 0xd6d6d6 },
+ { "grey84" , 0xd6d6d6 },
+ { "gray85" , 0xd9d9d9 },
+ { "grey85" , 0xd9d9d9 },
+ { "gray86" , 0xdbdbdb },
+ { "grey86" , 0xdbdbdb },
+ { "gray87" , 0xdedede },
+ { "grey87" , 0xdedede },
+ { "gray88" , 0xe0e0e0 },
+ { "grey88" , 0xe0e0e0 },
+ { "gray89" , 0xe3e3e3 },
+ { "grey89" , 0xe3e3e3 },
+ { "gray90" , 0xe5e5e5 },
+ { "grey90" , 0xe5e5e5 },
+ { "gray91" , 0xe8e8e8 },
+ { "grey91" , 0xe8e8e8 },
+ { "gray92" , 0xebebeb },
+ { "grey92" , 0xebebeb },
+ { "gray93" , 0xededed },
+ { "grey93" , 0xededed },
+ { "gray94" , 0xf0f0f0 },
+ { "grey94" , 0xf0f0f0 },
+ { "gray95" , 0xf2f2f2 },
+ { "grey95" , 0xf2f2f2 },
+ { "gray96" , 0xf5f5f5 },
+ { "grey96" , 0xf5f5f5 },
+ { "gray97" , 0xf7f7f7 },
+ { "grey97" , 0xf7f7f7 },
+ { "gray98" , 0xfafafa },
+ { "grey98" , 0xfafafa },
+ { "gray99" , 0xfcfcfc },
+ { "grey99" , 0xfcfcfc },
+ { "gray100" , 0xffffff },
+ { "grey100" , 0xffffff },
+ { "dark grey" , 0xa9a9a9 },
+ { "darkgrey" , 0xa9a9a9 },
+ { "dark gray" , 0xa9a9a9 },
+ { "darkgray" , 0xa9a9a9 },
+ { "dark blue" , 0x8b },
+ { "darkblue" , 0x8b },
+ { "dark cyan" , 0x8b8b },
+ { "darkcyan" , 0x8b8b },
+ { "dark magenta" , 0x8b008b },
+ { "darkmagenta" , 0x8b008b },
+ { "dark red" , 0x8b0000 },
+ { "darkred" , 0x8b0000 },
+ { "light green" , 0x90ee90 },
+ { "lightgreen" , 0x90ee90 },
+ { "none", -1 },
+ { 0, 0 }
+};
diff --git a/libs/minilibx_opengl_20191021/mlx_shaders.c b/libs/minilibx_opengl_20191021/mlx_shaders.c
new file mode 100644
index 0000000..4a58955
--- /dev/null
+++ b/libs/minilibx_opengl_20191021/mlx_shaders.c
@@ -0,0 +1,240 @@
+// mlx_shaders.c
+
+#include
+#include
+#include
+#include
+#include "mlx_int.h"
+
+
+void display_log(GLuint object, void (*param_func)(), void (*getlog_func)())
+{
+ GLint log_length;
+ char *log;
+
+ param_func(object, GL_INFO_LOG_LENGTH, &log_length);
+ log = malloc(log_length);
+ getlog_func(object, log_length, NULL, log);
+ fprintf(stderr, "%s", log);
+ free(log);
+}
+
+
+int mlx_shaders_pixel(glsl_info_t *glsl)
+{
+ char *source;
+ int length;
+ GLint action_ok;
+
+ glsl->pixel_vshader = glCreateShader(GL_VERTEX_SHADER);
+ source = strdup("#version 110 \n"
+ "attribute vec2 position;"
+ "varying vec2 texcoord;"
+ "void main()"
+ "{"
+ " gl_Position = vec4( position, 0.0, 1.0);"
+ " texcoord = vec2(position[0]+1.0, 1.0 - position[1]) / 2.0;"
+ "}");
+ length = strlen(source);
+ glShaderSource(glsl->pixel_vshader, 1, (const GLchar**)&source, &length);
+ glCompileShader(glsl->pixel_vshader);
+ free(source);
+
+ glGetShaderiv(glsl->pixel_vshader, GL_COMPILE_STATUS, &action_ok);
+ if (!action_ok) {
+ fprintf(stderr, "Failed to compile pixel vshader :\n");
+ display_log(glsl->pixel_vshader, glGetShaderiv, glGetShaderInfoLog);
+ return (1);
+ }
+
+ glsl->pixel_fshader = glCreateShader(GL_FRAGMENT_SHADER);
+ source = strdup("#version 110 \n"
+ "uniform sampler2D texture;"
+ "varying vec2 texcoord;"
+ "void main()"
+ "{"
+ " gl_FragColor = texture2D(texture, texcoord);"
+ "}");
+ length = strlen(source);
+ glShaderSource(glsl->pixel_fshader, 1, (const GLchar**)&source, &length);
+ glCompileShader(glsl->pixel_fshader);
+ free(source);
+
+ glGetShaderiv(glsl->pixel_fshader, GL_COMPILE_STATUS, &action_ok);
+ if (!action_ok) {
+ fprintf(stderr, "Failed to compile pixel fshader :\n");
+ display_log(glsl->pixel_fshader, glGetShaderiv, glGetShaderInfoLog);
+ return (1);
+ }
+
+ glsl->pixel_program = glCreateProgram();
+ glAttachShader(glsl->pixel_program, glsl->pixel_vshader);
+ glAttachShader(glsl->pixel_program, glsl->pixel_fshader);
+ glLinkProgram(glsl->pixel_program);
+
+ glGetProgramiv(glsl->pixel_program, GL_LINK_STATUS, &action_ok);
+ if (!action_ok) {
+ fprintf(stderr, "Failed to link pixel shader program:\n");
+ display_log(glsl->pixel_program, glGetProgramiv, glGetProgramInfoLog);
+ return (1);
+ }
+
+ glFlush();
+
+ return (0);
+}
+
+
+int mlx_shaders_image(glsl_info_t *glsl)
+{
+ char *source;
+ int length;
+ GLint action_ok;
+
+ glsl->image_vshader = glCreateShader(GL_VERTEX_SHADER);
+ source = strdup("#version 110 \n"
+ "attribute vec2 position;"
+ "uniform vec2 winhalfsize;"
+ "uniform vec2 imagepos;"
+ "uniform vec2 imagesize;"
+ "varying vec2 texcoord;"
+ "void main()"
+ "{"
+ " texcoord = position / imagesize;"
+ " vec2 pos = position - winhalfsize + imagepos;"
+ " pos = pos / winhalfsize;"
+ " gl_Position = vec4( pos, 0.0, 1.0);"
+ "}");
+ length = strlen(source);
+ glShaderSource(glsl->image_vshader, 1, (const GLchar**)&source, &length);
+ glCompileShader(glsl->image_vshader);
+ free(source);
+
+ glGetShaderiv(glsl->image_vshader, GL_COMPILE_STATUS, &action_ok);
+ if (!action_ok) {
+ fprintf(stderr, "Failed to compile image vshader :\n");
+ display_log(glsl->image_vshader, glGetShaderiv, glGetShaderInfoLog);
+ return (1);
+ }
+
+ glsl->image_fshader = glCreateShader(GL_FRAGMENT_SHADER);
+ source = strdup("#version 110 \n"
+ "uniform sampler2D texture;"
+ "varying vec2 texcoord;"
+ "void main()"
+ "{"
+ " gl_FragColor = texture2D(texture, texcoord);"
+ "}");
+ length = strlen(source);
+ glShaderSource(glsl->image_fshader, 1, (const GLchar**)&source, &length);
+ glCompileShader(glsl->image_fshader);
+ free(source);
+
+ glGetShaderiv(glsl->image_fshader, GL_COMPILE_STATUS, &action_ok);
+ if (!action_ok) {
+ fprintf(stderr, "Failed to compile image fshader :\n");
+ display_log(glsl->image_fshader, glGetShaderiv, glGetShaderInfoLog);
+ return (1);
+ }
+
+ glsl->image_program = glCreateProgram();
+ glAttachShader(glsl->image_program, glsl->image_vshader);
+ glAttachShader(glsl->image_program, glsl->image_fshader);
+ glLinkProgram(glsl->image_program);
+
+ glGetProgramiv(glsl->image_program, GL_LINK_STATUS, &action_ok);
+ if (!action_ok) {
+ fprintf(stderr, "Failed to link image shader program:\n");
+ display_log(glsl->image_program, glGetProgramiv, glGetProgramInfoLog);
+ return (1);
+ }
+
+ glFlush();
+
+ return (0);
+}
+
+
+
+
+int mlx_shaders_font(glsl_info_t *glsl)
+{
+ char *source;
+ int length;
+ GLint action_ok;
+
+ glsl->font_vshader = glCreateShader(GL_VERTEX_SHADER);
+ source = strdup("#version 110 \n"
+ "attribute vec2 position;"
+ "uniform vec2 winhalfsize;"
+ "uniform vec2 fontposinwin;"
+ "uniform vec2 fontposinatlas;"
+ "uniform vec2 fontatlassize;"
+ "varying vec2 texcoord;"
+ "void main()"
+ "{"
+#ifdef STRINGPUTX11
+ " texcoord = (position * vec2(1.4, -1.4) + fontposinatlas ) / fontatlassize;"
+#else
+ " texcoord = (position * vec2(1.0, -1.0) + fontposinatlas ) / fontatlassize;"
+#endif
+ " vec2 pos = position - winhalfsize + fontposinwin;"
+ " pos = pos / winhalfsize;"
+ " gl_Position = vec4( pos, 0.0, 1.0);"
+ "}");
+ length = strlen(source);
+ glShaderSource(glsl->font_vshader, 1, (const GLchar**)&source, &length);
+ glCompileShader(glsl->font_vshader);
+ free(source);
+
+ glGetShaderiv(glsl->font_vshader, GL_COMPILE_STATUS, &action_ok);
+ if (!action_ok) {
+ fprintf(stderr, "Failed to compile font vshader :\n");
+ display_log(glsl->font_vshader, glGetShaderiv, glGetShaderInfoLog);
+ return (1);
+ }
+
+ glsl->font_fshader = glCreateShader(GL_FRAGMENT_SHADER);
+ source = strdup("#version 110 \n"
+ "uniform sampler2D texture;"
+ "uniform vec4 color;"
+ "varying vec2 texcoord;"
+ "void main()"
+ "{"
+ " gl_FragColor = color * texture2D(texture, texcoord);"
+ "}");
+ length = strlen(source);
+ glShaderSource(glsl->font_fshader, 1, (const GLchar**)&source, &length);
+ glCompileShader(glsl->font_fshader);
+ free(source);
+
+ glGetShaderiv(glsl->font_fshader, GL_COMPILE_STATUS, &action_ok);
+ if (!action_ok) {
+ fprintf(stderr, "Failed to compile font fshader :\n");
+ display_log(glsl->font_fshader, glGetShaderiv, glGetShaderInfoLog);
+ return (1);
+ }
+
+ glsl->font_program = glCreateProgram();
+ glAttachShader(glsl->font_program, glsl->font_vshader);
+ glAttachShader(glsl->font_program, glsl->font_fshader);
+ glLinkProgram(glsl->font_program);
+
+ glGetProgramiv(glsl->font_program, GL_LINK_STATUS, &action_ok);
+ if (!action_ok) {
+ fprintf(stderr, "Failed to link font shader program:\n");
+ display_log(glsl->font_program, glGetProgramiv, glGetProgramInfoLog);
+ return (1);
+ }
+
+ glFlush();
+
+ return (0);
+}
+
+
+
+int mlx_shaders(glsl_info_t *glsl)
+{
+ return (mlx_shaders_pixel(glsl) + mlx_shaders_image(glsl) + mlx_shaders_font(glsl));
+}
diff --git a/libs/minilibx-linux-master/mlx_xpm.c.ok b/libs/minilibx_opengl_20191021/mlx_xpm.c
similarity index 70%
rename from libs/minilibx-linux-master/mlx_xpm.c.ok
rename to libs/minilibx_opengl_20191021/mlx_xpm.c
index 225ea3c..78d8c9b 100644
--- a/libs/minilibx-linux-master/mlx_xpm.c.ok
+++ b/libs/minilibx_opengl_20191021/mlx_xpm.c
@@ -1,24 +1,36 @@
-/*
-** xpm-read.c for MinilibX in
-**
-** Made by Charlie Root
-** Login
-**
-** Started on Tue Dec 11 15:25:27 2001 olivier crouzet
-** Last update Sat Oct 1 14:40:55 2005 Olivier Crouzet
-*/
-
+// mlx xpm
+// by ol
+#include
+#include
+#include
+#include
+#include
+#include
+#include
#include "mlx_int.h"
-extern struct s_col_name mlx_col_name[];
+typedef struct s_xpm_col
+{
+ int name;
+ int col;
+} t_xpm_col;
+
+
+struct s_col_name
+{
+ char *name;
+ int color;
+};
+
+//extern struct s_col_name mlx_col_name[];
+#include "mlx_rgb.c"
#define RETURN { if (colors) free(colors); if (tab) free(tab); \
if (colors_direct) free(colors_direct); \
- if (img) {XDestroyImage(img->image); \
- XFreePixmap(xvar->display,img->pix);free(img);} \
- return ((void *)0);}
+ if (img) mlx_destroy_image(xvar, img); \
+ return ((void *)0); }
@@ -74,12 +86,18 @@ int mlx_int_get_col_name(char *str,int size)
return (result);
}
-int mlx_int_get_text_rgb(char *name)
+int mlx_int_get_text_rgb(char *name, char *end)
{
int i;
+ char buff[64];
if (*name == '#')
return (strtol(name+1,0,16));
+ if (end)
+ {
+ snprintf(buff, 64, "%s %s", name, end);
+ name = buff;
+ }
i = 0;
while (mlx_col_name[i].name)
{
@@ -91,8 +109,9 @@ int mlx_int_get_text_rgb(char *name)
}
-int mlx_int_xpm_set_pixel(t_img *img, char *data, int opp, int col, int x)
+void mlx_int_xpm_set_pixel(mlx_img_list_t *img, char *data, int opp, int col, int x)
{
+ /*
int dec;
dec = opp;
@@ -104,10 +123,13 @@ int mlx_int_xpm_set_pixel(t_img *img, char *data, int opp, int col, int x)
*(data+x*opp+opp-dec-1) = col&0xFF;
col >>= 8;
}
+ */
+ // opp is 4, do it the simple way
+ *((unsigned int *)(data+4*x)) = col;
}
-void *mlx_int_parse_xpm(t_xvar *xvar,void *info,int info_size,char *(*f)())
+void *mlx_int_parse_xpm(mlx_ptr_t *xvar,void *info,int info_size,char *(*f)())
{
int pos;
char *line;
@@ -124,14 +146,11 @@ void *mlx_int_parse_xpm(t_xvar *xvar,void *info,int info_size,char *(*f)())
int x;
int i;
int j;
- t_img *img;
+ mlx_img_list_t *img;
t_xpm_col *colors;
int *colors_direct;
int width;
int height;
- XImage *clip_img;
- XGCValues xgcv;
- Pixmap clip_pix;
colors = 0;
colors_direct = 0;
@@ -167,37 +186,42 @@ void *mlx_int_parse_xpm(t_xvar *xvar,void *info,int info_size,char *(*f)())
RETURN;
j = 0;
while (tab[j] && strcmp(tab[j++],"c"));
+
if (!tab[j])
RETURN;
-
- if ((rgb_col = mlx_int_get_text_rgb(tab[j]))==-1)
+
+ rgb_col = mlx_int_get_text_rgb(tab[j], tab[j+1]);
+ /*
+ if ((rgb_col = mlx_int_get_text_rgb(tab[j], tab[j+1]))==-1)
{
- if (!(clip_data = malloc(4*width*height)) || /* ok, nice size .. */
+ if (!(clip_data = malloc(4*width*height)) || // ok, nice size ..
!(clip_img = XCreateImage(xvar->display, xvar->visual,
1, XYPixmap, 0, clip_data,
width, height, 8, (width+7)/8)) )
RETURN;
memset(clip_data, 0xFF, 4*width*height);
}
-
+ */
if (method)
- colors_direct[mlx_int_get_col_name(line,cpp)] =
- rgb_col>=0?mlx_get_color_value(xvar, rgb_col):rgb_col;
- else
+ colors_direct[mlx_int_get_col_name(line,cpp)] = rgb_col;
+ // rgb_col>=0?mlx_get_color_value(xvar, rgb_col):rgb_col;
+ else
{
colors[i].name = mlx_int_get_col_name(line,cpp);
- colors[i].col = rgb_col>=0?mlx_get_color_value(xvar,rgb_col):rgb_col;
+ colors[i].col = rgb_col; // rgb_col>=0?mlx_get_color_value(xvar,rgb_col):rgb_col;
}
free(tab);
+ tab = 0;
}
if (!(img = mlx_new_image(xvar,width,height)))
RETURN;
- opp = img->bpp/8;
+ //opp = img->bpp/8;
+ opp = 4;
i = height;
- data = img->data;
+ data = img->buffer;
while (i--)
{
if (!(line = f(info,&pos,info_size)))
@@ -219,14 +243,18 @@ void *mlx_int_parse_xpm(t_xvar *xvar,void *info,int info_size,char *(*f)())
j = 0;
}
}
+ // if (col==-1)
+ // XPutPixel(clip_img, x, height-1-i, 0);
+ // else
if (col==-1)
- XPutPixel(clip_img, x, height-1-i, 0);
- else
- mlx_int_xpm_set_pixel(img, data, opp, col, x);
+ col = 0xFF000000;
+ mlx_int_xpm_set_pixel(img, data, opp, col, x);
x ++;
}
- data += img->size_line;
+ // data += img->size_line;
+ data += img->width*4;
}
+ /*
if (clip_data)
{
if (!(clip_pix = XCreatePixmap(xvar->display, xvar->root,
@@ -244,6 +272,7 @@ void *mlx_int_parse_xpm(t_xvar *xvar,void *info,int info_size,char *(*f)())
XSync(xvar->display, False);
XDestroyImage(clip_img);
}
+ */
if (colors)
free(colors);
if (colors_direct)
@@ -252,7 +281,7 @@ void *mlx_int_parse_xpm(t_xvar *xvar,void *info,int info_size,char *(*f)())
}
-int mlx_int_file_get_rid_comment(char *ptr, int size)
+void mlx_int_file_get_rid_comment(char *ptr, int size)
{
int com_begin;
int com_end;
@@ -270,14 +299,13 @@ int mlx_int_file_get_rid_comment(char *ptr, int size)
}
-void *mlx_xpm_file_to_image(t_xvar *xvar,char *file,int *width,int *height)
+void *mlx_xpm_file_to_image(mlx_ptr_t *xvar,char *file,int *width,int *height)
{
int fd;
int size;
char *ptr;
- t_img *img;
+ mlx_img_list_t *img;
- fd = -1;
if ((fd = open(file,O_RDONLY))==-1 || (size = lseek(fd,0,SEEK_END))==-1 ||
(ptr = mmap(0,size,PROT_WRITE|PROT_READ,MAP_PRIVATE,fd,0))==
(void *)MAP_FAILED)
@@ -287,7 +315,7 @@ void *mlx_xpm_file_to_image(t_xvar *xvar,char *file,int *width,int *height)
return ((void *)0);
}
mlx_int_file_get_rid_comment(ptr, size);
- if (img = mlx_int_parse_xpm(xvar,ptr,size,mlx_int_get_line))
+ if ((img = mlx_int_parse_xpm(xvar,ptr,size,mlx_int_get_line)))
{
*width = img->width;
*height = img->height;
@@ -297,11 +325,11 @@ void *mlx_xpm_file_to_image(t_xvar *xvar,char *file,int *width,int *height)
return (img);
}
-void *mlx_xpm_to_image(t_xvar *xvar,char **xpm_data,int *width,int *height)
+void *mlx_xpm_to_image(mlx_ptr_t *xvar,char **xpm_data,int *width,int *height)
{
- t_img *img;
+ mlx_img_list_t *img;
- if (img = mlx_int_parse_xpm(xvar,xpm_data,0,mlx_int_static_line))
+ if ((img = mlx_int_parse_xpm(xvar,xpm_data,0,mlx_int_static_line)))
{
*width = img->width;
*height = img->height;