OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk/rtos/ecos-2.0/packages/services/gfx/mw/v2_0/src/mwin
    from Rev 27 to Rev 174
    Reverse comparison

Rev 27 → Rev 174

/winevent.c
0,0 → 1,591
/*
* Copyright (c) 1999, 2000 Greg Haerr <greg@censoft.com>
* Copyright (c) 1991 David I. Bell
* Permission is granted to use, distribute, or modify this source,
* provided that this copyright notice remains intact.
*
* Graphics server event routines for windows.
*/
#include "windows.h"
#include "wintern.h"
#include "device.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#if !(DOS_TURBOC | DOS_QUICKC | _MINIX | VXWORKS)
static int
abs(int n)
{
return n >= 0? n: -n;
}
#endif
 
/*
* Update mouse status and issue events on it if necessary.
* This function doesn't block, but is normally only called when
* there is known to be some data waiting to be read from the mouse.
*/
BOOL
MwCheckMouseEvent(void)
{
MWCOORD rootx; /* latest mouse x position */
MWCOORD rooty; /* latest mouse y position */
int newbuttons; /* latest buttons */
int mousestatus; /* latest mouse status */
 
/* Read the latest mouse status: */
mousestatus = GdReadMouse(&rootx, &rooty, &newbuttons);
if(mousestatus < 0) {
/*MwError(GR_ERROR_MOUSE_ERROR, 0);*/
return FALSE;
} else if(mousestatus) { /* Deliver events as appropriate: */
MwHandleMouseStatus(rootx, rooty, newbuttons);
return TRUE;
}
return FALSE;
}
 
/*
* Update keyboard status and issue events on it if necessary.
* This function doesn't block, but is normally only called when
* there is known to be some data waiting to be read from the keyboard.
*/
BOOL
MwCheckKeyboardEvent(void)
{
MWKEY mwkey; /* latest character */
MWKEYMOD modifiers; /* latest modifiers */
MWSCANCODE scancode;
int keystatus; /* latest keyboard status */
 
/* Read the latest keyboard status: */
keystatus = GdReadKeyboard(&mwkey, &modifiers, &scancode);
if(keystatus < 0) {
if(keystatus == -2) /* special case for ESC pressed*/
MwTerminate();
/*MwError(GR_ERROR_KEYBOARD_ERROR, 0);*/
return FALSE;
} else if(keystatus) { /* Deliver events as appropriate: */
switch (mwkey) {
case MWKEY_QUIT:
MwTerminate();
/* no return*/
case MWKEY_REDRAW:
MwRedrawScreen();
break;
case MWKEY_PRINT:
if (keystatus == 1)
GdCaptureScreen("screen.bmp");
break;
}
MwDeliverKeyboardEvent(mwkey, modifiers, scancode,
keystatus==1? TRUE: FALSE);
return TRUE;
}
return FALSE;
}
 
/*
* Handle all mouse events. These are mouse enter, mouse exit, mouse
* motion, mouse position, button down, and button up. This also moves
* the cursor to the new mouse position and changes it shape if needed.
*/
void
MwHandleMouseStatus(MWCOORD newx, MWCOORD newy, int newbuttons)
{
int changebuttons; /* buttons that have changed */
MWKEYMOD modifiers; /* latest modifiers */
static int curbuttons;
 
GdGetModifierInfo(NULL, &modifiers); /* Read kbd modifiers */
 
/*
* First, if the mouse has moved, then position the cursor to the
* new location, which will send mouse enter, mouse exit, focus in,
* and focus out events if needed. Check here for mouse motion and
* mouse position events.
*/
if (newx != cursorx || newy != cursory) {
MwMoveCursor(newx, newy);
MwDeliverMouseEvent(newbuttons, 0, modifiers);
}
 
/*
* Next, generate a button up event if any buttons have been released.
*/
changebuttons = (curbuttons & ~newbuttons);
if (changebuttons)
MwDeliverMouseEvent(newbuttons, changebuttons, modifiers);
 
/*
* Finally, generate a button down event if any buttons have been
* pressed.
*/
changebuttons = (~curbuttons & newbuttons);
if (changebuttons)
MwDeliverMouseEvent(newbuttons, changebuttons, modifiers);
 
curbuttons = newbuttons;
}
 
/*
* Translate and deliver hardware mouse message to proper window.
*/
void
MwTranslateMouseMessage(HWND hwnd,UINT msg,int hittest)
{
POINT pt;
DWORD tick;
static UINT lastmsg = 0;
static HWND lasthwnd;
static DWORD lasttick;
static int lastx, lasty;
 
/* determine double click eligibility*/
if(msg == WM_LBUTTONDOWN || msg == WM_RBUTTONDOWN) {
tick = GetTickCount();
if((hwnd->pClass->style & CS_DBLCLKS) &&
msg == lastmsg && hwnd == lasthwnd &&
tick - lasttick < DBLCLICKSPEED &&
abs(cursorx-lastx) < mwSYSMETRICS_CXDOUBLECLK &&
abs(cursory-lasty) < mwSYSMETRICS_CYDOUBLECLK)
msg += (WM_LBUTTONDBLCLK - WM_LBUTTONDOWN);
lastmsg = msg;
lasthwnd = hwnd;
lasttick = tick;
lastx = cursorx;
lasty = cursory;
}
 
/*
* We always send nc mouse message
* unlike Windows, for HTCLIENT default processing
*/
PostMessage(hwnd, msg + (WM_NCMOUSEMOVE-WM_MOUSEMOVE), hittest,
MAKELONG(cursorx, cursory));
 
/* then possibly send user mouse message*/
if(hittest == HTCLIENT) {
pt.x = cursorx;
pt.y = cursory;
ScreenToClient(hwnd, &pt);
PostMessage(hwnd, msg, 0, MAKELONG(pt.x, pt.y));
}
}
 
/*
* Deliver a mouse button or motion event.
*/
int mwCurrentButtons;
 
void
MwDeliverMouseEvent(int buttons, int changebuttons, MWKEYMOD modifiers)
{
HWND hwnd;
int hittest;
UINT msg;
 
mwCurrentButtons = buttons;
 
hwnd = GetCapture();
if(!hwnd)
hwnd = mousewp;
hittest = SendMessage(hwnd, WM_NCHITTEST, 0, MAKELONG(cursorx,cursory));
 
if(!changebuttons)
MwTranslateMouseMessage(hwnd, WM_MOUSEMOVE, hittest);
 
if(changebuttons & MWBUTTON_L) {
msg = (buttons&MWBUTTON_L)? WM_LBUTTONDOWN: WM_LBUTTONUP;
MwTranslateMouseMessage(hwnd, msg, hittest);
}
 
if(changebuttons & MWBUTTON_M) {
msg = (buttons&MWBUTTON_M)? WM_MBUTTONDOWN: WM_MBUTTONUP;
MwTranslateMouseMessage(hwnd, msg, hittest);
}
 
if(changebuttons & MWBUTTON_R) {
msg = (buttons&MWBUTTON_R)? WM_RBUTTONDOWN: WM_RBUTTONUP;
MwTranslateMouseMessage(hwnd, msg, hittest);
}
}
 
/*
* Deliver a keyboard event.
*/
void
MwDeliverKeyboardEvent(MWKEY keyvalue, MWKEYMOD modifiers, MWSCANCODE scancode,
BOOL pressed)
{
WPARAM VK_Code = keyvalue; /* default no translation*/
 
/* Keysyms from 1-255 are mapped to ASCII*/
if (keyvalue < 1 || keyvalue > 255)
switch(keyvalue) {
 
/* arrows + home/end pad*/
case MWKEY_LEFT:
VK_Code = VK_LEFT;
break;
case MWKEY_RIGHT:
VK_Code = VK_RIGHT;
break;
case MWKEY_UP:
VK_Code = VK_UP;
break;
case MWKEY_DOWN:
VK_Code = VK_DOWN;
break;
case MWKEY_INSERT:
VK_Code = VK_INSERT;
break;
case MWKEY_DELETE:
VK_Code = VK_DELETE;
break;
case MWKEY_HOME:
VK_Code = VK_HOME;
break;
case MWKEY_END:
VK_Code = VK_END;
break;
case MWKEY_PAGEUP:
VK_Code = VK_PRIOR;
break;
case MWKEY_PAGEDOWN:
VK_Code = VK_NEXT;
break;
 
/* Numeric keypad*/
case MWKEY_KP0:
VK_Code = VK_NUMPAD0;
break;
case MWKEY_KP1:
VK_Code = VK_NUMPAD1;
break;
case MWKEY_KP2:
VK_Code = VK_NUMPAD2;
break;
case MWKEY_KP3:
VK_Code = VK_NUMPAD3;
break;
case MWKEY_KP4:
VK_Code = VK_NUMPAD4;
break;
case MWKEY_KP5:
VK_Code = VK_NUMPAD5;
break;
case MWKEY_KP6:
VK_Code = VK_NUMPAD6;
break;
case MWKEY_KP7:
VK_Code = VK_NUMPAD7;
break;
case MWKEY_KP8:
VK_Code = VK_NUMPAD8;
break;
case MWKEY_KP9:
VK_Code = VK_NUMPAD9;
break;
case MWKEY_KP_PERIOD:
VK_Code = VK_DECIMAL;
break;
case MWKEY_KP_DIVIDE:
VK_Code = VK_DIVIDE;
break;
case MWKEY_KP_MULTIPLY:
VK_Code = VK_MULTIPLY;
break;
case MWKEY_KP_MINUS:
VK_Code = VK_SUBTRACT;
break;
case MWKEY_KP_PLUS:
VK_Code = VK_ADD;
break;
case MWKEY_KP_ENTER:
VK_Code = VK_RETURN;
break;
/* Function keys */
case MWKEY_F1:
VK_Code = VK_F1;
break;
case MWKEY_F2:
VK_Code = VK_F2;
break;
case MWKEY_F3:
VK_Code = VK_F3;
break;
case MWKEY_F4:
VK_Code = VK_F4;
break;
case MWKEY_F5:
VK_Code = VK_F5;
break;
case MWKEY_F6:
VK_Code = VK_F6;
break;
case MWKEY_F7:
VK_Code = VK_F7;
break;
case MWKEY_F8:
VK_Code = VK_F8;
break;
case MWKEY_F9:
VK_Code = VK_F9;
break;
case MWKEY_F10:
VK_Code = VK_F10;
break;
case MWKEY_F11:
VK_Code = VK_F11;
break;
case MWKEY_F12:
VK_Code = VK_F12;
break;
 
/* Key state modifier keys*/
case MWKEY_NUMLOCK:
VK_Code = VK_NUMLOCK;
break;
case MWKEY_CAPSLOCK:
VK_Code = VK_CAPITAL;
break;
case MWKEY_SCROLLOCK:
VK_Code = VK_CAPITAL;
break;
case MWKEY_LSHIFT:
VK_Code = VK_LSHIFT;
break;
case MWKEY_RSHIFT:
VK_Code = VK_RSHIFT;
break;
case MWKEY_LCTRL:
VK_Code = VK_LCONTROL;
break;
case MWKEY_RCTRL:
VK_Code = VK_RCONTROL;
break;
case MWKEY_LALT:
VK_Code = VK_MENU;
break;
case MWKEY_RALT:
VK_Code = VK_MENU;
break;
 
/* Misc function keys*/
case MWKEY_PRINT:
VK_Code = VK_PRINT;
break;
case MWKEY_PAUSE:
VK_Code = VK_PAUSE;
break;
case MWKEY_MENU:
VK_Code = VK_LMENU; /* virtual key*/
break;
 
/* questionable mappings or no mappings...*/
case MWKEY_KP_EQUALS:
VK_Code = '='; /* FIXME*/
break;
 
/* map all non-handled MWKEY values to VK_NONAME*/
#if 0
case MWKEY_UNKNOWN:
case MWKEY_SYSREQ:
case MWKEY_BREAK
case MWKEY_QUIT:
case MWKEY_REDRAW:
case MWKEY_LMETA:
case MWKEY_RMETA:
case MWKEY_ALTGR:
/* Handheld function keys*/
case MWKEY_RECORD:
case MWKEY_PLAY:
case MWKEY_CONTRAST:
case MWKEY_BRIGHTNESS:
case MWKEY_SELECTUP:
case MWKEY_SELECTDOWN:
case MWKEY_ACCEPT:
case MWKEY_CANCEL:
case MWKEY_APP1:
case MWKEY_APP2:
case MWKEY_LAST:
#endif
default:
VK_Code = VK_NONAME;
break;
}
 
if (pressed)
SendMessage(focuswp, WM_CHAR, VK_Code, 0L);
}
 
/*
* Deliver a window expose event.
* Most of the work is in calculating the update region
* for better redraw look and feel, and then queuing a
* WM_PAINT message to the window.
*/
void
MwDeliverExposureEvent(HWND wp, MWCOORD x, MWCOORD y, MWCOORD width,
MWCOORD height)
{
if (wp->unmapcount)
return;
 
MwUnionUpdateRegion(wp, x, y, width, height, TRUE);
PostMessage(wp, WM_PAINT, 0, 0L);
}
 
/*
* Combine the passed rectangle with the update region for the given window.
* Coordinates are passed relative to window.
* If bUnion is TRUE, union the rectangle, otherwise subtract it.
*/
void
MwUnionUpdateRegion(HWND wp, MWCOORD x, MWCOORD y, MWCOORD width,
MWCOORD height, BOOL bUnion)
{
#if UPDATEREGIONS
MWRECT rc;
 
if (wp->unmapcount)
return;
 
/* convert window relative coords to screen coords*/
rc.left = x + wp->winrect.left;
rc.top = y + wp->winrect.top;
rc.right = rc.left + width;
rc.bottom = rc.top + height;
 
if(bUnion)
GdUnionRectWithRegion(&rc, wp->update);
else
GdSubtractRectFromRegion(&rc, wp->update);
#endif
}
 
/*
* Move the cursor to the specified absolute screen coordinates.
* The coordinates are that of the defined hot spot of the cursor.
* The cursor's appearance is changed to that defined for the window
* in which the cursor is moved to. In addition, the window the
* cursor is in is recalculated.
*/
void MwMoveCursor(MWCOORD x, MWCOORD y)
{
/*
* Move the cursor only if necessary, offsetting it to
* place the hot spot at the specified coordinates.
*/
if (x != cursorx || y != cursory) {
if(curcursor)
GdMoveCursor(x - curcursor->cursor.hotx,
y - curcursor->cursor.hoty);
cursorx = x;
cursory = y;
}
 
/*
* Now check to see which window the mouse is in and whether or
* not the cursor shape should be changed.
*/
MwCheckMouseWindow();
MwCheckCursor();
}
 
/*
* Check to see if the cursor shape is the correct shape for its current
* location. If not, its shape is changed.
*/
void MwCheckCursor(void)
{
HWND wp; /* window cursor is in */
HCURSOR cp; /* cursor definition */
 
/*
* Get the cursor at its current position, and if it is not the
* currently defined one, then set the new cursor. However,
* if the window is currently captured, then leave it alone.
*/
wp = capturewp;
if (wp == NULL)
wp = mousewp;
 
cp = wp->cursor;
if (cp == curcursor)
return;
 
/*
* It needs redefining, so do it.
*/
curcursor = cp;
GdMoveCursor(cursorx - cp->cursor.hotx, cursory - cp->cursor.hoty);
GdSetCursor(&cp->cursor);
}
 
/*
* Find the window which is currently visible for the specified coordinates.
* This just walks down the window tree looking for the deepest mapped
* window which contains the specified point. If the coordinates are
* off the screen, the root window is returned.
*/
HWND
MwFindVisibleWindow(MWCOORD x, MWCOORD y)
{
HWND wp; /* current window */
HWND retwp; /* returned window */
 
wp = rootwp;
retwp = wp;
while (wp) {
if (!wp->unmapcount &&
wp->winrect.left <= x && wp->winrect.top <= y &&
wp->winrect.right > x && wp->winrect.bottom > y) {
retwp = wp;
wp = wp->children;
continue;
}
wp = wp->siblings;
}
return retwp;
}
 
/*
* Check to see if the window the mouse is currently in has changed.
*/
void MwCheckMouseWindow(void)
{
HWND wp;
 
/* Don't change if window drag or capture in progress*/
wp = dragwp;
if(!wp)
wp = capturewp;
if(!wp)
wp = MwFindVisibleWindow(cursorx, cursory);
mousewp = wp;
}
 
/*
* Copy dstsiz bytes, including nul, from src to dst.
* Return # bytes, excluding nul, copied.
*/
int
strzcpy(char *dst,const char *src,int dstsiz)
{
int cc = dstsiz;
 
/* return 0 on NULL src*/
if(!src)
cc = dstsiz = 1;
 
while(--dstsiz > 0) {
if((*dst++ = *src++) == '\0')
return cc - dstsiz - 1;
}
*dst = 0;
return cc - dstsiz - 1;
}
/winmain.c
0,0 → 1,558
/*
* Copyright (c) 1999, 2000 Greg Haerr <greg@censoft.com>
*
* Main module of Microwindows
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
 
#ifndef __PACIFIC__
#include <errno.h>
#include <sys/types.h>
#endif
 
#if UNIX | DOS_DJGPP
#include <unistd.h>
#if _MINIX
#include <sys/times.h>
#else
#include <sys/time.h>
#endif
#endif
 
#if ELKS
#include <linuxmt/posix_types.h>
#include <linuxmt/time.h>
#endif
 
#include "windows.h"
#include "wintern.h"
#include "device.h"
/*
* External definitions defined here.
*/
HWND listwp; /* list of all windows */
HWND rootwp; /* root window pointer */
HWND focuswp; /* focus window for keyboard */
HWND mousewp; /* window mouse is currently in */
HWND capturewp; /* capture window*/
HWND dragwp; /* window user is dragging*/
HCURSOR curcursor; /* currently enabled cursor */
MWCOORD cursorx; /* current x position of cursor */
MWCOORD cursory; /* current y position of cursor */
DWORD startTicks; /* tickcount on startup */
int keyb_fd; /* the keyboard file descriptor */
int mouse_fd; /* the mouse file descriptor */
int escape_quits = 1; /* terminate when pressing ESC */
 
int
main(int ac,char **av)
{
/* call user hook routine before anything*/
if(MwUserInit(ac, av) < 0)
exit(1);
 
if(MwOpen() < 0)
exit(1);
 
/* call windows main program entry point*/
WinMain(NULL, NULL, NULL, SW_SHOW);
 
MwClose();
return 0;
}
 
/*
* Open a connection from a new client to the server.
* Returns -1 on failure.
*/
int
MwOpen(void)
{
/* Client calls this routine once. We
* init everything here
*/
if(MwInitialize() < 0)
return -1;
return 1;
}
 
/*
* Close the connection to the server.
*/
void
MwClose(void)
{
MwTerminate();
}
 
#if (UNIX | DOS_DJGPP) && !_MINIX
/*
* Support for more than one user fd.
* Chris Johns (ccj@acm.org)
*
* Register the specified file descriptor to post
* WM_FDINPUT/WM_FDOUTPUT/WM_FDEXCEPT to the passed hwnd
* when input/output/except is ready.
*
* Allow for any fd to be selected on.
*
* The user fd's are listed and scanned helping keep the
* overhead down for a large list of fd's being selected on.
*/
 
typedef struct {
HWND read;
HWND write;
HWND except;
int next;
} WNDUSERFD;
 
static WNDUSERFD userregfd[FD_SETSIZE];
static int userregfd_head;
 
void
MwRegisterFdInput(HWND hwnd, int fd)
{
if (fd < FD_SETSIZE && fd != mouse_fd && fd != keyb_fd) {
if (!userregfd[fd].read) {
userregfd[fd].read = hwnd;
if (userregfd[fd].next == -1 && !userregfd[fd].write && !userregfd[fd].except) {
userregfd[fd].next = userregfd_head;
userregfd_head = fd;
}
}
}
}
 
void
MwUnregisterFdInput(HWND hwnd, int fd)
{
if (fd < FD_SETSIZE && fd != mouse_fd && fd != keyb_fd) {
if (userregfd[fd].read == hwnd) {
userregfd[fd].read = NULL;
if (!userregfd[fd].write && !userregfd[fd].except) {
int *listfd = &userregfd_head;
while (*listfd != -1) {
if (*listfd == fd) {
*listfd = userregfd[fd].next;
userregfd[fd].next = -1;
return;
}
listfd = &userregfd[*listfd].next;
}
userregfd_head = fd;
}
}
}
}
 
void
MwRegisterFdOutput(HWND hwnd, int fd)
{
if (fd < FD_SETSIZE && fd != mouse_fd && fd != keyb_fd) {
if (!userregfd[fd].write) {
userregfd[fd].write = hwnd;
if (userregfd[fd].next == -1 && !userregfd[fd].read && !userregfd[fd].except) {
userregfd[fd].next = userregfd_head;
userregfd_head = fd;
}
}
}
}
 
void
MwUnregisterFdOutput(HWND hwnd, int fd)
{
if (fd < FD_SETSIZE && fd != mouse_fd && fd != keyb_fd) {
if (userregfd[fd].write == hwnd) {
userregfd[fd].write = NULL;
if (!userregfd[fd].read && !userregfd[fd].except) {
int *listfd = &userregfd_head;
while (*listfd != -1) {
if (*listfd == fd) {
*listfd = userregfd[fd].next;
userregfd[fd].next = -1;
return;
}
listfd = &userregfd[*listfd].next;
}
userregfd_head = fd;
}
}
}
}
 
void
MwRegisterFdExcept(HWND hwnd, int fd)
{
if (fd < FD_SETSIZE && fd != mouse_fd && fd != keyb_fd) {
if (!userregfd[fd].except) {
userregfd[fd].except = hwnd;
if (userregfd[fd].next == -1 && !userregfd[fd].read && !userregfd[fd].write) {
userregfd[fd].next = userregfd_head;
userregfd_head = fd;
}
}
}
}
 
void
MwUnregisterFdExcept(HWND hwnd, int fd)
{
if (fd < FD_SETSIZE && fd != mouse_fd && fd != keyb_fd) {
if (userregfd[fd].except == hwnd) {
userregfd[fd].except = NULL;
if (!userregfd[fd].read && !userregfd[fd].write) {
int *listfd = &userregfd_head;
while (*listfd != -1) {
if (*listfd == fd) {
*listfd = userregfd[fd].next;
userregfd[fd].next = -1;
return;
}
listfd = &userregfd[*listfd].next;
}
userregfd_head = fd;
}
}
}
}
 
#endif /* UNIX | DOS_DJGPP*/
 
#if MSDOS | _MINIX
void
MwSelect(void)
{
/* If mouse data present, service it*/
if(mousedev.Poll())
while(MwCheckMouseEvent())
continue;
 
/* If keyboard data present, service it*/
if(kbddev.Poll())
while(MwCheckKeyboardEvent())
continue;
 
MwHandleTimers();
}
#endif
 
#if UNIX && defined(HAVESELECT)
#if ANIMATEPALETTE
static int fade = 0;
#endif
 
void
MwSelect(void)
{
fd_set rfds;
fd_set wfds;
fd_set efds;
int fd;
int e;
int setsize = 0;
UINT timeout;
struct timeval to;
 
/* perform pre-select duties, if any*/
if(scrdev.PreSelect)
scrdev.PreSelect(&scrdev);
 
/* Set up the FDs for use in the main select(): */
FD_ZERO(&rfds);
FD_ZERO(&wfds);
FD_ZERO(&efds);
if(mouse_fd >= 0) {
FD_SET(mouse_fd, &rfds);
if(mouse_fd > setsize)
setsize = mouse_fd;
}
if(keyb_fd >= 0) {
FD_SET(keyb_fd, &rfds);
if(keyb_fd > setsize)
setsize = keyb_fd;
}
 
/* handle registered file descriptors */
fd = userregfd_head;
while (fd != -1) {
if (userregfd[fd].read) FD_SET(fd, &rfds);
if (userregfd[fd].write) FD_SET(fd, &wfds);
if (userregfd[fd].except) FD_SET(fd, &efds);
if(fd > setsize) setsize = fd;
fd = userregfd[fd].next;
}
 
++setsize;
 
/* Set up the timeout for the main select(). If
* the mouse is captured we're probably moving a window,
* so poll quickly to allow other windows to repaint while
* checking for more event input.
*/
if(dragwp)
timeout = to.tv_sec = to.tv_usec = 0L;
else {
timeout = MwGetNextTimeoutValue(); /* returns ms*/
#if ANIMATEPALETTE
if(fade < 100)
timeout = 40;
#endif
if (!timeout) timeout = 10; /* temp kluge required for mdemo to run ok*/
GdGetNextTimeout(&to, timeout);
}
 
/* Wait for some input on any of the fds in the set or a timeout: */
if((e = select(setsize, &rfds, &wfds, &efds, &to)) > 0) {
/* If data is present on the mouse fd, service it: */
if(mouse_fd >= 0 && FD_ISSET(mouse_fd, &rfds))
while(MwCheckMouseEvent())
continue;
 
/* If data is present on the keyboard fd, service it: */
if(keyb_fd >= 0 && FD_ISSET(keyb_fd, &rfds))
while(MwCheckKeyboardEvent())
continue;
 
/* If registered descriptor, handle it */
fd = userregfd_head;
while (fd != -1) {
if (userregfd[fd].read && FD_ISSET(fd, &rfds))
PostMessage(userregfd[fd].read, WM_FDINPUT, fd, 0);
if (userregfd[fd].write && FD_ISSET(fd, &wfds))
PostMessage(userregfd[fd].write, WM_FDOUTPUT, fd, 0);
if (userregfd[fd].except && FD_ISSET(fd, &efds))
PostMessage(userregfd[fd].except, WM_FDEXCEPT, fd, 0);
fd = userregfd[fd].next;
}
}
else if(e == 0) {
/* timeout has occured*/
if(GdTimeout() == FALSE)
return;
#if ANIMATEPALETTE
if(fade <= 100) {
setfadelevel(&scrdev, fade);
fade += 5;
}
#endif
MwHandleTimers();
} else
if(errno != EINTR)
EPRINTF("Select() call in main failed\n");
}
#endif
 
#if VTSWITCH
static void
CheckVtChange(void *arg)
{
if(MwCheckVtChange()) {
#if ANIMATEPALETTE
fade = 0;
#endif
MwRedrawScreen();
}
GdAddTimer(50, CheckVtChange, NULL);
}
#endif
 
/*
* Initialize the graphics and mouse devices at startup.
* Returns nonzero with a message printed if the initialization failed.
*/
int
MwInitialize(void)
{
HWND wp; /* root window */
PSD psd;
WNDCLASS wc;
int fd;
static MWCURSOR arrow = { /* default arrow cursor*/
16, 16,
0, 0,
RGB(255, 255, 255), RGB(0, 0, 0),
{ 0xe000, 0x9800, 0x8600, 0x4180,
0x4060, 0x2018, 0x2004, 0x107c,
0x1020, 0x0910, 0x0988, 0x0544,
0x0522, 0x0211, 0x000a, 0x0004 },
{ 0xe000, 0xf800, 0xfe00, 0x7f80,
0x7fe0, 0x3ff8, 0x3ffc, 0x1ffc,
0x1fe0, 0x0ff0, 0x0ff8, 0x077c,
0x073e, 0x021f, 0x000e, 0x0004 }
};
 
extern MWLISTHEAD mwClassHead;
 
#if (UNIX | DOS_DJGPP) && !_MINIX
for (fd = 0; fd < FD_SETSIZE; fd++) {
userregfd[fd].read = NULL;
userregfd[fd].write = NULL;
userregfd[fd].except = NULL;
userregfd[fd].next = -1;
}
userregfd_head = -1;
#endif
/* catch terminate signal to restore tty state*/
signal(SIGTERM, (void *)MwTerminate);
 
startTicks = GetTickCount();
if ((keyb_fd = GdOpenKeyboard()) == -1) {
EPRINTF("Cannot initialise keyboard\n");
return -1;
}
 
if ((psd = GdOpenScreen()) == NULL) {
EPRINTF("Cannot initialise screen\n");
GdCloseKeyboard();
return -1;
}
 
if ((mouse_fd = GdOpenMouse()) == -1) {
EPRINTF("Cannot initialise mouse\n");
GdCloseScreen(psd);
GdCloseKeyboard();
return -1;
}
 
#if ANIMATEPALETTE
setfadelevel(psd, 0);
#endif
/*
* Initialize the root window.
*/
wc.style = CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW;
wc.lpfnWndProc = (WNDPROC)DefWindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = 0;
wc.hIcon = 0; /*LoadIcon(GetHInstance(), MAKEINTRESOURCE( 1));*/
wc.hCursor = 0; /*LoadCursor(NULL, IDC_ARROW);*/
wc.hbrBackground = CreateSolidBrush(GetSysColor(COLOR_BACKGROUND));
wc.lpszMenuName = NULL;
wc.lpszClassName = "DeskTop";
RegisterClass( &wc);
wp = GdItemNew(struct hwnd);
if (!wp) {
EPRINTF("No memory for root window\n");
GdCloseMouse();
GdCloseScreen(psd);
GdCloseKeyboard();
return -1;
}
/* remove the WS_CAPTION to have bare desktop window*/
/*wp->style = WS_CLIPCHILDREN | WS_CAPTION | WS_VISIBLE;*/
wp->style = WS_CLIPCHILDREN | WS_VISIBLE;
wp->exstyle = 0;
wp->pClass = (PWNDCLASS)mwClassHead.head;
wp->parent = NULL;
wp->children = NULL;
wp->siblings = NULL;
wp->next = NULL;
SetRect(&wp->winrect, 0, 0, psd->xvirtres, psd->yvirtres);
MwCalcClientRect(wp);
wp->cursor = NULL;
wp->unmapcount = 0;
wp->id = 0;
strcpy(wp->szTitle, "Microwindows");
wp->gotPaintMsg = PAINT_PAINTED;
#if UPDATEREGIONS
wp->update = GdAllocRegion();
#endif
 
listwp = wp;
rootwp = wp;
focuswp = wp;
mousewp = wp;
 
/* schedule desktop window paint*/
InvalidateRect(rootwp, NULL, TRUE);
 
#if VTSWITCH
MwInitVt();
/* Check for VT change every 50 ms: */
GdAddTimer(50, CheckVtChange, NULL);
#endif
 
/*
* Initialize and position the default cursor.
*/
curcursor = NULL;
cursorx = -1;
cursory = -1;
GdShowCursor(psd);
MwMoveCursor(psd->xvirtres / 2, psd->yvirtres / 2);
MwSetCursor(rootwp, &arrow);
 
/*
* Finally tell the mouse driver some things.
*/
GdRestrictMouse(0, 0, psd->xvirtres - 1, psd->yvirtres - 1);
GdMoveMouse(psd->xvirtres / 2, psd->yvirtres / 2);
 
return 0;
}
 
/*
* Here to close down the server.
*/
void
MwTerminate(void)
{
GdCloseScreen(&scrdev);
GdCloseMouse();
GdCloseKeyboard();
#if VTSWITCH
MwRedrawVt(mwvterm);
MwExitVt();
#endif
exit(0);
}
 
/*
* Return # milliseconds elapsed since start of Microwindows
* Granularity is 25 msec
*/
DWORD WINAPI
GetTickCount(VOID)
{
#if MSDOS
#include <time.h>
return (DWORD)(clock() * 1000 / CLOCKS_PER_SEC);
#else
#if _MINIX
struct tms t;
return (DWORD)times(&t) * 16;
#else
#if UNIX
struct timeval t;
 
gettimeofday(&t, NULL);
return ((t.tv_sec * 1000) + (t.tv_usec / 25000) * 25) - startTicks;
#else
return 0L;
#endif
#endif
#endif
}
 
VOID WINAPI
Sleep(DWORD dwMilliseconds)
{
int i, j, k;
const int loops_per_ms = 20000;
 
/* FIXME this is not calibrated */
for(i=0; i < dwMilliseconds; i++)
for(j=0; j < loops_per_ms; j++)
k = i * j;
}
/winlib/caret.c
0,0 → 1,184
/*
* Copyright (c) 2000 Greg Haerr <greg@censoft.com>
*
* Caret control for Microwindows win32 api.
*
* TODO: add SetSysTimer for blinking
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#ifndef __ECOS
#include <malloc.h>
#endif
#include "windows.h"
#include "device.h"
 
#define DEF_BLINK_TIME 500 /* default blink time in ms*/
 
typedef struct {
HWND hwnd; /* != NULL if caret is created*/
int x;
int y;
int nWidth;
int nHeight;
BOOL fShown; /* caret is currently visible*/
int nShowCount; /* <= 0 for hidden caret*/
UINT nBlinkTime;
} CARETINFO;
 
/* local data*/
static CARETINFO sysCaret; /* the system caret*/
 
/* local procs*/
static void MwShowCaret(void);
static void MwHideCaret(void);
static void MwUpdateCaret(void);
 
BOOL WINAPI
CreateCaret(HWND hwnd, HBITMAP hBitmap, int nWidth, int nHeight)
{
 
DestroyCaret(); /* destroy old caret if any*/
 
if (nWidth <= 0)
nWidth = 1;
if (nHeight <= 0)
nHeight = 1;
 
sysCaret.hwnd = hwnd;
sysCaret.x = 0;
sysCaret.y = 0;
sysCaret.nWidth = nWidth;
sysCaret.nHeight = nHeight;
sysCaret.fShown = FALSE;
sysCaret.nShowCount = 0;
sysCaret.nBlinkTime = DEF_BLINK_TIME;
return TRUE;
}
 
BOOL WINAPI
DestroyCaret(VOID)
{
if (sysCaret.fShown)
MwHideCaret();
sysCaret.hwnd = NULL;
sysCaret.fShown = FALSE;
return TRUE;
}
 
BOOL WINAPI
HideCaret(HWND hwnd)
{
if (hwnd == NULL)
hwnd = sysCaret.hwnd;
if (hwnd == NULL || hwnd != sysCaret.hwnd)
return FALSE;
 
/* hide caret if this call made it invisible*/
if (--sysCaret.nShowCount == 0) {
MwHideCaret();
return TRUE;
}
return FALSE;
}
 
BOOL WINAPI
ShowCaret(HWND hwnd)
{
if (hwnd == NULL)
hwnd = sysCaret.hwnd;
if (hwnd == NULL || hwnd != sysCaret.hwnd || sysCaret.nShowCount < 0)
return FALSE;
 
if (++sysCaret.nShowCount > 1)
return TRUE;
 
/* show caret, this call made it visible*/
MwShowCaret();
return TRUE;
}
 
BOOL WINAPI
SetCaretPos(int nX, int nY)
{
if (sysCaret.fShown && (sysCaret.x != nX || sysCaret.y != nY)) {
MwUpdateCaret(); /* toggle off*/
sysCaret.x = nX;
sysCaret.y = nY;
MwUpdateCaret(); /* toggle on in new location*/
return TRUE;
}
sysCaret.x = nX;
sysCaret.y = nY;
return TRUE;
}
 
BOOL WINAPI
GetCaretPos(LPPOINT lpPoint)
{
lpPoint->x = sysCaret.x;
lpPoint->y = sysCaret.y;
return TRUE;
}
 
UINT WINAPI
GetCaretBlinkTime(VOID)
{
return sysCaret.nBlinkTime;
}
 
BOOL WINAPI
SetCaretBlinkTime(UINT uMSeconds)
{
sysCaret.nBlinkTime = uMSeconds;
/* SetSysTimer */
return TRUE;
}
 
static void
MwShowCaret(void)
{
if (sysCaret.fShown)
return;
MwUpdateCaret();
sysCaret.fShown = TRUE;
}
 
static void
MwHideCaret(void)
{
if (!sysCaret.fShown)
return;
MwUpdateCaret();
sysCaret.fShown = FALSE;
}
 
/* Draw the caret using XOR. Same routine is used to show and hide caret.*/
static void
MwUpdateCaret(void)
{
int oldmode;
HDC hdc;
HPEN hpen;
HBRUSH hbr;
 
oldmode = GdSetMode(MWMODE_XOR);
hdc = GetDC(sysCaret.hwnd);
hpen = SelectObject(hdc, GetStockObject(WHITE_PEN));
 
/* it seems there's some problems with Rectangle with nWidth == 1*/
if (sysCaret.nWidth == 1) {
MoveToEx(hdc, sysCaret.x, sysCaret.y, NULL);
LineTo(hdc, sysCaret.x, sysCaret.y+sysCaret.nHeight);
} else {
hbr = SelectObject(hdc, GetStockObject(WHITE_BRUSH));
Rectangle(hdc, sysCaret.x, sysCaret.y,
sysCaret.x+sysCaret.nWidth,
sysCaret.y+sysCaret.nHeight);
SelectObject(hdc, hbr);
}
SelectObject(hdc, hpen);
ReleaseDC(sysCaret.hwnd, hdc);
GdSetMode(oldmode);
}
/winlib/medit.c
0,0 → 1,1744
/*
* Copyright (C) 1999, 2000, Wei Yongming.
* Portions Copyright (c) 2000 Greg Haerr <greg@censoft.com>
*
* Multi Line Edit Control for Microwindows win32 api.
*/
 
/*
** This library is free software; you can redistribute it and/or
** modify it under the terms of the GNU Library General Public
** License as published by the Free Software Foundation; either
** version 2 of the License, or (at your option) any later version.
**
** This library is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
** Library General Public License for more details.
**
** You should have received a copy of the GNU Library General Public
** License along with this library; if not, write to the Free
** Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
** MA 02111-1307, USA
*/
 
/*
** Alternatively, the contents of this file may be used under the terms
** of the Mozilla Public License (the "MPL License") in which case the
** provisions of the MPL License are applicable instead of those above.
*/
 
/* Note:
** Although there was a version by Zhao Jianghua, this version of
** EDIT control is written by Wei Yongming from scratch.
**
** Create date: 1999/8/26
**
** Modify records:
**
** Who When Where For What Status
**-----------------------------------------------------------------------------
** WEI Yongming 2000/02/24 Tsinghua Add MPL License Finished
** Kevin Tseng 2000/08/30 gv port to microwin ported
**
**
** TODO:
** * Selection.
** * Undo.
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#define MWINCLUDECOLORS
#include "windows.h" /* windef.h, winuser.h */
#include "wintools.h"
#include "device.h" /* GdGetTextSize */
 
#define USE_BIG5
 
#define WIDTH_MEDIT_BORDER 2
#define MARGIN_MEDIT_LEFT 1
#define MARGIN_MEDIT_TOP 1
#define MARGIN_MEDIT_RIGHT 2
#define MARGIN_MEDIT_BOTTOM 1
 
#define LEN_MLEDIT_BUFFER 3000
#define LEN_MLEDIT_UNDOBUFFER 1024
 
#define EST_FOCUSED 0x00000001L
#define EST_MODIFY 0x00000002L
#define EST_READONLY 0x00000004L
#define EST_REPLACE 0x00000008L
 
#define MEDIT_OP_NONE 0x00
#define MEDIT_OP_DELETE 0x01
#define MEDIT_OP_INSERT 0x02
#define MEDIT_OP_REPLACE 0x03
 
typedef struct tagLINEDATA {
 
int dataEnd;
 
 
char buffer[LEN_MLEDIT_BUFFER+1];
}LINEDATA;
typedef LINEDATA* PLINEDATA;
 
#define ATTENG 0 /* english */
#define ATTCHL 1 /* chinese left(1st) byte */
#define ATTCHR 2 /* chinese right(2nd) byte */
static char attr[LEN_MLEDIT_BUFFER];
 
typedef struct tagMLEDITDATA {
 
 
int editPos; /* current edit position */
int caretPos; /* caret offset in box */
int editLine; /* current eidt line */
 
int StartlineDisp; /* start line displayed */
int EndlineDisp; /* end line displayed */
 
 
 
int selStartPos; /* selection start position */
int selStartLine; /* selection start line */
int selEndPos; /* selection end position */
int selEndLine; /* selection end line */
int passwdChar; /* password character */
int leftMargin; /* left margin */
int topMargin; /* top margin */
int rightMargin; /* right margin */
int bottomMargin; /* bottom margin */
int hardLimit; /* hard limit */
 
int lastOp; /* last operation */
int lastPos; /* last operation position */
int lastLine; /* last operation line */
int affectedLen; /* affected len of last operation */
int undoBufferLen; /* undo buffer len */
char undoBuffer [LEN_MLEDIT_UNDOBUFFER];
/* Undo buffer; */
PLINEDATA head; /* buffer */
 
}MLEDITDATA;
typedef MLEDITDATA* PMLEDITDATA;
 
BOOL RegisterMLEditControl (void);
 
int MLEditCtrlProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam);
 
#define PIXEL_invalid (-1)
extern HWND sg_hCaretWnd;
extern HWND rootwp;
 
static int GetSysCharHeight (HWND hwnd)
{
#ifndef USE_BIG5
HDC hdc;
int xw, xh, xb;
 
hdc = GetDC(hwnd);
SelectObject(hdc, GetStockObject(DEFAULT_FONT));
GdSetFont(hdc->font->pfont);
GdGetTextSize(hdc->font->pfont,"X",1, &xw,&xh,&xb,MWTF_ASCII);
ReleaseDC(hwnd,hdc);
 
return xh;
#else
return 12;
#endif
}
 
static int GetSysCharWidth (HWND hwnd)
{
#ifndef USE_BIG5
HDC hdc;
int xw, xh, xb;
 
hdc = GetDC(hwnd);
SelectObject(hdc, GetStockObject(DEFAULT_FONT));
GdSetFont(hdc->font->pfont);
GdGetTextSize(hdc->font->pfont,"X",1, &xw,&xh,&xb,MWTF_ASCII);
ReleaseDC(hwnd,hdc);
 
return xw;
#else
return 6;
#endif
}
 
static int GetSysCCharWidth (HWND hwnd)
{
return (2*GetSysCharWidth(hwnd));
}
char* GetWindowCaption (HWND hWnd)
{
return hWnd->szTitle;
}
 
DWORD GetWindowAdditionalData (HWND hWnd)
{
return hWnd->userdata;
}
 
DWORD SetWindowAdditionalData (HWND hWnd, DWORD newData)
{
DWORD oldOne = 0L;
 
oldOne = hWnd->userdata;
hWnd->userdata = newData;
return oldOne;
}
 
DWORD GetWindowAdditionalData2 (HWND hWnd)
{
return hWnd->userdata2;
}
 
DWORD SetWindowAdditionalData2 (HWND hWnd, DWORD newData)
{
DWORD oldOne = 0L;
 
oldOne = hWnd->userdata2;
hWnd->userdata2 = newData;
return oldOne;
}
 
DWORD GetWindowStyle (HWND hWnd)
{
return hWnd->style;
}
 
BOOL ExcludeWindowStyle (HWND hWnd, DWORD dwStyle)
{
if (hWnd == rootwp/*HWND_DESKTOP*/)
return FALSE;
 
hWnd->style &= ~dwStyle;
return TRUE;
}
 
BOOL IncludeWindowStyle (HWND hWnd, DWORD dwStyle)
{
 
if (hWnd == rootwp/*HWND_DESKTOP*/)
return FALSE;
 
hWnd->style |= dwStyle;
return TRUE;
}
 
int WINAPI MwRegisterMEditControl(HINSTANCE hInstance)
{
WNDCLASS wc;
 
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_GLOBALCLASS;
wc.lpfnWndProc = (WNDPROC)MLEditCtrlProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = 0;
wc.hbrBackground= GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName= "MEDIT";
 
return RegisterClass(&wc);
}
 
static inline int edtGetOutWidth (HWND hWnd)
{
PMLEDITDATA pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);
RECT rc;
GetClientRect(hWnd,&rc);
return rc.right - rc.left
- pMLEditData->leftMargin
- pMLEditData->rightMargin;
}
 
static int edtGetStartDispPosAtEnd (HWND hWnd,
PLINEDATA pLineData)
{
int nOutWidth = edtGetOutWidth (hWnd);
int endPos = pLineData->dataEnd;
PMLEDITDATA pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);
int newStartPos = pMLEditData->dispPos;
const char* buffer = pLineData->buffer;
 
if(endPos < newStartPos)
return 0;
while (TRUE)
{
if ((endPos - newStartPos) * GetSysCharWidth (hWnd) < nOutWidth)
break;
/* 1st:gb:a1-f7,big5:a1-f9 */
if ((BYTE)buffer [newStartPos] > 0xA0)
{
newStartPos ++;
if (newStartPos < pLineData->dataEnd)
{
#ifndef USE_BIG5
if ((BYTE)buffer [newStartPos] > 0xA0)
#else /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */
if ( ((BYTE)buffer [newStartPos] >= 0x40 && (BYTE)buffer[newStartPos] <= 0x7e) ||
((BYTE)buffer [newStartPos] >= 0xa1 && (BYTE)buffer[newStartPos] <= 0xfe))
#endif
newStartPos ++;
}
}
else
newStartPos ++;
}
return newStartPos;
}
 
static int edtGetDispLen (HWND hWnd,PLINEDATA pLineData)
{
int i, n = 0;
int nOutWidth = edtGetOutWidth (hWnd);
int nTextWidth = 0;
PMLEDITDATA pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);
const char* buffer = pLineData->buffer;
if(buffer[0]==0||pLineData->dataEnd<pMLEditData->dispPos)
return 0;
for (i = pMLEditData->dispPos; i < pLineData->dataEnd; i++)
{
/* 1st:gb:a1-f7,big5:a1-f9 */
if ((BYTE)buffer [i] > 0xA0)
{
i++;
if (i < pLineData->dataEnd)
{
#ifndef USE_BIG5
if ((BYTE)buffer [i] > 0xA0) /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */
#else /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */
if ( ((BYTE)buffer [i] >= 0x40 && (BYTE)buffer[i] <= 0x7e) ||
((BYTE)buffer [i] >= 0xa1 && (BYTE)buffer[i] <= 0xfe))
#endif
{
nTextWidth += GetSysCCharWidth (hWnd);
n += 2;
}
else
i--;
}
else
{
nTextWidth += GetSysCharWidth (hWnd);
n++;
}
}
else
{
nTextWidth += GetSysCharWidth (hWnd);
n++;
}
 
if (nTextWidth > nOutWidth)
break;
}
 
return n;
}
 
static int edtGetOffset (HWND hwnd,const MLEDITDATA* pMLEditData, PLINEDATA pLineData, int x)
{
int i;
int newOff = 0;
int nTextWidth = 0;
const char* buffer = pLineData->buffer;
 
if(pLineData->dataEnd<pMLEditData->dispPos)
return pLineData->dataEnd;
 
x -= pMLEditData->leftMargin;
for (i = pMLEditData->dispPos; i < pLineData->dataEnd; i++) {
if ((nTextWidth + (GetSysCharWidth(hwnd) >> 1)) >= x)
break;
 
/* 1st:gb:a1-f7,big5:a1-f9 */
if ((BYTE)buffer [i] > 0xA0)
{
i++;
 
if (nTextWidth + GetSysCCharWidth(hwnd)/2 >= x)
break;
 
if (i < pLineData->dataEnd)
{
#ifndef USE_BIG5
if ((BYTE)buffer [i] > 0xA0) /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */
#else /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */
if ( ((BYTE)buffer [i] >= 0x40 && (BYTE)buffer[i] <= 0x7e) ||
((BYTE)buffer [i] >= 0xa1 && (BYTE)buffer[i] <= 0xfe))
#endif
{
nTextWidth += GetSysCCharWidth (hwnd);
newOff += 2;
}
else
i --;
}
else
{
nTextWidth += GetSysCharWidth (hwnd);
newOff ++;
}
}
else
{
nTextWidth += GetSysCharWidth (hwnd);
newOff ++;
}
}
return newOff;
}
 
static int edtGetLineNO (HWND hwnd,const MLEDITDATA* pMLEditData, int x)
{
int nline = 0;
if(x>=0)
{
nline = x / GetSysCharHeight(hwnd);
if (nline <= pMLEditData->linesDisp)
return nline;
}
return -1;
}
 
static BOOL edtIsACCharAtPosition (const char* string, int len, int pos)
{
if (pos > (len - 2))
return FALSE;
 
/* 1st:gb:a1-f7,big5:a1-f9 2nd:gb:a1-fe,big5:40-7e,a1-fe */
#ifndef USE_BIG5
if ((BYTE)string [pos] > 0xA0 && (BYTE)string [pos + 1] > 0xA0)
return TRUE;
#else
if ((BYTE)string [pos] > 0xA0)
{
if ( ((BYTE)string [pos + 1] >= 0x40 && (BYTE)string [pos + 1] <= 0x7e) ||
((BYTE)string [pos + 1] >= 0xa1 && (BYTE)string [pos + 1] <= 0xfe)) {
/*fprintf(stderr,"true\n");
fflush(stderr);*/
return TRUE;
}
}
#endif
 
return FALSE;
}
 
static void str2attr(const char* str,int len)
{
int i=0;
do
{
if (edtIsACCharAtPosition(str,len,i))
{
attr[i]=ATTCHL;
attr[i+1]=ATTCHR;
i+=2;
}
else
{
attr[i]=ATTENG;
i++;
}
}while(i<len);
}
 
static BOOL edtIsACCharBeforePosition (const char* string,int len, int pos)
{
if (pos < 2)
return FALSE;
 
/* 1st:gb:a1-f7,big5:a1-f9 2nd:gb:a1-fe,big5:40-7e,a1-fe */
#ifndef USE_BIG5
/* FIXME #ifdef GB2312?*/
if ((BYTE)string [pos - 2] > 0xA0 && (BYTE)string [pos - 1] > 0xA0)
return TRUE;
#else
#if 0
if ((BYTE)string [pos - 2] > 0xA0)
{
if ( ((BYTE)string [pos - 1] >= 0x40 && (BYTE)string[pos - 1] <= 0x7e) ||
((BYTE)string [pos - 1] >= 0xa1 && (BYTE)string[pos - 1] <= 0xfe))
return TRUE;
}
#else
str2attr(string,len);
if (attr[pos-1]==ATTENG) return FALSE;
else return TRUE;
#endif
#endif
 
return FALSE;
}
 
 
static BOOL edtIsACCharFromBegin(const char* string,int len,int pos)
{
int i;
if(pos == 0)
return TRUE;
if(len == 0)
return FALSE;
for(i=0;i<len;)
{
if( edtIsACCharAtPosition(string,len,i) )
i += 2;
else
i++;
if(i==pos)
return TRUE;
}
return FALSE;
}
 
int GetRETURNPos(char *str)
{
int i;
for(i=0;i<strlen(str);i++)
{
if(str[i]==10)
return i;
}
return -1;
}
 
void MLEditInitBuffer (PMLEDITDATA pMLEditData,char *spcaption)
{
char *caption=spcaption;
int off1;
int lineNO=0;
PLINEDATA pLineData;
if (!(pMLEditData->head = malloc (sizeof (LINEDATA)))) {
fprintf (stderr, "EDITLINE: malloc error!\n");
return ;
}
pMLEditData->head->previous = NULL;
pLineData=pMLEditData->head;
while ( (off1 = GetRETURNPos(caption)) != -1)
{
off1 = min(off1, LEN_MLEDIT_BUFFER);
memcpy(pLineData->buffer,caption,off1);
pLineData->buffer[off1] = '\0';
caption+=min(off1,LEN_MLEDIT_BUFFER)+1;
pLineData->lineNO = lineNO;
pMLEditData->dispPos = 0;
pLineData->dataEnd = strlen(pLineData->buffer);
pLineData->next = malloc (sizeof (LINEDATA));
pLineData->next->previous = pLineData;
pLineData = pLineData->next;
lineNO++;
}
off1 = min(strlen(caption),LEN_MLEDIT_BUFFER);
memcpy(pLineData->buffer,caption,off1);
pLineData->buffer[off1] = '\0';
pLineData->lineNO = lineNO++;
pMLEditData->dispPos = 0;
pLineData->dataEnd = strlen(pLineData->buffer);
pLineData->next = NULL;
pMLEditData->lines = lineNO ;
}
 
PLINEDATA GetLineData(PMLEDITDATA pMLEditData,int lineNO)
{
PLINEDATA pLineData=pMLEditData->head;
while(pLineData)
{
if(pLineData->lineNO==lineNO)
return pLineData;
pLineData = pLineData->next;
}
return NULL;
}
 
int MLEditCtrlProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
DWORD dwStyle;
DWORD dw;
HDC hdc;
PLINEDATA pLineData;
RECT clientRect;
PMLEDITDATA pMLEditData;
dwStyle = GetWindowStyle(hWnd);
 
switch (message)
{
case WM_CREATE:
{
if (!(pMLEditData = malloc (sizeof (MLEDITDATA)))) {
fprintf (stderr, "EDIT: malloc error!\n");
return -1;
}
 
pMLEditData->totalLen = LEN_MLEDIT_BUFFER;
pMLEditData->editPos = 0;
pMLEditData->editLine = 0;
pMLEditData->caretPos = 0;
 
MLEditInitBuffer(pMLEditData,GetWindowCaption(hWnd));
 
GetClientRect(hWnd,&clientRect);
pMLEditData->MaxlinesDisp = (clientRect.bottom-clientRect.top)/GetSysCharHeight(hWnd);
pMLEditData->linesDisp = min(pMLEditData->MaxlinesDisp,pMLEditData->lines);
pMLEditData->StartlineDisp = 0;
pMLEditData->EndlineDisp = pMLEditData->StartlineDisp + pMLEditData->linesDisp - 1;
 
pMLEditData->selStartPos = 0;
pMLEditData->selEndPos = 0;
pMLEditData->passwdChar = '*';
pMLEditData->leftMargin = MARGIN_MEDIT_LEFT;
pMLEditData->topMargin = MARGIN_MEDIT_TOP;
pMLEditData->rightMargin = MARGIN_MEDIT_RIGHT;
pMLEditData->bottomMargin = MARGIN_MEDIT_BOTTOM;
 
pMLEditData->hardLimit = -1;
/* undo information */
pMLEditData->lastOp = MEDIT_OP_NONE;
pMLEditData->lastPos = 0;
pMLEditData->affectedLen = 0;
pMLEditData->undoBufferLen = LEN_MLEDIT_UNDOBUFFER;
pMLEditData->undoBuffer [0] = '\0';
SetWindowAdditionalData2(hWnd,(DWORD)pMLEditData);
SetWindowAdditionalData(hWnd,(DWORD)0);
break;
}
case WM_DESTROY:
{
PLINEDATA temp;
pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);
DestroyCaret ();
pLineData = pMLEditData->head;
while(pLineData)
{
/*printf("delete lineNO = %d,buffer=%s\n",pLineData->lineNO,pLineData->buffer);*/
temp = pLineData->next;
free(pLineData);
pLineData = temp;
}
free(pMLEditData);
}
break;
case WM_SETFONT:
break;
case WM_GETFONT:
break;
 
#if 0 /* fix: no WM_SETCURSOR */
case WM_SETCURSOR:
if (dwStyle & WS_DISABLED) {
SetCursor (GetSystemCursor (IDC_ARROW));
return 0;
}
break;
 
case WM_SIZECHANGED:
{
}
return 0;
#endif
case WM_KILLFOCUS:
{
dw= GetWindowAdditionalData(hWnd);
dw&= ~EST_FOCUSED;
SetWindowAdditionalData(hWnd,dw);
 
HideCaret (hWnd);
DestroyCaret ();
 
SendMessage (GetParent (hWnd),
WM_COMMAND,
(WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_KILLFOCUS),
(LPARAM)hWnd);
}
break;
case WM_SETFOCUS:
{
dw= GetWindowAdditionalData(hWnd);
if (dw & EST_FOCUSED)
return 0;
dw |= EST_FOCUSED;
SetWindowAdditionalData(hWnd,dw);
 
pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);
 
/* only implemented for ES_LEFT align format. */
 
CreateCaret (hWnd, NULL, 1, /*GetSysCharWidth(hWnd)+1,*/
hWnd->clirect.bottom-hWnd->clirect.top-2);
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)
+ pMLEditData->leftMargin, pMLEditData->topMargin);
ShowCaret(hWnd);
 
SendMessage (GetParent (hWnd),
WM_COMMAND,
(WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_SETFOCUS),
(LPARAM) hWnd);
}
break;
case WM_ENABLE:
if ( (!(dwStyle & WS_DISABLED) && !wParam)
|| ((dwStyle & WS_DISABLED) && wParam) ) {
if (wParam)
ExcludeWindowStyle(hWnd,WS_DISABLED);
else
IncludeWindowStyle(hWnd,WS_DISABLED);
 
InvalidateRect (hWnd, NULL, FALSE);
}
return 0;
 
case WM_NCPAINT:
{
RECT rc;
#if 0
if (wParam)
hdc = (HDC)wParam;
else
hdc = GetDC (hWnd);
#if 0 /* fix: no ClipRectIntersect() */
if (lParam)
ClipRectIntersect (hdc, (RECT*)lParam);
#endif
#else
hdc = wParam? (HDC)wParam: GetWindowDC (hWnd);
GetWindowRect(hWnd, &rc);
#endif
if (dwStyle & WS_BORDER)
{
#if 0
RECT rc;
GetWindowRect(hWnd,&rc);
Draw3DDownFrame (hdc, 0, 0,
rc.right - rc.left - 1,
rc.bottom - rc.top - 1,
PIXEL_invalid);
#else
Draw3dInset(hdc, rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top);
#endif
}
if (!wParam) {
ReleaseDC(hWnd,hdc);
}
}
return 0;
 
case WM_PAINT:
{
int dispLen,i;
char* dispBuffer;
RECT rect,rc;
PAINTSTRUCT ps;
HGDIOBJ oldfont=NULL;
hdc = BeginPaint (hWnd,&ps);
GetClientRect (hWnd, &rect);
if (dwStyle & WS_DISABLED)
{
rc.left=0; rc.top=0; rc.bottom=rect.bottom; rc.right=rect.right;
FillRect(hdc,&rc,GetStockObject(LTGRAY_BRUSH));
SetBkColor (hdc, LTGRAY/*PIXEL_lightgray*/);
}
else {
rc.left=0; rc.top=0; rc.bottom=rect.bottom; rc.right=rect.right;
FillRect(hdc,&rc,GetStockObject(WHITE_BRUSH));
SetBkColor (hdc, WHITE/*PIXEL_lightwhite*/);
}
 
SetTextColor (hdc, BLACK/*PIXEL_black*/);
 
pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);
for(i = pMLEditData->StartlineDisp; i <= pMLEditData->EndlineDisp; i++)
{
pLineData= GetLineData(pMLEditData,i);
dispLen = edtGetDispLen (hWnd,pLineData);
if (dispLen == 0 && pMLEditData->EndlineDisp >= pMLEditData->lines) {
continue;
}
 
#ifdef _DEBUG
if (pMLEditData->dispPos > pLineData->dataEnd)
fprintf (stderr, "ASSERT failure: %s.\n", "Edit Paint");
#endif
dispBuffer = alloca (LEN_MLEDIT_BUFFER+1);
 
if (dwStyle & ES_PASSWORD)
memset (dispBuffer, '*', pLineData->dataEnd);
memcpy (dispBuffer,
pLineData->buffer, /* +pMLEditData->dispPos, */
pLineData->dataEnd); /* - pMLEditData->dispPos); */
dispBuffer[pLineData->dataEnd] = '\0';
 
/* only implemented ES_LEFT align format for single line edit. */
rect.left = pMLEditData->leftMargin;
rect.top = pMLEditData->topMargin ;
rect.right = pMLEditData->rightMargin;
rect.bottom = pMLEditData->bottomMargin;
#if 0
printf("lineNO=%d,lines=%d,editLine=%d\n",pLineData->lineNO,pMLEditData->lines,
pMLEditData->editLine);
printf("--dispBuffer=%s--\n",dispBuffer);
ClipRectIntersect (hdc, &rect); /* fix: no ClipRectIntersect() */
#endif
 
#ifdef USE_BIG5
oldfont=SelectObject(hdc,CreateFont(12,
0,0,0,0,0,0,0,0,0,0,0,
FF_DONTCARE|DEFAULT_PITCH,
"HZXFONT"));
#endif
TextOut (hdc,
pMLEditData->leftMargin - pMLEditData->dispPos * GetSysCharWidth(hWnd) ,
GetSysCharHeight(hWnd)*(pLineData->lineNO - pMLEditData->StartlineDisp)
+ pMLEditData->topMargin,
dispBuffer,-1);
}
#ifdef USE_BIG5
DeleteObject(SelectObject(hdc,oldfont));
#endif
EndPaint (hWnd, &ps);
}
break;
 
case WM_KEYDOWN:
{
BOOL bChange = FALSE;
int i;
int deleted;
PLINEDATA temp = NULL;
char * tempP = NULL;
 
pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd);
switch (LOWORD (wParam))
{
case VK_RETURN: /* SCANCODE_ENTER: */
{
pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
if (pMLEditData->editPos < pLineData->dataEnd)
tempP = pLineData->buffer + pMLEditData->editPos;
temp = pLineData->next;
pLineData->next = malloc( sizeof(LINEDATA) );
pLineData->next->previous = pLineData;
pLineData->next->next = temp;
if(temp)
{
temp->previous = pLineData->next;
}
temp = pLineData->next;
temp->lineNO = pMLEditData->editLine + 1;
if(tempP)
{
memcpy(temp->buffer,tempP,strlen(tempP));
temp->dataEnd = strlen(tempP);
}
else
temp->dataEnd = 0;
temp->buffer[temp->dataEnd] = '\0';
pLineData->dataEnd = pMLEditData->editPos;
pLineData->buffer[pLineData->dataEnd]='\0';
temp = temp->next;
while (temp)
{
temp->lineNO++;
temp = temp->next;
}
pMLEditData->editPos = 0;
pMLEditData->caretPos= 0;
pMLEditData->dispPos = 0;
if(pMLEditData->linesDisp < pMLEditData->MaxlinesDisp)
{
pMLEditData->EndlineDisp++;
pMLEditData->linesDisp++;
}
else if(pMLEditData->editLine == pMLEditData->EndlineDisp)
{
pMLEditData->StartlineDisp++;
pMLEditData->EndlineDisp++;
}
pMLEditData->editLine++;
pMLEditData->lines++;
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)
+ pMLEditData->leftMargin,
(pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd)
+pMLEditData->topMargin);
InvalidateRect (hWnd, NULL, FALSE);
return 0;
}
case VK_HOME: /* SCANCODE_HOME: */
{
PLINEDATA temp;
if (pMLEditData->editPos == 0)
return 0;
 
pMLEditData->editPos = 0;
pMLEditData->caretPos = 0;
 
SetCaretPos (pMLEditData->leftMargin,
(pMLEditData->editLine-pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd)
+pMLEditData->topMargin);
temp = GetLineData(pMLEditData,pMLEditData->editLine);
if (pMLEditData->dispPos != 0)
{
pMLEditData->dispPos = 0;
InvalidateRect (hWnd, NULL, FALSE);
}
return 0;
}
case VK_END: /* SCANCODE_END: */
{
int newStartPos;
pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
if (pMLEditData->editPos == pLineData->dataEnd)
return 0;
newStartPos = edtGetStartDispPosAtEnd (hWnd, pLineData);
pMLEditData->editPos = pLineData->dataEnd;
pMLEditData->caretPos = pMLEditData->editPos - newStartPos;
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)
+ pMLEditData->leftMargin,
(pMLEditData->editLine-pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd)
+ pMLEditData->topMargin);
 
if (pMLEditData->dispPos != newStartPos)
InvalidateRect (hWnd, NULL, FALSE);
pMLEditData->dispPos = newStartPos;
}
return 0;
 
case VK_LEFT: /* SCANCODE_CURSORBLOCKLEFT: */
{
BOOL bScroll = FALSE;
int scrollStep,newStartPos;
PLINEDATA temp;
pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
if (pMLEditData->editPos == 0 )
{
temp = pLineData->previous;
if(temp && pMLEditData->editLine > pMLEditData->StartlineDisp)
{
pMLEditData->editLine --;
pMLEditData->editPos = temp->dataEnd;
newStartPos = edtGetStartDispPosAtEnd (hWnd, temp);
pMLEditData->caretPos = pMLEditData->editPos - newStartPos;
if (pMLEditData->dispPos != newStartPos)
{
pMLEditData->dispPos = newStartPos;
bScroll = TRUE;
}
}
else
return 0;
}
else
{ if (edtIsACCharBeforePosition (pLineData->buffer,
pLineData->dataEnd,
pMLEditData->editPos)) {
scrollStep = 2;
pMLEditData->editPos -= 2;
}
else {
scrollStep = 1;
pMLEditData->editPos --;
}
 
pMLEditData->caretPos -= scrollStep;
if (pMLEditData->caretPos == 0
&& pMLEditData->editPos != 0) {
 
bScroll = TRUE;
 
if (edtIsACCharBeforePosition (pLineData->buffer,
pLineData->dataEnd,
pMLEditData->editPos)) {
pMLEditData->dispPos -= 2;
pMLEditData->caretPos = 2;
}
else {
pMLEditData->dispPos--;
pMLEditData->caretPos = 1;
}
}
else if (pMLEditData->caretPos < 0) {
pMLEditData->dispPos = 0;
pMLEditData->caretPos = 0;
}
}
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)
+ pMLEditData->leftMargin,
(pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd)
+ pMLEditData->topMargin);
 
if (bScroll)
InvalidateRect (hWnd, NULL, FALSE);
}
return 0;
case VK_RIGHT: /* SCANCODE_CURSORBLOCKRIGHT: */
{
BOOL bScroll = FALSE;
int scrollStep, moveStep;
PLINEDATA temp;
 
pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
if (pMLEditData->editPos == pLineData->dataEnd)
{
temp = pLineData->next;
if(temp)
{
pMLEditData->editLine++;
pMLEditData->editPos = 0;
pMLEditData->caretPos = 0;
if(pMLEditData->dispPos !=0)
{
pMLEditData->dispPos = 0;
bScroll = TRUE;
}
}
else
return 0;
}
else
{
if (edtIsACCharAtPosition (pLineData->buffer,
pLineData->dataEnd,
pMLEditData->dispPos)) {
if (edtIsACCharAtPosition (pLineData->buffer,
pLineData->dataEnd,
pMLEditData->editPos)) {
scrollStep = 2;
moveStep = 2;
pMLEditData->editPos += 2;
}
else {
scrollStep = 2;
moveStep = 1;
pMLEditData->editPos ++;
}
}
else {
if (edtIsACCharAtPosition (pLineData->buffer,
pLineData->dataEnd,
pMLEditData->editPos)) {
if (edtIsACCharAtPosition (pLineData->buffer,
pLineData->dataEnd,
pMLEditData->dispPos + 1))
scrollStep = 3;
else
scrollStep = 2;
moveStep = 2;
pMLEditData->editPos += 2;
}
else {
scrollStep = 1;
moveStep = 1;
pMLEditData->editPos ++;
}
}
 
pMLEditData->caretPos += moveStep;
if (pMLEditData->caretPos * GetSysCharWidth (hWnd)
> edtGetOutWidth (hWnd)) {
bScroll = TRUE;
pMLEditData->dispPos += scrollStep;
pMLEditData->caretPos =
pMLEditData->editPos - pMLEditData->dispPos;
}
}
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)
+ pMLEditData->leftMargin,
(pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight (hWnd)
+ pMLEditData->topMargin);
 
if (bScroll)
InvalidateRect (hWnd, NULL, FALSE);
}
return 0;
case VK_UP: /* SCANCODE_CURSORBLOCKUP: */
{
BOOL bScroll = FALSE;
int newStartPos;
PLINEDATA temp;
pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
temp = pLineData->previous;
if(pMLEditData->editLine == 0)
return 0;
else if (pMLEditData->editLine == pMLEditData->StartlineDisp)
{
bScroll = TRUE;
pMLEditData->StartlineDisp--;
pMLEditData->EndlineDisp--;
}
pMLEditData->editLine--;
 
if( pMLEditData->editPos >= temp->dataEnd )
{
pMLEditData->editPos = temp->dataEnd;
pMLEditData->dispPos = 0;
newStartPos = edtGetStartDispPosAtEnd (hWnd, temp);
pMLEditData->dispPos = newStartPos;
pMLEditData->caretPos = pMLEditData->editPos - newStartPos;
bScroll = TRUE;
}
else
{
newStartPos = edtGetOffset(hWnd, pMLEditData,temp,
pMLEditData->caretPos * GetSysCharWidth (hWnd)
+ pMLEditData->leftMargin);
if(!edtIsACCharFromBegin(temp->buffer,temp->dataEnd,
pMLEditData->dispPos))
{
bScroll = TRUE;
pMLEditData->dispPos--;
newStartPos = edtGetOffset(hWnd, pMLEditData,temp,
pMLEditData->caretPos * GetSysCharWidth (hWnd)
+ pMLEditData->leftMargin+GetSysCharWidth(hWnd)/2);
}
pMLEditData->editPos = newStartPos + pMLEditData->dispPos;
pMLEditData->caretPos = newStartPos;
}
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)
+ pMLEditData->leftMargin,
(pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd)
+ pMLEditData->topMargin);
if(bScroll)
InvalidateRect(hWnd,NULL,FALSE);
}
break;
case VK_DOWN: /* SCANCODE_CURSORBLOCKDOWN: */
{
BOOL bScroll = FALSE;
int newStartPos;
PLINEDATA temp;
pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
temp = pLineData->next;
if(pMLEditData->editLine == pMLEditData->lines-1)
return 0;
else if (pMLEditData->editLine == pMLEditData->EndlineDisp)
{
bScroll = TRUE;
pMLEditData->StartlineDisp++;
pMLEditData->EndlineDisp++;
}
pMLEditData->editLine++;
 
if( pMLEditData->editPos >= temp->dataEnd )
{
pMLEditData->editPos = temp->dataEnd;
pMLEditData->dispPos = 0;
newStartPos = edtGetStartDispPosAtEnd (hWnd, temp);
pMLEditData->dispPos = newStartPos;
pMLEditData->caretPos = pMLEditData->editPos - newStartPos;
bScroll = TRUE;
}
else
{
newStartPos = edtGetOffset(hWnd, pMLEditData,temp,
pMLEditData->caretPos * GetSysCharWidth (hWnd)
+ pMLEditData->leftMargin);
if(!edtIsACCharFromBegin(temp->buffer,temp->dataEnd,
pMLEditData->dispPos))
{
bScroll = TRUE;
pMLEditData->dispPos--;
newStartPos = edtGetOffset(hWnd, pMLEditData,temp,
pMLEditData->caretPos * GetSysCharWidth (hWnd)
+ pMLEditData->leftMargin+GetSysCharWidth(hWnd)/2);
}
pMLEditData->editPos = newStartPos + pMLEditData->dispPos;
pMLEditData->caretPos = newStartPos;
}
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)
+ pMLEditData->leftMargin,
(pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd)
+ pMLEditData->topMargin);
if(bScroll)
InvalidateRect(hWnd,NULL,FALSE);
}
break;
case VK_INSERT: /* SCANCODE_INSERT: */
dw = GetWindowAdditionalData(hWnd);
dw ^= EST_REPLACE;
SetWindowAdditionalData(hWnd,dw);
break;
 
case VK_DELETE: /* SCANCODE_REMOVE: */
{
PLINEDATA temp;
int leftLen;
pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
if ((GetWindowAdditionalData(hWnd) & EST_READONLY) ){
#if 0 /* fix: no ping() */
ping ();
#endif
return 0;
}
temp = pLineData->next;
if (pLineData->dataEnd == pMLEditData->editPos && temp)
{
if(pLineData->dataEnd + temp->dataEnd <= LEN_MLEDIT_BUFFER)
{
memcpy(pLineData->buffer+pLineData->dataEnd,temp->buffer,temp->dataEnd);
pLineData->dataEnd += temp->dataEnd;
pLineData->buffer[pLineData->dataEnd] = '\0';
if(temp->next)
{
pLineData->next = temp->next;
temp->next->previous = pLineData;
}
else
pLineData->next = NULL;
free(temp);
temp = pLineData->next;
while (temp)
{
temp->lineNO--;
temp = temp->next;
}
if(pMLEditData->lines <= pMLEditData->MaxlinesDisp)
{
pMLEditData->EndlineDisp--;
pMLEditData->linesDisp--;
}
if(pMLEditData->EndlineDisp >= pMLEditData->lines-1)
{
pMLEditData->EndlineDisp--;
if(pMLEditData->StartlineDisp !=0)
pMLEditData->StartlineDisp--;
else
pMLEditData->linesDisp--;
}
pMLEditData->lines--;
}
else if (temp->dataEnd > 0)
{
leftLen = LEN_MLEDIT_BUFFER - pLineData->dataEnd;
memcpy(pLineData->buffer+pLineData->dataEnd,temp->buffer,leftLen);
pLineData->dataEnd +=leftLen;
pLineData->buffer[pLineData->dataEnd] = '\0';
memcpy(temp->buffer,temp->buffer+leftLen,temp->dataEnd-leftLen);
temp->dataEnd -=leftLen;
temp->buffer[temp->dataEnd] = '\0';
}
}
else if (pMLEditData->editPos != pLineData->dataEnd)
{
if (edtIsACCharAtPosition (pLineData->buffer,
pLineData->dataEnd,
pMLEditData->editPos))
deleted = 2;
else
deleted = 1;
for (i = pMLEditData->editPos;
i < pLineData->dataEnd - deleted;
i++)
pLineData->buffer [i]
= pLineData->buffer [i + deleted];
 
pLineData->dataEnd -= deleted;
pLineData->buffer[pLineData->dataEnd] = '\0';
}
bChange = TRUE;
InvalidateRect (hWnd, NULL,FALSE);
}
break;
 
case VK_BACK: /* SCANCODE_BACKSPACE: */
{
PLINEDATA temp;
int leftLen,tempEnd;
if ((GetWindowAdditionalData(hWnd) & EST_READONLY) ){
#if 0 /* fix: no Ping() */
Ping ();
#endif
return 0;
}
pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
temp = pLineData->previous;
if (pMLEditData->editPos == 0 && temp)
{
tempEnd = temp->dataEnd;
if(pLineData->dataEnd + temp->dataEnd <= LEN_MLEDIT_BUFFER)
{
memcpy(temp->buffer+temp->dataEnd,pLineData->buffer,pLineData->dataEnd);
temp->dataEnd +=pLineData->dataEnd;
temp->buffer[temp->dataEnd] = '\0';
if(pLineData->next)
{
temp->next = pLineData->next;
pLineData->next->previous = temp;
}
else
temp->next = NULL;
free(pLineData);
pLineData = temp;
temp = temp->next;
while(temp)
{
temp->lineNO--;
temp = temp->next;
}
if(pMLEditData->StartlineDisp == pMLEditData->editLine
&& pMLEditData->StartlineDisp != 0)
{
pMLEditData->StartlineDisp--;
if(pMLEditData->EndlineDisp == pMLEditData->lines)
pMLEditData->EndlineDisp--;
}
if(pMLEditData->lines <= pMLEditData->MaxlinesDisp)
{
pMLEditData->linesDisp--;
pMLEditData->EndlineDisp--;
}
pMLEditData->lines--;
}
else if (pLineData->dataEnd > 0)
{
leftLen = LEN_MLEDIT_BUFFER - temp->dataEnd;
memcpy(temp->buffer+temp->dataEnd,pLineData->buffer,leftLen);
temp->dataEnd +=leftLen;
temp->buffer[temp->dataEnd] = '\0';
memcpy(pLineData->buffer,pLineData->buffer+leftLen,pLineData->dataEnd-leftLen);
pLineData->dataEnd -=leftLen;
pLineData->buffer[pLineData->dataEnd] = '\0';
}
pMLEditData->editLine--;
pMLEditData->editPos = tempEnd;
pMLEditData->dispPos = tempEnd;
 
if (pMLEditData->caretPos == 0
&& pMLEditData->editPos != 0) {
if (edtIsACCharBeforePosition (pLineData->buffer,
pLineData->dataEnd,
pMLEditData->editPos)) {
pMLEditData->dispPos -= 2;
pMLEditData->caretPos = 2;
}
else {
pMLEditData->dispPos--;
pMLEditData->caretPos = 1;
}
}
else if (pMLEditData->caretPos < 0) {
pMLEditData->dispPos = 0;
pMLEditData->caretPos = 0;
}
}
else if (pMLEditData->editPos != 0 )
{
if (edtIsACCharBeforePosition (pLineData->buffer,
pLineData->dataEnd,
pMLEditData->editPos))
deleted = 2;
else
deleted = 1;
for (i = pMLEditData->editPos;
i < pLineData->dataEnd;
i++)
pLineData->buffer [i - deleted]
= pLineData->buffer [i];
 
pLineData->dataEnd -= deleted;
pMLEditData->editPos -= deleted;
pMLEditData->caretPos -= deleted;
if (pMLEditData->caretPos == 0
&& pMLEditData->editPos != 0) {
if (edtIsACCharBeforePosition (pLineData->buffer,
pLineData->dataEnd,
pMLEditData->editPos)) {
pMLEditData->dispPos -= 2;
pMLEditData->caretPos = 2;
}
else {
pMLEditData->dispPos --;
pMLEditData->caretPos = 1;
}
}
}
bChange = TRUE;
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)
+ pMLEditData->leftMargin,
(pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd)
+ pMLEditData->topMargin);
InvalidateRect (hWnd, NULL, FALSE);
}
break;
 
default:
break;
}
if (bChange)
SendMessage (GetParent (hWnd), WM_COMMAND,
(WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_CHANGE),
(LPARAM) hWnd);
return 0;
}
 
case WM_CHAR:
{
char charBuffer [2];
int i, chars, scrollStep, inserting;
UINT format;
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd);
 
pLineData = GetLineData(pMLEditData,pMLEditData->editLine);
 
if (dwStyle & ES_READONLY) {
#if 0 /* fix: no Ping() */
Ping ();
#endif
return 0;
}
if (HIBYTE (wParam)) {
charBuffer [0] = LOBYTE (wParam);
charBuffer [1] = HIBYTE (wParam);
chars = 2;
}
else {
charBuffer [0] = LOBYTE (wParam);
chars = 1;
}
if (chars == 1) {
switch (charBuffer [0])
{
case 0x00: /* NULL */
case 0x07: /* BEL */
case 0x08: /* BS */
case 0x09: /* HT */
case 0x0A: /* LF */
case 0x0B: /* VT */
case 0x0C: /* FF */
case 0x0D: /* CR */
case 0x1B: /* Escape */
return 0;
}
}
if (GetWindowAdditionalData(hWnd) & EST_REPLACE) {
if (pLineData->dataEnd == pMLEditData->editPos)
inserting = chars;
else if (edtIsACCharAtPosition (pLineData->buffer,
pLineData->dataEnd,
pMLEditData->editPos)) {
if (chars == 2)
inserting = 0;
else
inserting = -1;
}
else {
if (chars == 2)
inserting = 1;
else
inserting = 0;
}
}
else
inserting = chars;
 
/* check space */
if (pLineData->dataEnd + inserting > pMLEditData->totalLen) {
#if 0 /* fix no ping */
Ping ();
#endif
SendMessage (GetParent (hWnd), WM_COMMAND,
(WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_MAXTEXT),
(LPARAM) hWnd);
return 0;
}
else if ((pMLEditData->hardLimit >= 0)
&& ((pLineData->dataEnd + inserting)
> pMLEditData->hardLimit)) {
#if 0 /* fix no ping */
Ping ();
#endif
SendMessage (GetParent (hWnd), WM_COMMAND,
(WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_MAXTEXT),
(LPARAM) hWnd);
return 0;
}
if (inserting == -1) {
for (i = pMLEditData->editPos; i < pLineData->dataEnd-1; i++)
pLineData->buffer [i] = pLineData->buffer [i + 1];
}
else if (inserting > 0) {
for (i = pLineData->dataEnd + inserting - 1;
i > pMLEditData->editPos + inserting - 1;
i--)
pLineData->buffer [i]
= pLineData->buffer [i - inserting];
}
for (i = 0; i < chars; i++)
pLineData->buffer [pMLEditData->editPos + i]
= charBuffer [i];
pMLEditData->editPos += chars;
pMLEditData->caretPos += chars;
pLineData->dataEnd += inserting;
pLineData->buffer[pLineData->dataEnd] = '\0';
if (pMLEditData->caretPos * GetSysCharWidth (hWnd)
> edtGetOutWidth (hWnd))
{
if (edtIsACCharAtPosition (pLineData->buffer,
pLineData->dataEnd,
pMLEditData->dispPos))
scrollStep = 2;
else {
if (chars == 2) {
if (edtIsACCharAtPosition (pLineData->buffer,
pLineData->dataEnd,
pMLEditData->dispPos + 1))
scrollStep = 3;
else
scrollStep = 2;
}
else
scrollStep = 1;
}
pMLEditData->dispPos += scrollStep;
 
pMLEditData->caretPos =
pMLEditData->editPos - pMLEditData->dispPos;
 
}
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)
+ pMLEditData->leftMargin,
(pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd)
+ pMLEditData->topMargin);
InvalidateRect (hWnd, NULL,FALSE);
format = DT_NOPREFIX;
SendMessage (GetParent (hWnd), WM_COMMAND,
(WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_CHANGE),
(LPARAM) hWnd);
}
return 0;
 
case WM_GETTEXTLENGTH:
{
PLINEDATA temp;
int lineNO = (int)wParam;
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd);
temp = pMLEditData->head;
while(temp)
{
if (temp->lineNO == lineNO)
return temp->dataEnd;
temp = temp->next;
}
return -1;
}
case WM_GETTEXT:
{
PLINEDATA temp;
int len,total = 0,lineNO;
char * buffer = (char*)lParam;
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd);
len = (int)wParam;
lineNO = (int)wParam;
temp = pMLEditData->head;
while (temp && total + temp->dataEnd < len)
{
memcpy(buffer+total,temp->buffer,temp->dataEnd);
total += temp->dataEnd;
temp = temp->next;
}
}
return 0;
/* can i add it to message define ? */
#if 0
case WM_GETLINETEXT:
{
PLINEDATA temp;
char* buffer = (char*)lParam;
int lineNO,len;
 
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd);
lineNO = (int)wParam;
temp = GetLineData(pMLEditData,lineNO);
if(temp)
{
len = min ((int)wParam, temp->dataEnd);
memcpy (buffer, temp->buffer,len);
buffer [len] = '\0';
return 0;
}
return -1;
}
break;
case WM_SETTEXT:
{
MLEditInitBuffer(pMLEditData,(char *)lParam);
}
return 0;
#endif
/* can i add it to message defined? */
#if 0
case WM_SETLINETEXT:
{
int len,lineNO;
PLINEDATA temp;
 
if (dwStyle & ES_READONLY)
return 0;
 
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd);
len = strlen ((char*)lParam);
lineNO = (int)wParam;
temp = pMLEditData->head;
len = min (len, pMLEditData->totalLen);
if (pMLEditData->hardLimit >= 0)
len = min (len, pMLEditData->hardLimit);
while (temp)
{
if(temp->lineNO == lineNO)
{
temp->dataEnd = len;
memcpy (temp->buffer, (char*)lParam, len);
}
temp = temp->next;
}
pMLEditData->editPos = 0;
pMLEditData->caretPos = 0;
pMLEditData->dispPos = 0;
InvalidateRect (hWnd, NULL, FALSE);
}
return 0;
#endif
case WM_LBUTTONDBLCLK:
break;
case WM_LBUTTONDOWN:
{
int newOff,lineNO;
PLINEDATA temp;
BOOL bScroll = FALSE;
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd);
lineNO = edtGetLineNO (hWnd,pMLEditData, HIWORD (lParam));
if ( lineNO < 0 )
return 0;
lineNO += pMLEditData->StartlineDisp;
if (lineNO <= pMLEditData->EndlineDisp && lineNO <= pMLEditData->lines-1 )
{
temp = GetLineData(pMLEditData,lineNO);
newOff = edtGetOffset (hWnd,pMLEditData,temp, LOWORD (lParam));
if(!edtIsACCharFromBegin(temp->buffer,temp->dataEnd,pMLEditData->dispPos))
{
bScroll = TRUE;
pMLEditData->dispPos--;
newOff = edtGetOffset (hWnd,pMLEditData,temp, LOWORD(lParam)+GetSysCharWidth(hWnd)/2);
}
if (newOff != pMLEditData->caretPos || lineNO != pMLEditData->editLine) {
pMLEditData->editLine = temp->lineNO;
pMLEditData->editPos = newOff +pMLEditData->dispPos;
pMLEditData->caretPos = newOff;
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd)
+ pMLEditData->leftMargin,
(pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd)
+ pMLEditData->topMargin);
}
if(bScroll)
InvalidateRect(hWnd,NULL,FALSE);
}
}
break;
 
case WM_LBUTTONUP:
break;
case WM_MOUSEMOVE:
break;
case WM_GETDLGCODE:
return DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTARROWS;
case EM_SETREADONLY:
if (wParam)
IncludeWindowStyle(hWnd,ES_READONLY);
else
ExcludeWindowStyle(hWnd,ES_READONLY);
return 0;
case EM_SETPASSWORDCHAR:
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd);
 
if (pMLEditData->passwdChar != (int)wParam) {
if (dwStyle & ES_PASSWORD) {
pMLEditData->passwdChar = (int)wParam;
InvalidateRect (hWnd, NULL, TRUE);
}
}
return 0;
case EM_GETPASSWORDCHAR:
{
int* passwdchar;
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd);
passwdchar = (int*) lParam;
 
*passwdchar = pMLEditData->passwdChar;
}
return 0;
case EM_LIMITTEXT:
{
int newLimit = (int)wParam;
if (newLimit >= 0) {
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd);
if (pMLEditData->totalLen < newLimit)
pMLEditData->hardLimit = -1;
else
pMLEditData->hardLimit = newLimit;
}
}
return 0;
default:
return DefWindowProc (hWnd, message, wParam, lParam);
break;
}
 
return 0; /* !DefaultControlProc (hWnd, message, wParam, lParam); */
}
 
/winlib/fastfill.c
0,0 → 1,19
#include "windows.h"
#include "wintools.h"
/*
* WIN Draw Library
* Fast fill rectangle
*/
 
/*
* fast fill background (works with non-dithered colors only)
*/
void WINAPI
FastFillRect(HDC hdc,LPRECT lprect,COLORREF cr)
{
COLORREF crOld;
 
crOld = SetBkColor( hdc, cr);
ExtTextOut( hdc, 0, 0, ETO_OPAQUE | ETO_CLIPPED, lprect, NULL, 0, NULL);
SetBkColor( hdc, crOld);
}
/winlib/insetr.c
0,0 → 1,14
#include "windows.h"
#include "wintools.h"
/*
* WIN Draw Library
*/
 
void WINAPI
InsetR(LPRECT lprc,int h,int v)
{
lprc->top += v;
lprc->left += h;
lprc->right -= 2*h-1;
lprc->bottom -= 2*v-1;
}
/winlib/combobox.c
0,0 → 1,1785
/*--------------------------------------------------------------------------
** ComboBox.c Twin From: Twin/controls
**
**
**------------------------- < License Information > ------------------------
**
** This file was originally a part of Willows TWIN. Willows
** TWIN was released under a Library GPL (LGPL). This permits
** redistribution of this source code, provided that the full
** TWIN license is in effect, and provided that all modifications
** to this source code are made publicly available.
** Please refer to Willows software (www.willows.com) or
** LICENSE for full information.
**
** Under Twine, this file is also protected by an LGPL. Please
** see LICENSE for full details on this license.
**
**
** Copyright 1997 Willows Software, Inc.
**------------------------ < File Content Description > --------------------
**
** Module: controls/ComboBox.c
**
** Description:
**
**
** Functions defined:
**
**------------------------- < Revision Information > -----------------------
**
** Full Revision history at bottom of file
**
**--------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "windows.h"
#include "windowsx.h"
 
#define WinMalloc(n) malloc((n))
#define WinFree(p) free(p)
 
#define GET_WM_COMMAND_ID(wp, lp) LOWORD(wp)
#define GET_WM_COMMAND_HWND(wp, lp) (HWND)(lp)
#define GET_WM_COMMAND_CMD(wp, lp) HIWORD(wp)
#define GET_WM_COMMAND_MPS(id, hwnd, cmd) \
(WPARAM)MAKELONG(id, cmd), (LONG)(hwnd)
#define LOSHORT(x) (short int)LOWORD(x)
#define Edit_SetSel(hwndCtl, ichStart, ichEnd) ((void)SendMessage((hwndCtl), EM_SETSEL, (ichStart), (ichEnd)))
 
 
typedef struct {
HFONT hFont; /* hFont used */
HWND hWndParent; /* parent window */
UINT nID; /* control ID */
WORD wStateFlags; /* combobox state flags */
UINT wStyle; /* this is a copy of LOWORD(style) */
BOOL bExtended; /* extended UI flag */
BOOL bRedraw; /* MiD - redraw flag, draw only if it's 1 */
HWND EditControl; /* edit/static control hWnd */
HWND ListBoxControl; /* listbox control hWnd */
RECT ButtonRect; /* local button rect (client) */
RECT ListBoxRect; /* listbox rect (screen) */
UINT uHeight; /* height of the normal state */
WNDPROC lpfnOldStatic; /* previous static wndproc */
UINT nListItems; /* ecw */
} COMBOBOX;
 
#define CWD_LPCBDATA 0
#define CBC_EDITID 1
 
#define CSF_CAPTUREACTIVE 0x0001
#define CSF_LOCALBUTTONDOWN 0x0002
#define CSF_BUTTONDOWN 0x0004
#define CSF_LBOXBUTTONDOWN 0x0008
#define CSF_FOCUS 0x0010 /* MiD */
#define CSF_HASDROPPED 0x0020 /* weav */
 
#define SET_STATE(lp, wMask) (lp->wStateFlags |= (wMask))
#define CLEAR_STATE(lp, wMask) (lp->wStateFlags &= ~(wMask))
#define IS_SET(lp, wMask) (lp->wStateFlags & (wMask))
 
#define BOWNERDRAW(l) ((l)->wStyle & (CBS_OWNERDRAWFIXED|CBS_OWNERDRAWVARIABLE))
 
/**********************************************
Styles:
 
CBS_AUTOHSCROLL passed to the edit control
CBS_DISABLENOSCROLL passed to the listbox control
CBS_DROPDOWN
CBS_DROPDOWNLIST
CBS_HASSTRINGS passed to the listbox control
CBS_NOINTEGRALHEIGHT passed to the listbox control
CBS_OEMCONVERT passed to the edit control
CBS_OWNERDRAWFIXED passed to the listbox control
CBS_OWNERDRAWVARIABLE passed to the listbox control
CBS_SIMPLE TODO
CBS_SORT passed to the listbox control
 
WS_VSCROLL passed to the listbox control
 
*********************************************/
 
/**********************************************
CBN_xxx messages to be added
 
from mouse tracking...
CBN_SELENDCANCEL TODO
CBN_SELENDOK TODO
 
*********************************************/
 
/* imported stuff */
#if 1
void
Draw3DButtonRect(HDC hDC, HPEN hPenHigh, HPEN hPenShadow,
RECT rc, BOOL fClicked)
{
HPEN hPenOld;
POINT lpt[6];
 
POINT p3[3];
int shrink=1;
 
hPenOld = SelectObject(hDC, hPenShadow);
if (fClicked) {
lpt[0].x = lpt[1].x = rc.left;
lpt[1].y = lpt[2].y = rc.top;
lpt[2].x = rc.right-1;
lpt[0].y = rc.bottom-1;
Polyline(hDC,lpt,3);
}
else {
lpt[0].x = lpt[1].x = rc.right-1;
lpt[0].y = rc.top;
lpt[1].y = lpt[2].y = rc.bottom-1;
lpt[2].x = rc.left;
lpt[3].x = rc.left+1;
lpt[3].y = lpt[4].y = rc.bottom-2;
lpt[4].x = lpt[5].x = rc.right-2;
lpt[5].y = rc.top+1;
Polyline(hDC,lpt,6);
 
SelectObject(hDC, hPenHigh);
lpt[0].x = rc.right-1;
lpt[0].y = lpt[1].y = rc.top;
lpt[1].x = lpt[2].x = rc.left;
lpt[2].y = rc.bottom-1;
lpt[3].x = lpt[4].x = rc.left+1;
lpt[3].y = rc.bottom-2;
lpt[4].y = lpt[5].y = rc.top+1;
lpt[5].x = rc.right-2;
Polyline(hDC,lpt,6);
}
 
SelectObject(hDC,GetStockObject(BLACK_BRUSH));
/* down */
p3[0].x= rc.left + ((rc.right-rc.left)/2) - 1;
p3[0].y= rc.bottom - 4 - shrink;
p3[1].x= rc.left + 2 + shrink - 1;
p3[1].y= rc.bottom-(rc.bottom-rc.top) + 2 + shrink;
p3[2].x= rc.left + ((rc.right-rc.left)-4) - shrink;
p3[2].y= rc.bottom-(rc.bottom-rc.top) + 2 + shrink;
Polygon(hDC,p3,3);
 
SelectObject(hDC,hPenOld);
}
#endif
 
#if 0 /* jmt: fix: no COMBOLBOX */
extern LRESULT DefLISTBOXProc(HWND, UINT, WPARAM, LPARAM);
extern LRESULT ListboxCtrlProc(HWND, UINT, WPARAM, LPARAM);
#endif
 
#if 0
static HPEN GetSysColorPen(int color)
{
return NULL;
}
static HBRUSH GetSysColorBrush(int color)
{
return NULL;
}
#endif
 
typedef HWND HWND32;
 
#if 0 /* jmt: fix: no ownerdraw */
typedef HANDLE HCLASS32;
static HCLASS32 FindClass(LPCSTR str, HINSTANCE hInstance)
{
return NULL;
}
#endif
 
#if 0 /* jmt: fix: no scrollbar */
static HWND TWIN_ConvertToSysScroll(HWND hwnd, BOOL status, LPPOINT pp)
{
return NULL;
}
#endif
extern HWND listwp;
static HWND WindowFromPoint(POINT pt)
{
HWND wp,wp1;
int dx,dy,dx1,dy1;
#if 0
return NULL; /* fix!! */
#else
wp1=NULL;
switch(sizeof(dx))
{
case 4:
dx=0x7fffffff;
dy=0x7fffffff;
break;
case 2:
dx=0x7fff;
dy=0x7fff;
break;
}
for(wp=listwp; wp; wp=wp->next)
{
if (wp->winrect.left <= pt.x && pt.x <= wp->winrect.right)
{
dx1=(wp->winrect.right-pt.x);
if (dx1<dx)
{
wp1=wp;
dx=dx1;
}
dx1=(pt.x-wp->winrect.left);
if (dx1<dx)
{
wp1=wp;
dx=dx1;
}
}
if (wp->winrect.top <= pt.y && pt.y <= wp->winrect.bottom)
{
dy1=(wp->winrect.bottom-pt.y);
if (dy1<dy)
{
wp1=wp;
dy=dy1;
}
dy1=(pt.y-wp->winrect.top);
if (dy1<dy)
{
wp1=wp;
dy=dy1;
}
}
}
#endif
return wp1;
}
 
/* internal stuff */
static void CBoxDrawButton(HWND,UINT,COMBOBOX *);
static void CBoxSendMouseToLBox(COMBOBOX *, UINT, WPARAM, POINT);
static void CBoxCapture(HWND, WORD);
static void CBoxDrawEdit(COMBOBOX *, HWND, UINT);
static void CBoxDrawStatic(COMBOBOX *, HWND, UINT); /* MiD */
 
/* handle specific CB messages */
static LRESULT DefCBProc(HWND , UINT , WPARAM , LPARAM );
 
#if 0 /* jmt: fix: no ownerdraw */
static WNDPROC lpComboBinToNat = 0;
#endif
 
static LRESULT CALLBACK
DefComboboxProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
 
int WINAPI MwRegisterComboboxControl(HINSTANCE hInstance)
{
WNDCLASS wc;
 
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_GLOBALCLASS;
wc.lpfnWndProc = (WNDPROC)DefComboboxProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = 0;
wc.hbrBackground= GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName= "COMBOBOX";
 
return RegisterClass(&wc);
}
 
static LRESULT CALLBACK
DefComboboxProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hDC;
TEXTMETRIC tm;
#if 0 /* jmt: fix: no ownerdraw */
MEASUREITEMSTRUCT mis;
#endif
COMBOBOX *lp = (COMBOBOX *)NULL;
LRESULT rc;
HINSTANCE hInst;
POINT cp,cpScreen,pp;
UINT uiKey;
LPCREATESTRUCT lpcs;
#if 1 /* jmt: fix: no WM_WINDOWPOSCHANGING */
LPWINDOWPOS lpwp;
#endif
#if 0 /* jmt: fix: no ownerdraw */
HCLASS32 hComboClass32;
LPMEASUREITEMSTRUCT lpmis;
LPDRAWITEMSTRUCT lpdis;
LPDELETEITEMSTRUCT lpdlis;
#endif
DWORD dwStyle,dwExStyle;
WORD wEditWidth = 0,wEditHeight;
WORD wCBN;
#if 0 /* jmt: fix: no WM_SETFONT/WM_GETFONT */
RECT rcClient;
#endif
 
rc = CB_OKAY;
if ((uMsg != WM_CREATE/*WM_NCCREATE*/) && /*(uMsg != WM_CONVERT) &&*/
!(lp = (COMBOBOX *)hWnd->userdata/*GetWindowLong(hWnd,CWD_LPCBDATA)*/))
return rc;
 
switch(uMsg) {
#if 0
case WM_SIZE:
case WM_ENABLE:
case WM_LBUTTONDBLCLK:
case WM_COMPAREITEM:
case WM_CUT:
case WM_CLEAR:
#endif
 
case WM_SETFOCUS:
SET_STATE(lp, CSF_FOCUS);
if ((lp->wStyle & 0x0F) == CBS_DROPDOWNLIST)
{
uiKey = (UINT)SendMessage(lp->ListBoxControl, LB_GETCURSEL, 0, 0L);
CBoxDrawStatic(lp, hWnd, uiKey);
}
if (lp->EditControl)
{
SetFocus(lp->EditControl);
}
break;
case WM_KILLFOCUS:
CLEAR_STATE(lp, CSF_FOCUS);
if ((lp->wStyle & 0x0F) == CBS_DROPDOWNLIST)
{
uiKey = (UINT)SendMessage(lp->ListBoxControl, LB_GETCURSEL, 0, 0L);
CBoxDrawStatic(lp, hWnd, uiKey);
}
/*
** Hide listbox when loosing focus to window other than
** our own listbox... When wParam == 0 we "loose" the focus
** to the scrollbar in a listbox!
*/
if ((lp->wStyle & 0x0F) != CBS_SIMPLE && wParam != (WPARAM)lp->ListBoxControl && wParam != 0)
SendMessage(hWnd, CB_SHOWDROPDOWN, 0, 0L);
fprintf(stderr," 385: WM_KILLFOCUS\n");
break;
 
#if 0 /* jmt: fix: no WM_KEYDOWN */
case WM_KEYDOWN: /* MiD 08/14/95 */
/*
** We have to process this message in order to show
** current selection in a static control for certain
** keys. This doesn't affect combobox with an edit
** control, since the edit traps all key messages.
*/
{
int nCur = SendMessage(lp->ListBoxControl, LB_GETCURSEL,0, 0L);
int nPrevCur = nCur;
int nCount = SendMessage(lp->ListBoxControl, LB_GETCOUNT, 0, 0L);
 
if (nCount == 0)
break;
 
switch(wParam)
{
case VK_HOME:
nCur = 0;
break;
 
case VK_END:
nCur = nCount - 1;
break;
 
case VK_UP:
nCur--;
break;
 
case VK_DOWN:
nCur++;
break;
 
default:
return 0L;
}
 
if (nCur >= nCount)
nCur = nCount - 1;
if (nCur < 0)
nCur = 0;
 
SendMessage(lp->ListBoxControl, LB_SETCURSEL, nCur, 0L);
SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID, hWnd, CBN_SELCHANGE));
if (nCur != nPrevCur)
/* ecw */ SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID, hWnd, CBN_SELENDOK));
InvalidateRect(hWnd, NULL, 1);
break;
}
#endif /* WM_KEYDOWN */
 
case WM_CHAR:
{
int nNewCur;
int nOldCur;
 
if (lp->EditControl)
{
SendMessage(lp->EditControl, uMsg, wParam, lParam);
}
else {
nOldCur = SendMessage(lp->ListBoxControl, LB_GETCURSEL,0, 0L);
SendMessage(lp->ListBoxControl, uMsg, wParam, lParam);
nNewCur = SendMessage(lp->ListBoxControl, LB_GETCURSEL, 0, 0L);
if (nNewCur != nOldCur)
{
SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID, hWnd, CBN_SELCHANGE));
InvalidateRect(hWnd, NULL, 1);
}
}
break;
}
 
#if 0 /* jmt: fix: no WM_SETREDRAW */
case WM_SETREDRAW:
lp->bRedraw = wParam;
if (lp->EditControl)
SendMessage(lp->EditControl, WM_SETREDRAW, wParam, lParam);
if (lp->ListBoxControl)
SendMessage(lp->ListBoxControl, WM_SETREDRAW, wParam, lParam);
break;
#endif
case WM_CREATE: /*WM_NCCREATE:*/
lp = (COMBOBOX *)WinMalloc(sizeof(COMBOBOX));
memset((LPSTR)lp,'\0',sizeof(COMBOBOX));
 
/* save ptr to internal structure */
hWnd->userdata=(DWORD)lp; /* -SetWindowLong(hWnd, CWD_LPCBDATA, (LONG) lp); */
 
/* this is for CreateWindow calls */
hInst = NULL; /* -GetWindowInstance(hWnd); */
 
/* fill in the internal structure */
lpcs = (LPCREATESTRUCT)lParam;
lp->bRedraw = 1;
lp->wStateFlags = 0;
lp->wStyle = (UINT)LOWORD(lpcs->style);
if (!BOWNERDRAW(lp))
lp->wStyle |= CBS_HASSTRINGS;
lp->bExtended = TRUE;
lp->hFont = 0;
lp->hWndParent = lpcs->hwndParent;
lp->nID = (UINT)lpcs->hMenu;
 
#if 0 /* jmt: fix: no ownerdraw */
/* calc the height of the edit/static control */
if (0) /* (BOWNERDRAW(lp)) */
{
mis.CtlType = ODT_COMBOBOX;
mis.CtlID = (UINT)lpcs->hMenu;
mis.itemID = (UINT)-1;
mis.itemData = 0L;
SendMessage(lpcs->hwndParent, WM_MEASUREITEM, (WPARAM)lpcs->hMenu, (LPARAM)&mis);
/*** wEditHeight = (WORD)mis.itemHeight + 2; ***/
}
#endif /* ownerdraw */
 
/* get system font dimensions */
hDC = GetDC((HWND)0);
GetTextMetrics(hDC,&tm);
ReleaseDC((HWND)0,hDC);
 
/* allow different fonts to fit, don't hard code */
/* otherwise big fonts won't fit. */
/*****wEditHeight = ((tm.tmHeight - tm.tmInternalLeading)*7)/4;*****/
wEditHeight = tm.tmHeight + tm.tmInternalLeading * 3;
 
lp->uHeight = (UINT)wEditHeight;
 
if ((lp->wStyle & 0x0F) != CBS_SIMPLE)
{
lp->ButtonRect.top = 0;
lp->ButtonRect.left = lpcs->cx - 1 - GetSystemMetrics(SM_CXVSCROLL);
lp->ButtonRect.right = lpcs->cx;
lp->ButtonRect.bottom = wEditHeight;
/* for CBS_DROPDOWN/DROPDOWNLIST resize the window */
SetWindowPos(hWnd, 0,
0, 0, lpcs->cx, (int)wEditHeight,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOREDRAW);
}
else SetRectEmpty(&lp->ButtonRect);
 
if ((lp->wStyle & 0xf) != CBS_DROPDOWNLIST)
{ /* EDIT field - calc edit control style */
dwStyle = WS_CHILD | WS_VISIBLE | WS_BORDER;
if (lp->wStyle & CBS_AUTOHSCROLL)
dwStyle |= ES_AUTOHSCROLL;
if (lp->wStyle & CBS_OEMCONVERT)
dwStyle |= ES_OEMCONVERT;
 
if ((lp->wStyle & 0x0F) == CBS_SIMPLE)
{
fprintf(stderr," 528: wEditWidth = lpcs->cx=%d\n",lpcs->cx);
wEditWidth = lpcs->cx;
}
else /* ?if ((lp->wStyle & 0xf) == CBS_DROPDOWN) */
{
fprintf(stderr," 533: wEditWidth = lp->ButtonRect.left - 5=%d;\n",lp->ButtonRect.left - 5);
wEditWidth = lp->ButtonRect.left - 5;
}
/* create edit control */
lp->EditControl = CreateWindow("EDIT", NULL, dwStyle,
0, 0, wEditWidth, wEditHeight,
hWnd, (HMENU)CBC_EDITID,
hInst,(LPVOID)NULL);
}
else /* CBS_DROPDOWN -- static instead of edit */
lp->EditControl = 0;
/* listbox style */
/* jmt: fix: no WS_EX_SAVEBITS, WS_EX_NOCAPTURE, WS_EX_POPUPMENU */
dwExStyle = 0L; /* WS_EX_SAVEBITS | WS_EX_NOCAPTURE | WS_EX_POPUPMENU; */
dwStyle = WS_BORDER | LBS_NOTIFY ; /* | LBS_COMBOLBOX; */
if ((lp->wStyle & 0xf) == CBS_SIMPLE)
dwStyle |= WS_VISIBLE | WS_CHILD;
else
dwStyle |= WS_POPUP;
#if 0
if (lp->wStyle & CBS_DISABLENOSCROLL)
dwStyle |= LBS_DISABLENOSCROLL;
#endif
if (lp->wStyle & CBS_HASSTRINGS)
dwStyle |= LBS_HASSTRINGS;
if (lp->wStyle & CBS_NOINTEGRALHEIGHT)
dwStyle |= LBS_NOINTEGRALHEIGHT;
if (lp->wStyle & CBS_OWNERDRAWFIXED)
dwStyle |= LBS_OWNERDRAWFIXED;
if (lp->wStyle & CBS_OWNERDRAWVARIABLE)
dwStyle |= LBS_OWNERDRAWVARIABLE;
if (lp->wStyle & CBS_SORT)
dwStyle |= LBS_SORT;
if (lpcs->style & WS_VSCROLL)
dwStyle |= WS_VSCROLL;
 
/* calc listbox dimensions and position */
if ((lp->wStyle & 0xf) == CBS_SIMPLE) {
lp->ListBoxRect.left = 5;
lp->ListBoxRect.top = wEditHeight - 1;
lp->ListBoxRect.right = lpcs->cx;
lp->ListBoxRect.bottom = lpcs->cy - 2;
} else {
lp->ListBoxRect.left = lpcs->x;
lp->ListBoxRect.right = lp->ListBoxRect.left + lpcs->cx - 1;
lp->ListBoxRect.top = lpcs->y + wEditHeight - 1;
lp->ListBoxRect.bottom = lp->ListBoxRect.top + lpcs->cy + 1;
if ((lp->wStyle & 0x0F) == CBS_DROPDOWN) {
lp->ListBoxRect.left += 5;
}
}
#ifdef LATER
cp.x = ((lp->wStyle & 0xf) == CBS_DROPDOWNLIST)?0:5;
cp.y = wEditHeight - 1;
if ((lp->wStyle & 0xf) != CBS_SIMPLE)
ClientToScreen(hWnd,&cp);
lp->ListBoxRect.left = cp.x;
lp->ListBoxRect.top = cp.y;
lp->ListBoxRect.right = cp.x + lpcs->cx;
if ((lp->wStyle & 0xf) != CBS_DROPDOWNLIST)
lp->ListBoxRect.right -= 5;
lp->ListBoxRect.bottom = lp->ListBoxRect.top + lpcs->cy -
wEditHeight + 1;
#endif
 
lp->ListBoxControl = CreateWindowEx(dwExStyle,"LISTBOX",/*"COMBOLBOX",*/
NULL, dwStyle,
lp->ListBoxRect.left, lp->ListBoxRect.top,
lp->ListBoxRect.right - lp->ListBoxRect.left,
lp->ListBoxRect.bottom - lp->ListBoxRect.top,
hWnd, 0,
hInst,(LPVOID)NULL);
#if MWCLIENT
#if 0
GrLowerWindow(lp->ListBoxControl->wid);
#endif
MwLowerWindow(lp->ListBoxControl);
#endif
#ifdef LATER
/* Microsoft Word 6.0 wants to see COMBOLBOX on top */
/* of Z-order... */
if (dwStyle & WS_POPUP)
{
SetWindowPos(lp->ListBoxControl, HWND_TOP,
0, 0, 0, 0,
SWP_NOREDRAW | SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE);
}
#endif
 
#if 0 /* jmt: fix: no HWND32(LPWININFO) */
/* physically expand client window,
if there is a scroll style
*/
if (lpcs->style & WS_VSCROLL)
{
HWND32 hWnd32 = GETHWND32(hWnd);
 
SetRectEmpty(&hWnd32->rcNC);
 
hWnd32->wWidth = (WORD) hWnd32->rWnd.right-hWnd32->rWnd.left;
hWnd32->wHeight = (WORD)hWnd32->rWnd.bottom-hWnd32->rWnd.top;
RELEASEWININFO(hWnd32);
}
#endif
/*
** Finally turn off border drawing and WM_?SCROLL styles to prevent creation
** of system scrollbars.
*/
dwStyle = GetWindowLong(hWnd, GWL_STYLE);
dwStyle &= ~(WS_VSCROLL | WS_HSCROLL | WS_BORDER | WS_DLGFRAME | WS_THICKFRAME);
SetWindowLong(hWnd, GWL_STYLE, dwStyle);
lp->nListItems = 0;
return TRUE;
 
case WM_DESTROY: /*WM_NCDESTROY:*/
if (IsWindow(lp->ListBoxControl))
DestroyWindow(lp->ListBoxControl);
if (IsWindow(lp->EditControl))
DestroyWindow(lp->EditControl);
WinFree((LPSTR)lp);
return 0L;
 
case WM_GETDLGCODE:
return (LRESULT)(DLGC_WANTCHARS|DLGC_WANTARROWS);
 
/* jmt: twine->mwin bug fixed: */
case WM_NCLBUTTONDOWN: /* jmt: a must */
#if 0 /* twine->mw buggy */
case WM_LBUTTONDOWN:
#endif
if ((lp->wStyle & 0xf) == CBS_SIMPLE)
break;
 
cp.x = (int)(short)LOWORD(lParam);
cp.y = (int)(short)HIWORD(lParam);
#if 1 /* WM_NCLBUTTONDOWM: */
ScreenToClient(hWnd, &cp); /* jmt: a must */
#endif
if (!IS_SET(lp, CSF_CAPTUREACTIVE)) /* no listbox yet */
{
/* click on a button or anywhere if it's dropdown combo */
if (PtInRect(&lp->ButtonRect, cp) ||
(lp->wStyle & 0x0F) == CBS_DROPDOWNLIST)
{
if (PtInRect(&lp->ButtonRect, cp))
CBoxDrawButton(hWnd, 1, lp);
 
cp.x = ((lp->wStyle & 0xf) != CBS_DROPDOWNLIST) ? 5 : 0;
cp.y = lp->uHeight - 1;
 
ClientToScreen(hWnd, &cp);
 
fprintf(stderr," (1)lp->ListBoxRect:(%d,%d,%d,%d)\n",
lp->ListBoxRect.left,
lp->ListBoxRect.top,
lp->ListBoxRect.right,
lp->ListBoxRect.bottom);
 
OffsetRect(&lp->ListBoxRect, cp.x - lp->ListBoxRect.left, cp.y - lp->ListBoxRect.top);
 
fprintf(stderr," (2)lp->ListBoxRect:(%d,%d,%d,%d)\n",
lp->ListBoxRect.left,
lp->ListBoxRect.top,
lp->ListBoxRect.right,
lp->ListBoxRect.bottom);
 
SetWindowPos(lp->ListBoxControl, HWND_TOP, /*0,*/
cp.x, cp.y, 0, 0,
SWP_NOSIZE | /*SWP_NOZORDER |*/ SWP_NOACTIVATE);
 
SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID,hWnd,CBN_DROPDOWN));
/* ECW added following conditional... 4/4/96 */
/* JMT following conditional is a must for microwindows 8/14/2k */
if (1) /* -(!IS_SET(lp, CSF_HASDROPPED)) jmt: a must */
{
/* ??first time it drops down, size it to hold all items?? */
 
int nitems = SendMessage(lp->ListBoxControl,LB_GETCOUNT,0,0L);
#if 0
/* resize if too small, in this case, also do too long */
if (lp->ListBoxRect.bottom - lp->ListBoxRect.top <
((lp->uHeight-2) * nitems))
{
#endif
nitems = (nitems > 12 ? 12 : nitems); /* a dozen, max */
 
#if 0 /* twine->mw buggy? */
lp->ListBoxRect.bottom =
lp->ListBoxRect.top + ((lp->uHeight-2) * nitems);
#endif
fprintf(stderr," (2.5)lp->ListBoxRect:(%d,%d,%d,%d)\n",
lp->ListBoxRect.left,
lp->ListBoxRect.top,
lp->ListBoxRect.right,
lp->ListBoxRect.bottom);
 
/* jmt: twine->mwin bug fixed: */
fprintf(stderr," 706: fixed: SetWindowPos(lp->ListBoxControl,,%d,%d,...)\n",cp.x,cp.y);
#if 0 /* twine->mwin bug */
SetWindowPos(lp->ListBoxControl,HWND_TOP,0,0,
lp->ListBoxRect.right - lp->ListBoxRect.left,
lp->ListBoxRect.bottom - lp->ListBoxRect.top,
SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
#else /* jmt: twine->mwin bug fixed: */
SetWindowPos(lp->ListBoxControl,HWND_TOP,cp.x,cp.y,
lp->ListBoxRect.right - lp->ListBoxRect.left,
lp->ListBoxRect.bottom - lp->ListBoxRect.top,
SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
#endif
 
#if 0
}
#endif
SET_STATE(lp, CSF_HASDROPPED);
}
/* End of addition */
ShowWindow(lp->ListBoxControl, SW_SHOW);
#if 0 /* orig(twine) */
SetFocus(lp->ListBoxControl);
#else /* jmt: mwclient */
SetForegroundWindow(lp->ListBoxControl);
#endif
CBoxCapture(hWnd, 1);
SET_STATE(lp, CSF_CAPTUREACTIVE);
SET_STATE(lp, CSF_BUTTONDOWN);
}
}
else
{ /* there is a listbox visible */
HWND hwndNewFocus = 0;
cpScreen = cp;
 
if ((lp->wStyle & 0xf) != CBS_SIMPLE)
{
ClientToScreen(hWnd, &cpScreen);
hwndNewFocus = WindowFromPoint(cpScreen);
}
 
fprintf(stderr," (3)lp->ListBoxRect:(%d,%d,%d,%d)\n",
lp->ListBoxRect.left,
lp->ListBoxRect.top,
lp->ListBoxRect.right,
lp->ListBoxRect.bottom);
 
if (PtInRect(&lp->ListBoxRect, cpScreen))
{
CBoxSendMouseToLBox(lp, WM_LBUTTONDOWN, wParam, cpScreen);
}
else
{
if (PtInRect(&lp->ButtonRect, cp))
CBoxDrawButton(hWnd, 0, lp);
if ((lp->wStyle & 0x0F) == CBS_DROPDOWN && hwndNewFocus == lp->EditControl)
/* don't close listbox */;
else {
SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID,hWnd,CBN_CLOSEUP));
 
fprintf(stderr," 802: (hide) SetWindowPos(lp->ListBoxControl, , 0, 0, 0, 0,..)\n");
 
SetWindowPos(lp->ListBoxControl, 0,
0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER | SWP_HIDEWINDOW);
#if MWCLIENT
MwLowerWindow(lp->ListBoxControl);
#endif
CBoxCapture(hWnd, 0);
CLEAR_STATE(lp, CSF_BUTTONDOWN);
}
CLEAR_STATE(lp, CSF_CAPTUREACTIVE);
 
if (hwndNewFocus && hwndNewFocus != hWnd)
{
ScreenToClient(hwndNewFocus, &cpScreen);
SetFocus(hwndNewFocus);
 
SendMessage(hwndNewFocus, WM_LBUTTONDOWN, wParam, MAKELONG(cpScreen.x, cpScreen.y));
}
} /* !(PtInRect(&lp->ListBoxRect, cpScreen)) */
}
break;
 
/* jmt: twine->mwin bug fixed: */
case WM_NCMOUSEMOVE:
#if 0 /* jmt: twine->mw buggy */
case WM_MOUSEMOVE:
#endif
if (!IS_SET(lp,CSF_BUTTONDOWN) && ((lp->wStyle & 0xf) == CBS_SIMPLE))
break;
 
cp.x = (int)(short)LOWORD(lParam);
cp.y = (int)(short)HIWORD(lParam);
#if 1 /* WM_NCMOUSEMOVE: */
ScreenToClient(hWnd, &cp); /* jmt: a must */
#endif
 
if (IS_SET(lp, CSF_CAPTUREACTIVE))
{
if (PtInRect(&lp->ButtonRect,cp))
{
if (!IS_SET(lp, CSF_LOCALBUTTONDOWN))
CBoxDrawButton(hWnd, 1, lp);
break;
}
if ((lp->wStyle & 0xf) != CBS_SIMPLE)
ClientToScreen(hWnd,&cp);
if (PtInRect(&lp->ListBoxRect,cp))
{
CBoxSendMouseToLBox(lp,WM_MOUSEMOVE,wParam,cp);
}
if (IS_SET(lp,CSF_LOCALBUTTONDOWN) && ((lp->wStyle & 0xf) != CBS_SIMPLE))
CBoxDrawButton(hWnd,0,lp);
}
break;
 
/* jmt: twine->mwin bug fixed: */
case WM_NCLBUTTONUP:
#if 0 /* twine->mw buggy */
case WM_LBUTTONUP:
#endif
if (!IS_SET(lp, CSF_CAPTUREACTIVE))
break;
 
cp.x = (int)(short)LOWORD(lParam);
cp.y = (int)(short)HIWORD(lParam);
#if 1 /* WM_NCLBUTTONUP */
ScreenToClient(hWnd, &cp); /* jmt: a must */
#endif
 
CLEAR_STATE(lp,CSF_BUTTONDOWN);
 
if (PtInRect(&lp->ButtonRect, cp))
/*(lp->wStyle & 0x0F) == CBS_DROPDOWNLIST)*/
{
if (PtInRect(&lp->ButtonRect, cp))
CBoxDrawButton(hWnd, 0, lp);
if (IS_SET(lp, CSF_LBOXBUTTONDOWN))
{
if ((lp->wStyle & 0xf) != CBS_SIMPLE)
ClientToScreen(hWnd, &cp);
CBoxSendMouseToLBox(lp, WM_LBUTTONUP, wParam, cp);
CLEAR_STATE(lp,CSF_LBOXBUTTONDOWN);
}
break;
}
if ((lp->wStyle & 0xf) != CBS_SIMPLE)
ClientToScreen(hWnd, &cp);
 
if (PtInRect(&lp->ListBoxRect, cp))
{
uiKey = (UINT)SendMessage(lp->ListBoxControl, LB_GETCURSEL, 0, 0);
if (uiKey != (UINT)LB_ERR)
{
if (lp->EditControl)
{
SetFocus(lp->EditControl);
 
CBoxDrawEdit(lp, hWnd, uiKey);
}
else {
SetFocus(hWnd);
 
CBoxDrawStatic(lp, hWnd, uiKey);
}
/* LATER check the WS_EX_NOPARENTNOTIFY bit in ext style.*/
/* ecw */ SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID,hWnd,CBN_SELENDOK));
SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID,hWnd,CBN_CLOSEUP));
 
fprintf(stderr," 844: (hide) SetWindowPos(lp->ListBoxControl, , 0, 0, 0, 0,..)\n");
 
SetWindowPos(lp->ListBoxControl, 0,
0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER | SWP_HIDEWINDOW);
 
CBoxCapture(hWnd, 0);
CLEAR_STATE(lp,CSF_CAPTUREACTIVE);
} /* uiKey ok */
CBoxSendMouseToLBox(lp, WM_LBUTTONUP, wParam, cp);
CLEAR_STATE(lp,CSF_LBOXBUTTONDOWN);
#if MWCLIENT
#if 0
GrLowerWindow(lp->ListBoxControl->wid);
#endif
MwLowerWindow(lp->ListBoxControl);
#endif
}
else /* clicked somewhere outside button or listbox -
** the listbox should stay intact... MiD
*/
if (IS_SET(lp, CSF_LBOXBUTTONDOWN))
{
if ((lp->wStyle & 0xf) != CBS_SIMPLE)
ClientToScreen(hWnd, &cp);
CBoxSendMouseToLBox(lp, WM_LBUTTONUP, wParam, cp);
CLEAR_STATE(lp,CSF_LBOXBUTTONDOWN);
}
break;
 
case WM_ERASEBKGND:
return 1L;
 
case WM_PAINT:
BeginPaint(hWnd,&ps);
EndPaint(hWnd,&ps);
 
if (!IsWindowVisible(hWnd) || !lp->bRedraw)
return 0L;
 
if ((lp->wStyle & 0xf) != CBS_SIMPLE)
CBoxDrawButton(hWnd, IS_SET(lp,CSF_LOCALBUTTONDOWN), lp);
uiKey = (UINT)SendMessage(lp->ListBoxControl, LB_GETCURSEL, 0, 0);
if (lp->EditControl)
CBoxDrawEdit(lp, hWnd, uiKey);
else CBoxDrawStatic(lp, hWnd, uiKey);
return 0L;
case WM_COMMAND:
if (GET_WM_COMMAND_ID(wParam,lParam) == CBC_EDITID) {
/* edit/static control notifications */
switch((short)GET_WM_COMMAND_CMD(wParam,lParam)) {
case EN_SETFOCUS:
#ifdef LATER
wCBN = CBN_SETFOCUS;
#else
wCBN = 0;
#endif
break;
case EN_KILLFOCUS:
wCBN = CBN_KILLFOCUS;
break;
case EN_CHANGE:
{
int index = 0;
char sz[128];
/*
** Advance listbox
** selection until there is string match. One first mismatch
** listbox advances to its first item.
*/
SendMessage(lp->EditControl, WM_GETTEXT, sizeof(sz)-1, (LPARAM)sz);
if (/*l*/strlen(sz) > 0/*L*/)
index = (int)SendMessage(lp->ListBoxControl, LB_FINDSTRING, -1, (LPARAM)sz);
if (index == LB_ERR)
index = 0;
SendMessage(lp->ListBoxControl, LB_SETTOPINDEX, index, 0L);
wCBN = CBN_EDITCHANGE;
break;
}
case EN_UPDATE:
wCBN = CBN_EDITUPDATE;
break;
case EN_ERRSPACE:
wCBN = CBN_ERRSPACE;
break;
default:
wCBN = 0;
break;
}
if (wCBN)
return SendMessage(lp->hWndParent,WM_COMMAND,
GET_WM_COMMAND_MPS(lp->nID,hWnd,wCBN));
else
return rc;
}
if (GET_WM_COMMAND_ID(wParam,lParam) == 0) {
/* listbox notifications */
switch ((short)GET_WM_COMMAND_CMD(wParam,lParam)) {
case LBN_ERRSPACE:
wCBN = CBN_ERRSPACE;
break;
case LBN_SELCHANGE:
if ((lp->wStyle & 0xf) == CBS_SIMPLE)
{
uiKey = (UINT)SendMessage(lp->ListBoxControl, LB_GETCURSEL, 0, 0);
if (uiKey != (UINT)LB_ERR)
if (lp->EditControl)
{
CBoxDrawEdit(lp, hWnd, uiKey);
}
}
wCBN = CBN_SELCHANGE;
break;
case LBN_DBLCLK:
wCBN = CBN_DBLCLK;
break;
case LBN_SELCANCEL: /* TODO */
wCBN = 0;
break;
case LBN_SETFOCUS:
wCBN = CBN_SETFOCUS;
break;
case LBN_KILLFOCUS:
wCBN = CBN_KILLFOCUS;
break;
default:
wCBN = 0;
break;
}
if (wCBN)
return SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID,hWnd,wCBN));
else
return rc;
}
break;
 
case WM_GETTEXT:
if ( lp->EditControl )
return SendMessage(lp->EditControl,uMsg,wParam,lParam);
else if ( lp->ListBoxControl ) {
WPARAM sel, len;
 
sel = (WPARAM)SendMessage(lp->ListBoxControl, LB_GETCURSEL, 0, 0);
if ( sel != (WPARAM)LB_ERR ) {
len = (WPARAM)SendMessage(lp->ListBoxControl, LB_GETTEXTLEN, 0, 0);
if ( len <= wParam )
return SendMessage(lp->ListBoxControl, LB_GETTEXT, sel, lParam);
}
}
return CB_ERR;
 
case WM_GETTEXTLENGTH:
if ( lp->EditControl )
return SendMessage(lp->EditControl,uMsg,wParam,lParam);
else if ( lp->ListBoxControl ) {
WPARAM sel;
 
sel = (WPARAM)SendMessage(lp->ListBoxControl, LB_GETCURSEL, 0, 0);
if ( sel != (WPARAM)LB_ERR )
return SendMessage(lp->ListBoxControl, LB_GETTEXTLEN, sel, 0);
}
return CB_ERR;
 
case WM_SETTEXT:
if ( lp->EditControl )
return SendMessage(lp->EditControl,uMsg,wParam,lParam);
return CB_ERR;
 
#if 0 /* jmt: fix: no WM_SETFONT/WM_GETFONT */
case WM_SETFONT:
lp->hFont = (HFONT)wParam;
 
hDC = GetDC(hWnd);
SelectObject(hDC,lp->hFont);
GetTextMetrics(hDC,&tm);
ReleaseDC(hWnd,hDC);
wEditHeight = tm.tmHeight + 3 * tm.tmInternalLeading;
 
if (wEditHeight == lp->uHeight)
return 0L;
 
lp->uHeight = (UINT)wEditHeight;
lp->ButtonRect.bottom = wEditHeight;
/*
** The following SetWindowPos causes WM_WINDOWPOSCHANGING message
** where child windows are resized and/or moved.
*/
ShowWindow(hWnd, SW_HIDE);
GetClientRect(hWnd,&rcClient);
if ((lp->wStyle & 0xf) != CBS_SIMPLE)
SetWindowPos(hWnd, 0,
0, 0, rcClient.right, (int)wEditHeight,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOREDRAW);
else SetWindowPos(hWnd, 0,
0, 0, rcClient.right, (int)wEditHeight + lp->ListBoxRect.bottom - lp->ListBoxRect.top + 1,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOREDRAW);
ShowWindow(hWnd, SW_SHOWNA);
 
if (lp->EditControl)
SendMessage(lp->EditControl, WM_SETFONT, wParam,lParam);
SendMessage(lp->ListBoxControl, WM_SETFONT, wParam,lParam);
 
if(LOWORD(lParam))
RedrawWindow(hWnd,(const RECT *)0,(HRGN)0,
RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW );
return (LRESULT)0;
 
case WM_GETFONT:
return lp->hFont;
#endif /* WM_SETFONT/WM_GETFONT */
 
case WM_MOVE: /*WM_WINDOWPOSCHANGING:*/
#if 0
lpwp = (LPWINDOWPOS)lParam;
#else
pp.x=LOWORD(lParam);
pp.y=HIWORD(lParam);
#endif
if (1)/*(lpwp)*/ {
if (1)/*(!(lpwp->flags & SWP_NOSIZE))*/ {
lp->ButtonRect.right = (hWnd->winrect.right-hWnd->winrect.left); /* lpwp->cx; */
if ((lp->wStyle & 0xf) == CBS_SIMPLE)
lp->ButtonRect.left = lp->ButtonRect.right;
else lp->ButtonRect.left = (hWnd->winrect.right-hWnd->winrect.left)/*lpwp->cx*/ - 1 -
GetSystemMetrics(SM_CXVSCROLL);
 
if (lp->EditControl)
{
wEditWidth = lp->ButtonRect.left + 1;
if ((lp->wStyle & 0xf) == CBS_SIMPLE)
wEditWidth --;
if ((lp->wStyle & 0xf) == CBS_DROPDOWN)
wEditWidth -= 5;
SetWindowPos(lp->EditControl,(HWND)0,
0,0,
wEditWidth, lp->uHeight,
SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOZORDER);
}
if (lp->ListBoxControl)
{
if ((lp->wStyle & 0x0F) == CBS_SIMPLE)
{
lp->ListBoxRect.left = 5;
lp->ListBoxRect.top = lp->uHeight - 1;
lp->ListBoxRect.right = (hWnd->winrect.right-hWnd->winrect.left); /* lpwp->cx; */
lp->ListBoxRect.bottom = (hWnd->winrect.bottom-hWnd->winrect.top)/*lpwp->cy*/ - 2;
}
else {
POINT cp;
cp.x = 0;
cp.y = lp->uHeight - 1;
ClientToScreen(hWnd, &cp);
OffsetRect(&lp->ListBoxRect, cp.x - lp->ListBoxRect.left, cp.y - lp->ListBoxRect.top);
 
lp->ListBoxRect.right = lp->ListBoxRect.left + (hWnd->winrect.right-hWnd->winrect.left)/*lpwp->cx*/;
if ((lp->wStyle & 0xf) != CBS_DROPDOWNLIST)
lp->ListBoxRect.right -= 5;
}
 
SetWindowPos(lp->ListBoxControl,(HWND)0,
lp->ListBoxRect.left, lp->ListBoxRect.top,
lp->ListBoxRect.right - lp->ListBoxRect.left,
lp->ListBoxRect.bottom - lp->ListBoxRect.top,
SWP_NOACTIVATE|SWP_NOZORDER);
}
#if 0 /* jmt: fix: no WM_WINDOWPOSCHANGING */
/* the height of the normal state stays the same */
if ((lp->wStyle & 0xf) != CBS_SIMPLE)
lpwp->cy = (int)lp->uHeight;
#endif
}
}
return (LRESULT)0;
 
case WM_WINDOWPOSCHANGED:
DefWindowProc(hWnd,uMsg,wParam,lParam);
lpwp = (LPWINDOWPOS)lParam;
if (lpwp) {
if (!(lpwp->flags & SWP_NOSIZE)) /* TODO */
#if 0
RedrawWindow(hWnd,(const RECT *)0,(HRGN)0,
RDW_INVALIDATE|RDW_ERASE);
#else
InvalidateRect(hWnd,NULL,TRUE);
#endif
}
return (LRESULT)0;
 
#if 0 /* jmt: fix: no ownerdraw */
/*********************************************/
/* ownerdraw stuff */
/*********************************************/
case WM_DRAWITEM:
lpdis = (LPDRAWITEMSTRUCT)lParam;
lpdis->CtlType = ODT_COMBOBOX;
lpdis->CtlID = lp->nID;
lpdis->hwndItem = hWnd;
return SendMessage(lp->hWndParent,WM_DRAWITEM,
(WPARAM)lp->nID,lParam);
 
case WM_MEASUREITEM:
lpmis = (LPMEASUREITEMSTRUCT)lParam;
lpmis->CtlType = ODT_COMBOBOX;
lpmis->CtlID = lp->nID;
return SendMessage(lp->hWndParent,WM_MEASUREITEM,
(WPARAM)lp->nID,lParam);
 
case WM_DELETEITEM:
lpdlis = (LPDELETEITEMSTRUCT)lParam;
lpdlis->CtlType = ODT_COMBOBOX;
lpdlis->CtlID = lp->nID;
lpdlis->hwndItem = hWnd;
return SendMessage(lp->hWndParent,WM_DELETEITEM,
(WPARAM)lp->nID,lParam);
 
case WM_CONVERT:
if (!lpComboBinToNat) {
hComboClass32 = FindClass("COMBOBOX",0);
lpComboBinToNat = (WNDPROC)GetClassHandleLong(
hComboClass32,GCL_BINTONAT);
}
if (lpComboBinToNat)
return lpComboBinToNat(hWnd, uMsg, wParam, lParam);
else
return (LRESULT)0;
#endif /* ownerdraw */
 
default:
return DefCBProc( hWnd, uMsg, wParam, lParam);
}
return rc;
}
 
/************************************************************************
**
************************************************************************/
static LRESULT DefCBProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
int len,index;
COMBOBOX *lp;
char *selection;
int rc;
POINT cp;
 
lp = (COMBOBOX *) hWnd->userdata/*GetWindowLong(hWnd,CWD_LPCBDATA)*/;
switch(uMsg) {
/*********************************************/
/* messages specific to the list box control */
/*********************************************/
case CB_ADDSTRING:
lp->nListItems++; /* shd. test for successful return */
return SendMessage(lp->ListBoxControl,LB_ADDSTRING,
wParam,lParam);
case CB_DELETESTRING:
if (lp->nListItems)
lp->nListItems--;
return SendMessage(lp->ListBoxControl,LB_DELETESTRING,
wParam,lParam);
case CB_DIR:
return SendMessage(lp->ListBoxControl,LB_DIR,
wParam,lParam);
case CB_FINDSTRING:
return SendMessage(lp->ListBoxControl,LB_FINDSTRING,
wParam,lParam);
case CB_FINDSTRINGEXACT:
return SendMessage(lp->ListBoxControl,LB_FINDSTRINGEXACT,
wParam,lParam);
case CB_GETCOUNT:
return SendMessage(lp->ListBoxControl,LB_GETCOUNT,
wParam,lParam);
case CB_GETCURSEL:
return SendMessage(lp->ListBoxControl,LB_GETCURSEL,
wParam,lParam);
case CB_GETITEMDATA:
return SendMessage(lp->ListBoxControl,LB_GETITEMDATA,
wParam,lParam);
case CB_GETITEMHEIGHT:
return SendMessage(lp->ListBoxControl,LB_GETITEMHEIGHT,
wParam,lParam);
case CB_GETLBTEXT:
return SendMessage(lp->ListBoxControl,LB_GETTEXT,
wParam,lParam);
case CB_GETLBTEXTLEN:
return SendMessage(lp->ListBoxControl,LB_GETTEXTLEN,
wParam,lParam);
case CB_INSERTSTRING:
return SendMessage(lp->ListBoxControl,LB_INSERTSTRING,
wParam,lParam);
case CB_SETITEMDATA:
return SendMessage(lp->ListBoxControl,LB_SETITEMDATA,
wParam,lParam);
/*********************************************/
/* messages specific to the edit control */
/*********************************************/
case CB_GETEDITSEL:
return SendMessage(lp->EditControl,EM_GETSEL,0,0);
case CB_LIMITTEXT:
return SendMessage(lp->EditControl,EM_LIMITTEXT,
wParam,lParam);
 
case CB_SETEDITSEL:
return SendMessage(lp->EditControl,EM_SETSEL,
wParam,lParam);
 
/*********************************************/
/* messages handled by the combobox */
/*********************************************/
case CB_GETDROPPEDCONTROLRECT:
CopyRect((LPRECT)lParam,&lp->ListBoxRect);
break;
case CB_GETDROPPEDSTATE:
return IS_SET(lp,CSF_CAPTUREACTIVE);
 
case CB_GETEXTENDEDUI:
return (LRESULT)lp->bExtended;
 
case CB_RESETCONTENT:
SendMessage(lp->ListBoxControl,LB_RESETCONTENT,0,0);
if (lp->EditControl)
SendMessage(lp->EditControl,WM_SETTEXT,0,(LPARAM)(LPSTR)"");
break;
 
case CB_SELECTSTRING:
index = (int)SendMessage(lp->ListBoxControl, LB_SELECTSTRING, wParam, lParam);
if (index == LB_ERR)
return CB_ERR;
 
len = (int)SendMessage(lp->ListBoxControl, LB_GETTEXTLEN, index, 0);
if (len <= 0)
return CB_ERR;
 
selection = (LPSTR)WinMalloc((UINT)len+1);
rc = (int)SendMessage(lp->ListBoxControl, LB_GETTEXT, (WPARAM)index, (LPARAM)selection);
if (lp->EditControl)
rc = (int)SendMessage(lp->EditControl, WM_SETTEXT, 0, (LPARAM)selection);
else CBoxDrawStatic(lp, hWnd, index);
WinFree(selection);
break;
case CB_SETCURSEL:
rc = (int)SendMessage(lp->ListBoxControl, LB_SETCURSEL, wParam, lParam);
if (rc == LB_ERR)
return CB_ERR;
len = (int)SendMessage(lp->ListBoxControl, LB_GETTEXTLEN, wParam, 0);
if (len <= 0)
return CB_ERR;
 
selection = (LPSTR)WinMalloc((UINT)len+1);
rc = (int)SendMessage(lp->ListBoxControl, LB_GETTEXT, wParam, (LPARAM)selection);
if (lp->EditControl)
rc = (int)SendMessage(lp->EditControl, WM_SETTEXT, 0, (LPARAM)selection);
else CBoxDrawStatic(lp, hWnd, wParam);
WinFree(selection);
return (LRESULT)wParam;
 
case CB_SETEXTENDEDUI:
lp->bExtended = (BOOL)wParam;
break;
 
case CB_SETITEMHEIGHT: /* TODO */
break;
 
case CB_SHOWDROPDOWN:
if ((lp->wStyle & 0xf) == CBS_SIMPLE)
return 1L;
if (wParam)
{
if (IS_SET(lp,CSF_CAPTUREACTIVE))
return 1L;
 
cp.x = ((lp->wStyle & 0xf) != CBS_DROPDOWNLIST) ? 5 : 0;
cp.y = lp->uHeight -1;
 
ClientToScreen(hWnd, &cp);
OffsetRect(&lp->ListBoxRect, cp.x - lp->ListBoxRect.left, cp.y - lp->ListBoxRect.top);
 
SetWindowPos(lp->ListBoxControl, 0,
cp.x, cp.y, 0, 0,
SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
 
SendMessage(lp->hWndParent,WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID,hWnd,CBN_DROPDOWN));
 
fprintf(stderr," 1330: SetWindowPos(lp->ListBoxControl, , 0, 0, 0, 0,..)\n");
 
SetWindowPos(lp->ListBoxControl, HWND_TOP,
0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_SHOWWINDOW);
 
CBoxCapture(hWnd, 1);
SET_STATE(lp,CSF_CAPTUREACTIVE);
}
else
{
if (!IS_SET(lp,CSF_CAPTUREACTIVE))
return 1L;
 
SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID,hWnd,CBN_CLOSEUP));
/* test: */
fprintf(stderr," 1343: (hide) SetWindowPos(lp->ListBoxControl, , 0, 0, 0, 0,..)\n");
 
SetWindowPos(lp->ListBoxControl, 0,
0, 0, 0, 0,
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER | SWP_HIDEWINDOW);
 
CBoxCapture(hWnd, 0);
CLEAR_STATE(lp, CSF_CAPTUREACTIVE);
}
return 1L;
 
/*********************************************/
/* messages handled by the defwindowproc.... */
/*********************************************/
default:
return DefWindowProc( hWnd, uMsg, wParam, lParam);
}
return CB_OKAY;
}
 
 
static void
CBoxDrawButton(HWND hWnd,UINT wState,COMBOBOX *lp)
{
HDC hDC;
int x,y;
int dx,dy;
#if 0 /* jmt: fix: no LoadBitmap() */
int cx,cy;
static int nWidth,nHeight;
BITMAP bmpCombo;
static HBITMAP hbmpCombo = 0;
HBITMAP hbmpOld = 0;
HDC hdcSrc;
COLORREF rgbText, rgbBk;
#endif
HBRUSH hBrush;
HPEN hPenHigh,hPenShadow;
RECT rc;
 
hDC = GetDC(hWnd);
 
CopyRect(&rc,&lp->ButtonRect);
x = rc.left;
y = rc.top;
dx = rc.right;
dy = rc.bottom;
 
hPenHigh = GetStockObject(WHITE_PEN);
#if 0
hPenShadow = GetSysColorPen(COLOR_BTNSHADOW);
#else
hPenShadow = CreatePen(PS_SOLID,1,GetSysColor(COLOR_BTNSHADOW));
#endif
#if 0
hBrush = GetSysColorBrush(COLOR_BTNFACE);
#else
hBrush = CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
#endif
FillRect(hDC, &rc, hBrush);
#if 0
hBrush = GetStockObject(BLACK_BRUSH);
FillRect/*FrameRect*/(hDC, &lp->ButtonRect, hBrush);
#else
SelectObject(hDC,GetStockObject(BLACK_PEN));
Rectangle(hDC,lp->ButtonRect.left,lp->ButtonRect.top,lp->ButtonRect.right,lp->ButtonRect.bottom);
#endif
rc.left += 1; rc.right -= 1;
rc.top += 1; rc.bottom -= 1;
 
Draw3DButtonRect(hDC,hPenHigh,hPenShadow,rc,wState);
 
#if 0 /* jmt: fix: no LoadBitmap(),GetObject() */
if (hbmpCombo == 0)
{
hbmpCombo = LoadBitmap(0,(LPSTR)OBM_COMBO);
GetObject(hbmpCombo, sizeof(BITMAP), (LPVOID)&bmpCombo);
nWidth = bmpCombo.bmWidth;
nHeight = bmpCombo.bmHeight;
}
/*
** MiD 08/15/95 changed to mono bitmap as it is in Windows. Convert
** it to colors on the fly
*/
hdcSrc = CreateCompatibleDC(hDC);
hbmpOld = SelectObject(hdcSrc, hbmpCombo);
/*
** Source hdc ok. Prepare the target hdc, then BitBlt to it.
*/
rgbText = SetTextColor(hDC,GetSysColor(COLOR_BTNTEXT));
rgbBk = SetBkColor(hDC,GetSysColor(COLOR_BTNFACE));
 
cx = (dx - x - nWidth)/2;
cy = (dy - y - nHeight)/2;
if (wState)
{ cx++; cy++; }
BitBlt(hDC, x+cx, y+cy, nWidth, nHeight, hdcSrc, 0, 0, SRCCOPY);
 
SetTextColor(hDC, rgbText);
SetBkColor(hDC, rgbBk);
SelectObject(hdcSrc,hbmpOld);
DeleteDC(hdcSrc);
#endif /* BitBlt Bitmap */
#if 1
DeleteObject(hBrush);
DeleteObject(hPenShadow);
#endif
ReleaseDC(hWnd,hDC);
 
if (wState)
SET_STATE(lp,CSF_LOCALBUTTONDOWN);
else
CLEAR_STATE(lp,CSF_LOCALBUTTONDOWN);
}
 
#if 0 /* jmt: fix: no COMBOLBOX */
/************************************************************************
**
************************************************************************/
LRESULT DefCOMBOLBOXProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
#if 0
return DefLISTBOXProc(hWnd, msg, wParam,lParam);
#endif
return ListboxCtrlProc(hWnd, msg, wParam,lParam);
}
#endif
 
/************************************************************************
**
************************************************************************/
static void CBoxSendMouseToLBox(COMBOBOX *lp, UINT uiMsg, WPARAM wParam, POINT ptScreen)
{
POINT pt;
int nNCHit;
#if 0 /* jmt: fix: no scrollbar */
HWND hWndScroll;
#endif
pt = ptScreen;
ScreenToClient(lp->ListBoxControl,&pt);
 
nNCHit = LOSHORT(SendMessage(lp->ListBoxControl, WM_NCHITTEST, 0, MAKELPARAM(ptScreen.x,ptScreen.y)));
 
switch (nNCHit)
{
case HTCLIENT:
if (uiMsg == WM_MOUSEMOVE && !IS_SET(lp,CSF_LBOXBUTTONDOWN))
{
SendMessage(lp->ListBoxControl, WM_LBUTTONDOWN, 0, MAKELONG((WORD)pt.x,(WORD)pt.y));
 
SET_STATE(lp, CSF_BUTTONDOWN | CSF_LBOXBUTTONDOWN);
}
SendMessage(lp->ListBoxControl, uiMsg, wParam, MAKELONG((WORD)pt.x,(WORD)pt.y));
break;
 
#if 0 /* jmt: fix: no scrollbar */
case HTVSCROLL:
if (0 != (hWndScroll = TWIN_ConvertToSysScroll(lp->ListBoxControl, TRUE /* vertical */, &pt)))
SendMessage(hWndScroll, uiMsg, wParam, MAKELONG((WORD)pt.x,(WORD)pt.y));
break;
#endif
default:
break;
}
}
 
/************************************************************************
**
************************************************************************/
static void CBoxCapture(HWND hWnd, WORD wFunc)
{
static HWND hWndCapture = (HWND)0;
 
if (wFunc)
{
hWndCapture = SetCapture(hWnd);
 
SetFocus(hWnd);
}
else {
if (!hWndCapture)
ReleaseCapture();
else {
#ifdef LATER
SetCapture(hWndCapture);
#else
ReleaseCapture();
#endif
hWndCapture = (HWND)0;
}
}
}
 
/************************************************************************
**
************************************************************************/
static void CBoxDrawEdit(COMBOBOX *lp, HWND hWnd, UINT uiKey)
{
int nLen;
LPVOID lpData;
#if 0 /* jmt: fix: no ownerdraw */
HRGN hRgn;
DRAWITEMSTRUCT dis;
#endif
/*
if (uiKey == (UINT)LB_ERR)
return;
 
if (!BOWNERDRAW(lp))
*/
if (lp->wStyle & CBS_HASSTRINGS)
{
if (uiKey == (UINT)LB_ERR)
return;
nLen = (int)SendMessage(lp->ListBoxControl, LB_GETTEXTLEN, uiKey, 0L);
if (nLen <= 0)
return;
lpData = (LPVOID)WinMalloc(nLen+1);
SendMessage(lp->ListBoxControl, LB_GETTEXT, uiKey, (LPARAM)lpData);
SendMessage(lp->EditControl, WM_SETTEXT, strlen(lpData), (LPARAM)lpData);
Edit_SetSel(lp->EditControl, 0, -1);
WinFree((LPSTR)lpData);
}
#if 0 /* jmt: fix: no ownerdraw */
else {
dis.CtlType = ODT_COMBOBOX;
dis.CtlID = (UINT)lp->nID;
dis.itemID = -1; /* used to be uiKey */
dis.itemAction = ODA_DRAWENTIRE;
dis.itemState = ODS_FOCUS;
dis.hwndItem = hWnd;
dis.itemData = 0;
GetClientRect(lp->EditControl,&dis.rcItem);
dis.rcItem.left += 3;
dis.rcItem.right -= 3;
dis.rcItem.top += 2;
dis.rcItem.bottom -= 2;
 
dis.hDC = GetDC(lp->EditControl);
hRgn = CreateRectRgnIndirect(&dis.rcItem);
SelectClipRgn(dis.hDC,hRgn);
SelectObject(dis.hDC, lp->hFont);
SendMessage(lp->hWndParent, WM_DRAWITEM, (WPARAM)(UINT)lp->nID, (LPARAM)&dis);
ReleaseDC(lp->EditControl,dis.hDC);
DeleteObject(hRgn);
}
#endif /* ownerdraw */
}
 
/************************************************************************
**
************************************************************************/
static void CBoxDrawStatic(COMBOBOX *lp, HWND hWnd, UINT uiKey)
{
int nLen;
HDC hdc;
LPVOID lpData;
RECT rcClient;
HFONT hfonOld = 0;
#if 0 /* jmt: fix: no ownerdraw */
HRGN hRgn;
DRAWITEMSTRUCT dis;
#endif
HBRUSH hbrStatic, hbrOld;
/* Draw rectangle regardless of ownerdraw style...
*/
hdc = GetDC(hWnd);
rcClient.left = 0;
rcClient.top = 0;
rcClient.right = lp->ButtonRect.left+1;
rcClient.bottom = lp->uHeight;
hbrStatic = CreateSolidBrush(GetSysColor(COLOR_WINDOW));
hbrOld = SelectObject(hdc, hbrStatic);
SelectObject(hdc, GetStockObject(BLACK_PEN));/* ??? COLOR_WINDOWFRAME */
Rectangle(hdc, rcClient.left, rcClient.top, rcClient.right, rcClient.bottom);
SelectObject(hdc, hbrOld);
DeleteObject(hbrStatic);
ReleaseDC(hWnd, hdc);
 
if (uiKey == (UINT)LB_ERR)
return;
 
/* jmt: no ownerdraw */
if (1) /* (!BOWNERDRAW(lp)) */
{
/* if necessary, draw text */
hdc = GetDC(hWnd);
nLen = (int)SendMessage(lp->ListBoxControl, LB_GETTEXTLEN, (WPARAM)uiKey, 0L);
if (nLen > 0)
{
lpData = (LPVOID)WinMalloc(nLen+1);
SendMessage(lp->ListBoxControl, LB_GETTEXT, uiKey, (LPARAM)lpData);
SetBkMode(hdc, TRANSPARENT);
if (!IS_SET(lp, CSF_FOCUS))
{
SetTextColor(hdc, GetSysColor(COLOR_WINDOWTEXT));
rcClient.left += 2;
}
else {
InflateRect(&rcClient, -2, -2);
hbrStatic = CreateSolidBrush(GetSysColor(COLOR_HIGHLIGHT));
hbrOld = SelectObject(hdc, hbrStatic);
FillRect(hdc, &rcClient, hbrStatic);
#if 0 /* jmt: fix: no DrawFocusRect() */
DrawFocusRect(hdc, &rcClient);
#endif
SelectObject(hdc, hbrOld);
DeleteObject(hbrStatic);
SetTextColor(hdc, GetSysColor(COLOR_HIGHLIGHTTEXT));
}
if (lp->hFont)
hfonOld = SelectObject(hdc, lp->hFont);
DrawText(hdc, (LPSTR)lpData, nLen, &rcClient, DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX);
if (lp->hFont)
SelectObject(hdc, hfonOld);
WinFree((LPVOID)lpData);
}
ReleaseDC(hWnd, hdc);
}
#if 0 /* jmt: fix: no ownerdraw */
else { /* fill OWNERDRAWSTRUCT and send WM_DRAWITEM message */
dis.CtlType = ODT_COMBOBOX;
dis.CtlID = (UINT)lp->nID;
dis.itemID = uiKey;
dis.itemAction = ODA_DRAWENTIRE;
dis.itemState = ODS_FOCUS;
dis.hwndItem = hWnd;
dis.itemData = SendMessage(lp->ListBoxControl, LB_GETITEMDATA, uiKey, 0L);
GetClientRect(hWnd, &dis.rcItem);
dis.rcItem.left += 3;
dis.rcItem.right = lp->ButtonRect.left - 2; /* do not touch button */
dis.rcItem.top += 2;
dis.rcItem.bottom -= 2;
 
dis.hDC = GetDC(hWnd);
hRgn = CreateRectRgnIndirect(&dis.rcItem);
SelectClipRgn(dis.hDC, hRgn);
SelectObject(dis.hDC, lp->hFont);
SendMessage(lp->hWndParent, WM_DRAWITEM, (WPARAM)(UINT)lp->nID, (LPARAM)&dis);
ReleaseDC(hWnd, dis.hDC);
DeleteObject(hRgn);
}
#endif /* ownerdraw */
}
 
 
/*------------------------- < Full Revision History > ----------------------
** Revision 1.2 2001/11/06 23:35:46 greg
**
** Revision 1.1.1.1 2001/06/21 06:32:42 greg
** Microwindows pre8 with patches
**
** Revision 1.1.1.1 2001/06/05 03:44:01 root
** First import of 5/5/2001 Microwindows to CVS
**
** Revision 1.8 2000/08/14 jmt
** ported to microwin(non-client/server mode)
**
** Revision 1.7 2000/06/28 jmt
** porting to microwin
**
** Revision 1.6 2000/01/21 02:48:47 robf
** remove dead code
**
** Revision 1.5 1999/11/29 05:07:54 robf
** removed extraneous call CreateCompatibleDC
**
** Revision 1.4 1999/07/08 18:52:50 mwalsh
** Updated Comments
**
**-------------------------------------------------------------------------*/
 
/winlib/ptinsid.c
0,0 → 1,18
#include "windows.h"
#include "wintools.h"
 
BOOL WINAPI
PtInsideWindow(HWND hwnd,UINT x,UINT y)
{
/* Determine whether or not the position ( x, y) is contained */
/* within the control's client rectangle. */
 
RECT clientRect;
POINT buttonPoint;
 
buttonPoint.x = x;
buttonPoint.y = y;
 
GetClientRect( hwnd, &clientRect);
return PtInRect( &clientRect, buttonPoint);
}
/winlib/button.c
0,0 → 1,898
#include "windows.h"
#include "windowsx.h"
#include "wintools.h"
/*
* WINCTL Custom Control Library
* Push button Custom Control
* This control implements a custom pushbutton control.
*
* 4/8/98 g haerr original version from control palette v2.00, Blaise Computing
*/
 
#define GET_PBSTATE(h) (GetWindowWord(h, 0))
#define GET_PBCAPTURE(h) (GetWindowWord(h, 2))
#define GET_PBWASINSIDE(h) (GetWindowWord(h, 4))
#define GET_PBDELETEFONT(h) (GetWindowWord(h, 6))
#define GET_PBFONT(h) (GetWindowWord(h, 8))
 
#define SET_PBSTATE(h,x) (SetWindowWord(h, 0, x))
#define SET_PBCAPTURE(h,x) (SetWindowWord(h, 2, x))
#define SET_PBWASINSIDE(h,x) (SetWindowWord(h, 4, x))
#define SET_PBDELETEFONT(h,x) (SetWindowWord(h, 6, x))
#define SET_PBFONT(h,x) (SetWindowWord(h, 8, x))
 
#define PARENT(hwnd) ((HWND)GetWindowLong(hwnd,GWL_HWNDPARENT))
 
/* Internal state variable bit positions */
#define PUSH_UP 0x0000
#define PUSH_DOWN 0x0001 /* Button is down */
#define PUSH_FOCUS 0x0002 /* Button is focused */
#define PUSH_DISABLED 0x0004 /* Button is disabled */
#define PUSH_DEFAULT 0x0008 /* Button is currently a default */
#define PUSH_CHECKED 0x0010
 
/* Push Button states */
#define PBS_UP 0x0000 /* Normal button state. */
#define PBS_FOCUSDOWN 0x0001 /* Button pressed. */
#define PBS_FOCUSUP 0x0002 /* Focused state. */
#define PBS_DISABLED 0x0004 /* Disabled state. */
#define PBS_DEFAULT 0x0008 /* Default state. */
#define PBS_CHECKED 0x0010 /* checked state. */
 
#define WM_PAINT_SPECIAL WM_PAINT
#define HANDLE_WM_PAINT_SPECIAL(hwnd, wParam, lParam, fn) \
((fn)((hwnd),(HDC)(wParam)), 0L)
 
/* BOOL Cls_OnGetState( HWND hwnd); */
#define HANDLE_BM_GETSTATE(hwnd, wParam, lParam, fn) ((fn)(hwnd))
#define FORWARD_BM_GETSTATE(hwnd) \
(LONG)(fn)((hwnd), BM_GETSTATE, (WPARAM)0, (LPARAM)0)
 
/* void Cls_OnSetState( HWND hwnd, WORD wState); */
#define HANDLE_BM_SETSTATE( hwnd, wParam, lParam, fn) \
((fn)((hwnd), (WORD)wParam), 0)
#define FORWARD_BM_SETSTATE( hwnd, wState) \
(fn)((hwnd), BM_SETSTATE, (WPARAM)wState, (LPARAM)0)
 
/* void Cls_OnSetStyle( HWND hwnd, WORD style, BOOL bRedraw); */
#define HANDLE_BM_SETSTYLE( hwnd, wParam, lParam, fn) \
((fn)((hwnd), (WORD)wParam, (BOOL)LOWORD(lParam)), 0)
#define FORWARD_BM_SETSTYLE( hwnd, style, bRedraw, fn) \
(fn)((hwnd), BM_SETSTYLE, (WPARAM)style, MAKELPARAM(bRedraw, 0))
 
/* entry points*/
void WINAPI CheckRadioButton(HWND hDlg, int nIDFirst,int nIDLast,
int nIDCheckButton);
 
/* local procs*/
static void WINAPI cenButton_FnEnd( HWND, WORD);
static WORD WINAPI cenButton_FnStart( HWND);
static BOOL WINAPI cenButton_OnCreate( HWND, LPCREATESTRUCT);
/*static void WINAPI cenButton_OnDestroy( HWND);*/
/*static void WINAPI cenButton_OnEnable( HWND, BOOL);*/
static BOOL WINAPI cenButton_OnEraseBkgnd( HWND, HDC);
/*static UINT WINAPI cenButton_OnGetDlgCode( HWND, LPMSG);*/
static LONG WINAPI cenButton_OnGetState( HWND);
/*static void WINAPI cenButton_OnKey( HWND, UINT, BOOL, int, UINT);*/
static void WINAPI cenButton_OnKillFocus( HWND, HWND);
static void WINAPI cenButton_OnLButtonDown( HWND, BOOL, UINT, UINT, UINT);
static void WINAPI cenButton_OnLButtonUp( HWND, UINT, UINT, UINT);
static void WINAPI cenButton_OnMouseMove( HWND, UINT, UINT, UINT);
static void WINAPI cenButton_OnPaint( HWND, HDC);
static void WINAPI DrawPushButton(HWND hwnd,HDC hDCwParam,UINT wEnumState,
DWORD dwStyle);
static void WINAPI DrawGroupBox(HWND hwnd,HDC hDCwParam, DWORD dwStyle);
static void WINAPI cenButton_OnSetFocus( HWND, HWND);
static void WINAPI cenButton_OnSetStyle( HWND, WORD, BOOL);
static void WINAPI cenButton_OnSetState( HWND, WORD);
static void WINAPI cenButton_SetState( HWND, WORD, BOOL);
static void WINAPI cenButton_OnSetText( HWND, LPCSTR);
 
static void WINAPI
cenButton_FnEnd(
HWND hwnd,
WORD wState)
{
if( wState != GET_PBSTATE( hwnd)) {
if( IsWindowVisible( hwnd))
UpdateWindow( hwnd);
}
}
 
static WORD WINAPI
cenButton_FnStart(
HWND hwnd)
{
return GET_PBSTATE( hwnd);
}
 
static BOOL WINAPI
cenButton_OnCreate(
HWND hwnd,
LPCREATESTRUCT lpCreate)
{
/* Set initial states */
/*SET_PBDELETEFONT( hwnd, FALSE);*/
/*SET_PBFONT( hwnd, NULL);*/
SET_PBSTATE( hwnd, PUSH_UP );
SET_PBCAPTURE( hwnd, FALSE );
SET_PBWASINSIDE( hwnd, FALSE );
 
if ((lpCreate->style & 0x0f) == BS_DEFPUSHBUTTON)
cenButton_SetState( hwnd, PUSH_DEFAULT, TRUE );
 
if (lpCreate->style & WS_DISABLED)
cenButton_SetState( hwnd, PUSH_DISABLED, TRUE );
 
return( TRUE);
}
 
#if 0
static void WINAPI
cenButton_OnDestroy(
HWND hwnd)
{
if( GET_PBDELETEFONT( hwnd)) {
DeleteObject( GET_PBFONT( hwnd));
SET_PBDELETEFONT( hwnd, FALSE);
}
}
 
static void WINAPI
cenButton_OnEnable(
HWND hwnd,
BOOL bEnable)
{
WORD wState;
 
wState = cenButton_FnStart( hwnd);
cenButton_SetState( hwnd, PUSH_DISABLED, !bEnable);
cenButton_FnEnd( hwnd, wState);
}
#endif
 
static BOOL WINAPI
cenButton_OnEraseBkgnd(
HWND hwnd,
HDC hdc)
{
/* Background is erased at WM_PAINT time, so return TRUE*/
return TRUE;
}
 
#if 0
static UINT WINAPI
cenButton_OnGetDlgCode(
HWND hwnd,
LPMSG lpMsg)
{
/* WM_GETDLGCODE is sent by the dialog manager to find */
/* what type/style of control is responding and/or to */
/* determine what keystrokes the control wants to process */
/* itself. In this case, the pushbutton identifies itself */
/* and also indicates whether it is currently the default */
/* pushbutton. */
 
/*return( DLGC_BUTTON | ((GET_PBSTATE( hwnd) & PUSH_DEFAULT) ?
DLGC_DEFPUSHBUTTON : DLGC_UNDEFPUSHBUTTON));*/
return( DLGC_BUTTON);
}
#endif
 
static LONG WINAPI
cenButton_OnGetState(
HWND hwnd)
{
/* BM_GETSTATE is sent to enquire about the state of the */
/* control. It returns TRUE if the button is in the down */
/* state. */
 
return( ( GET_PBSTATE( hwnd) & PUSH_DOWN) == PUSH_DOWN);
}
 
#if 0
static void WINAPI
cenButton_OnKey(
HWND hwnd,
UINT vk,
BOOL bDown,
int cRepeat,
UINT flag)
{
WORD wState;
 
wState = cenButton_FnStart( hwnd);
if (bDown) {
/* WM_KEYDOWN is sent when a non-system key is pressed. */
/* If a spacebar is detected and the previous key state */
/* was up, then the control should switch to the down */
/* state. */
 
if ( (vk == ' ') && !(HIBYTE(flag) & 0x40) )
cenButton_SetState( hwnd, PUSH_DOWN, TRUE );
}
else {
/* WM_KEYUP is sent when a non-system key is released. */
/* If a space bar is detected, change to the up state. If */
/* the control is the focused control, send the BN_CLICKED */
/* notification message. */
 
if ( vk == ' ' )
{ cenButton_SetState( hwnd, PUSH_DOWN, FALSE );
 
if (GET_PBSTATE( hwnd) & PUSH_FOCUS) {
FORWARD_WM_COMMAND( PARENT( hwnd), GetDlgCtrlID( hwnd),
hwnd, BN_CLICKED, SendMessage);
if(!IsWindow(hwnd))
return;
}
}
}
cenButton_FnEnd( hwnd, wState);
}
#endif
 
static void WINAPI
cenButton_OnKillFocus(
HWND hwnd,
HWND hwndNewFocus)
{
WORD wState;
 
wState = cenButton_FnStart( hwnd);
cenButton_SetState( hwnd, PUSH_FOCUS, FALSE );
cenButton_FnEnd( hwnd, wState);
}
 
static void WINAPI
cenButton_OnLButtonDown(
HWND hwnd,
BOOL bDblClick,
UINT x,
UINT y,
UINT keyState)
{
WORD wState;
 
wState = cenButton_FnStart( hwnd);
/* capture the mouse*/
SetCapture( hwnd );
/* set focus to ourself*/
SetFocus( hwnd );
SET_PBCAPTURE( hwnd, TRUE );
SET_PBWASINSIDE( hwnd, TRUE );
/* set down state*/
cenButton_SetState( hwnd, PUSH_DOWN, TRUE );
cenButton_FnEnd( hwnd, wState);
}
 
static void WINAPI
cenButton_OnLButtonUp(
HWND hwnd,
UINT x,
UINT y,
UINT keys)
{
WORD wState;
DWORD dwStyle;
dwStyle = GetWindowLong(hwnd, GWL_STYLE);
wState = cenButton_FnStart( hwnd);
 
/* only draw up state if we captured mouse*/
if(GetCapture() == hwnd)
cenButton_SetState( hwnd, PUSH_DOWN, FALSE );
/* release mouse capture*/
ReleaseCapture();
 
/* if cursor is inside control, send clicked notification to parent*/
if (GET_PBWASINSIDE( hwnd)) {
switch((int)(dwStyle & 0x0f)) {
case BS_AUTOCHECKBOX:
SendMessage(hwnd,BM_SETCHECK,(wState & PBS_CHECKED)?0:1,0L);
break;
case BS_AUTORADIOBUTTON:
CheckRadioButton(PARENT(hwnd),0,0xffff,hwnd->id);
break;
}
FORWARD_WM_COMMAND( PARENT( hwnd), GetDlgCtrlID( hwnd), hwnd,
BN_CLICKED, SendMessage);
if(!IsWindow(hwnd))
return;
}
 
SET_PBCAPTURE( hwnd, FALSE );
SET_PBWASINSIDE( hwnd, FALSE );
cenButton_FnEnd( hwnd, wState);
}
 
static void WINAPI
cenButton_OnMouseMove(
HWND hwnd,
UINT x,
UINT y,
UINT keys)
{
/* WM_MOUSEMOVE is sent at every discernable mouse */
/* movement. It is necessary to detect this because if */
/* the mouse has been captured (because of a button down */
/* message), the location of the cursor needs to be */
/* tracked. If it moves out of the confines of the */
/* control, the control should change to the focus/up */
/* state (and retain capture.) If the cursor then moves */
/* back into the control, change back to the down state. */
 
WORD wState;
DWORD dwStyle;
 
wState = cenButton_FnStart( hwnd);
dwStyle = GetWindowLong(hwnd, GWL_STYLE);
if( GET_PBCAPTURE( hwnd)) {
if( !PtInsideWindow( hwnd, x, y) ) {
if( GET_PBWASINSIDE( hwnd)) {
cenButton_SetState( hwnd, PUSH_DOWN, FALSE);
SET_PBWASINSIDE( hwnd, FALSE );
}
} else {
if( !GET_PBWASINSIDE( hwnd) ) {
cenButton_SetState( hwnd, PUSH_DOWN, TRUE );
SET_PBWASINSIDE( hwnd, TRUE );
}
}
}
cenButton_FnEnd( hwnd, wState);
}
 
static void WINAPI
cenButton_OnPaint(
HWND hwnd,
HDC hDCwParam)
{
UINT wEnumState;
DWORD dwStyle;
 
if( GET_PBSTATE( hwnd) & PUSH_DISABLED)
wEnumState = PBS_DISABLED;
else if( GET_PBSTATE( hwnd) & PUSH_DOWN)
wEnumState = PBS_FOCUSDOWN;
else if( GET_PBSTATE( hwnd) & PUSH_CHECKED)
wEnumState = PBS_CHECKED;
else
{
if( GET_PBSTATE( hwnd) & PUSH_FOCUS)
wEnumState = PBS_FOCUSUP;
else
wEnumState = PBS_UP;
if( GET_PBSTATE( hwnd) & PUSH_DEFAULT)
wEnumState |= PBS_DEFAULT;
}
 
/* common draw code for button and checkbox*/
dwStyle = GetWindowLong(hwnd, GWL_STYLE);
switch((int)(dwStyle & 0x0f)) {
case BS_GROUPBOX:
DrawGroupBox( hwnd, hDCwParam, dwStyle);
break;
default:
DrawPushButton( hwnd, hDCwParam, wEnumState, dwStyle);
}
}
 
static void WINAPI
DrawPushButton(HWND hwnd,HDC hDCwParam,UINT wEnumState,DWORD dwStyle)
{
HDC hdc;
HBRUSH hNewBrush;
RECT rect;
RECT rectClient;
RECT rectSave;
RECT rc;
int iFaceOffset = 0;
INT uiHeight;
INT uiWidth;
COLORREF crOld;
COLORREF crBkOld;
int oldBkMode;
HFONT hNewFont;
HFONT hOldFont;
HPEN hOldPen;
COLORREF hOldColor;
PAINTSTRUCT ps;
char buf[256];
#define uiWidthFrame 0
#define uiWidthShadow 2
 
hdc = BeginPaint(hwnd, &ps);
if(!hdc)
goto Return;
 
GetWindowText(hwnd, buf, sizeof(buf));
GetClientRect( hwnd, &rectClient );
uiWidth = rectClient.right - rectClient.left;
uiHeight = rectClient.bottom - rectClient.top;
 
hNewBrush = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
crOld = SetTextColor( hdc, GetSysColor( COLOR_BTNTEXT));
crBkOld = SetBkColor( hdc, GetSysColor( COLOR_BTNFACE));
 
rc = rectClient;
switch((int)(dwStyle & 0x0f)) {
case BS_PUSHBUTTON:
case BS_DEFPUSHBUTTON:
if( wEnumState & PBS_FOCUSDOWN) {
Draw3dBox(hdc, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top,
GetSysColor(COLOR_WINDOWFRAME), GetSysColor(COLOR_WINDOWFRAME));
InsetR(&rc, 1, 1);
Draw3dBox(hdc, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top,
GetSysColor(COLOR_BTNSHADOW), GetSysColor(COLOR_BTNSHADOW));
InsetR(&rc, 1, 1);
FastFillRect(hdc, &rc, GetSysColor(COLOR_BTNFACE));
iFaceOffset = 1;
} else {
if(wEnumState & PBS_DEFAULT) {
Draw3dBox(hdc, rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top,
GetSysColor(COLOR_WINDOWFRAME),
GetSysColor(COLOR_WINDOWFRAME));
InsetR(&rc, 1, 1);
}
Draw3dBox(hdc, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top,
GetSysColor(COLOR_BTNHIGHLIGHT),GetSysColor(COLOR_WINDOWFRAME));
InsetR(&rc, 1, 1);
Draw3dBox(hdc, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top,
GetSysColor(COLOR_3DLIGHT), GetSysColor(COLOR_BTNSHADOW));
InsetR(&rc, 1, 1);
FastFillRect(hdc, &rc, GetSysColor(COLOR_BTNFACE));
iFaceOffset = 0;
}
break;
 
case BS_CHECKBOX:
case BS_AUTOCHECKBOX:
FastFillRect(hdc, &rc, GetSysColor(COLOR_BTNFACE));
/*rc.left += 2;*/
/*rc.top += 2;*/
rc.right = rc.left + 12;
rc.bottom = rc.top + 12;
/*Draw3dBox(hdc, rc.left, rc.top, 8, 8,
GetSysColor(COLOR_BTNSHADOW), GetSysColor(COLOR_3DLIGHT));*/
Draw3dInset(hdc, rc.left, rc.top, 12, 12);
InsetR(&rc, 2, 2);
FastFillRect(hdc, &rc, GetSysColor(COLOR_BTNHIGHLIGHT));
iFaceOffset = 1;
if(wEnumState & PBS_CHECKED) {
MoveToEx(hdc, rc.left, rc.top,NULL);
LineTo(hdc, rc.right, rc.bottom);
MoveToEx(hdc, rc.left, rc.bottom,NULL);
LineTo(hdc, rc.right, rc.top);
}
break;
 
case BS_AUTORADIOBUTTON:
case BS_RADIOBUTTON:
FastFillRect(hdc, &rc, GetSysColor(COLOR_BTNFACE));
rc.left = 0;
rc.top += 1;
rc.right = rc.left + 10;
rc.bottom = rc.top + 10;
 
SelectObject(hdc, GetStockObject(NULL_BRUSH));
hOldPen = SelectObject(hdc, CreatePen(PS_SOLID, 1,
GetSysColor(COLOR_BTNSHADOW)));
SelectObject(hdc, GetStockObject(WHITE_BRUSH));
Ellipse(hdc,rc.left,rc.top, rc.right,rc.bottom);
InsetR(&rc, 1, 1);
 
SelectObject(hdc, GetStockObject(WHITE_BRUSH));
DeleteObject(SelectObject(hdc,
CreatePen(PS_SOLID, 1,GetSysColor(COLOR_WINDOWFRAME))));
Ellipse(hdc,rc.left,rc.top, rc.right,rc.bottom);
DeleteObject(SelectObject(hdc, hOldPen));
 
iFaceOffset = 0;
if(wEnumState & PBS_CHECKED)
Ellipse(hdc, rc.left+2, rc.top+2, rc.right-2,
rc.bottom-2);
break;
}
 
/*
* draw text
*/
if(buf[ 0]) {
hNewFont = GetStockObject( DEFAULT_GUI_FONT);
hOldFont = SelectObject( hdc, hNewFont);
 
/* calculate text bounding rect*/
rect.left = 0;
rect.top = 0;
DrawText( hdc, buf, -1, &rect, DT_CALCRECT | DT_LEFT |
DT_SINGLELINE | DT_TOP);
rectSave = rect;
 
/*
* calculate text draw location
*/
switch((int)(dwStyle & (BS_LEFT|BS_CENTER|BS_RIGHT))) {
case BS_CENTER:
default:
rect.left = (uiWidth - (rect.right - rect.left)) / 2
+ iFaceOffset;
break;
case BS_LEFT:
rect.left = uiWidthFrame + uiWidthShadow + 2
+ iFaceOffset;
break;
case BS_RIGHT:
rect.left = (rect.right - rect.left) + uiWidthFrame
+ uiWidthShadow + 4 + iFaceOffset;
break;
}
 
switch((int)(dwStyle & 0x0f)) {
case BS_CHECKBOX:
case BS_AUTOCHECKBOX:
case BS_AUTORADIOBUTTON:
case BS_RADIOBUTTON:
rect.left = 12;
break;
}
 
rect.right += rect.left - rectSave.left;
 
switch((int)(dwStyle & (BS_TOP|BS_VCENTER|BS_BOTTOM))) {
case BS_VCENTER:
default:
rect.top = (uiHeight - (rect.bottom - rect.top)) / 2
+ iFaceOffset;
break;
case BS_TOP:
rect.top = 2 + uiWidthFrame + uiWidthShadow
+ iFaceOffset;
break;
case BS_BOTTOM:
rect.top = uiHeight - uiWidthFrame - uiWidthShadow -
(rect.bottom - rect.top) - 1 + iFaceOffset;
break;
}
switch((int)(dwStyle & 0x0f)) {
case BS_CHECKBOX:
case BS_AUTOCHECKBOX:
case BS_AUTORADIOBUTTON:
case BS_RADIOBUTTON:
rect.top = 0;
break;
}
rect.bottom += rect.top - rectSave.top;
 
oldBkMode = SetBkMode( hdc, TRANSPARENT);
if(wEnumState & PBS_DISABLED)
hOldColor = SetTextColor( hdc,
GetSysColor( COLOR_GRAYTEXT));
else
hOldColor = SetTextColor( hdc,
GetSysColor( COLOR_BTNTEXT));
 
DrawText( hdc, buf, -1, &rect,DT_LEFT | DT_SINGLELINE | DT_TOP);
 
SetBkMode( hdc, oldBkMode);
SetTextColor( hdc, hOldColor);
SelectObject( hdc, hOldFont);
}
 
#if 0
if( (!(wEnumState&PBS_CHECKED) && (wEnumState&PBS_FOCUSDOWN)) ||
(wEnumState & PBS_FOCUSUP)) {
rect = rectClient;
uiWidth = uiWidthFrame + uiWidthShadow + 2;
rect.left += uiWidth;
rect.top += uiWidth;
rect.right -= uiWidth;
rect.bottom -= uiWidth;
if((dwStyle & (BS_FLAT|BS_NOFOCUSRECT)) == 0)
DrawFocusRect( hdc, &rect);
}
#endif
 
SetTextColor( hdc, crOld);
SetBkColor( hdc, crBkOld);
 
Return:
EndPaint(hwnd, &ps);
}
 
static void WINAPI
cenButton_OnSetFocus(
HWND hwnd,
HWND hwndOldFocus)
{
/* WM_SETFOCUS is sent when the user clicks on the control */
/* or when the dialog manager determines that a keystroke */
/* should cause the control to be focused. This affects */
/* the appearance of the control so the state is saved for */
/* future drawing. */
 
WORD wState;
 
wState = cenButton_FnStart( hwnd);
/*if(!IsWindowEnabled(hwnd))
cenButton_SetState( hwnd, PUSH_FOCUS, TRUE );*/
cenButton_FnEnd( hwnd, wState);
}
 
static void WINAPI
cenButton_OnSetStyle(
HWND hwnd,
WORD style,
BOOL bRedraw)
{
WORD wState;
 
wState = cenButton_FnStart( hwnd);
cenButton_SetState( hwnd, PUSH_DEFAULT,
(style & 0x0f) == BS_DEFPUSHBUTTON);
cenButton_FnEnd( hwnd, wState);
}
 
static void WINAPI
cenButton_OnSetState(
HWND hwnd,
WORD wState)
{
WORD wStateOld;
 
wStateOld = cenButton_FnStart( hwnd);
cenButton_SetState( hwnd, PUSH_DOWN, (wState ? TRUE : FALSE ) );
cenButton_FnEnd( hwnd, wStateOld);
}
 
static void WINAPI
cenButton_SetState(
HWND hwnd,
WORD wState,
BOOL bEnable )
{
/* Turn on/off state bits according to the bEnable flag. If the */
/* new state is different, invalidate the client window so that */
/* the proper bitmap is displayed. */
 
WORD wNewState;
WORD wOldState;
RECT rectClient;
 
wOldState = GET_PBSTATE( hwnd);
wNewState = (bEnable ? (wOldState | wState) : (wOldState & ~wState));
 
if (wOldState != wNewState)
{ SET_PBSTATE( hwnd, wNewState );
GetClientRect(hwnd, &rectClient);
InvalidateRect(hwnd, &rectClient, FALSE);
}
}
 
#if 0
static void WINAPI
cenButton_OnSetFont(
HWND hwnd,
HFONT hFont,
BOOL bRedraw)
{
BOOL bDeleteFont = FALSE;
HFONT hFontNew = 0;
LOGFONT logFont;
 
/* create a thin font*/
if( GetObject( hFont, sizeof( logFont), &logFont) != 0) {
if( logFont.lfWeight != FW_NORMAL) {
logFont.lfWeight = FW_NORMAL;
if( ( hFontNew = CreateFontIndirect( &logFont)) != 0) {
hFont = hFontNew;
bDeleteFont = TRUE;
}
}
}
 
if( GET_PBDELETEFONT( hwnd))
DeleteObject( GET_PBFONT( hwnd));
 
SET_PBDELETEFONT( hwnd, bDeleteFont);
SET_PBFONT( hwnd, hFont);
 
FORWARD_WM_SETFONT( hwnd, hFont, bRedraw, DefWindowProc);
}
#endif
 
static void WINAPI
cenButton_OnSetText(
HWND hwnd,
LPCSTR lpszText)
{
/* WM_SETTEXT is sent to change the text of the button */
/* control. In this case we allow the default window proc */
/* to handle the message first. But this only affects the */
/* internal Windows data structure of the control, it does */
/* not display the change. To do this we invalidate and */
/* update the client area of the control which displays */
/* the new text. */
 
FORWARD_WM_SETTEXT( hwnd, lpszText, DefWindowProc);
InvalidateRect( hwnd, NULL, FALSE);
UpdateWindow( hwnd);
}
 
LRESULT CALLBACK
cenButtonWndFn(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
/* This is the window proc for the pushbutton control. Most of */
/* the drawing is accomplished in the DrawPushButton() function. */
/* The code below is mainly concerned with the keyboard and mouse */
/* events that the control detects. */
 
switch( message) {
HANDLE_MSG( hwnd, WM_CREATE, cenButton_OnCreate);
/*HANDLE_MSG( hwnd, WM_ENABLE, cenButton_OnEnable);*/
HANDLE_MSG( hwnd, WM_SETFOCUS, cenButton_OnSetFocus);
HANDLE_MSG( hwnd, WM_KILLFOCUS, cenButton_OnKillFocus);
HANDLE_MSG( hwnd, WM_LBUTTONDOWN, cenButton_OnLButtonDown);
HANDLE_MSG( hwnd, WM_LBUTTONDBLCLK, cenButton_OnLButtonDown);
HANDLE_MSG( hwnd, WM_LBUTTONUP, cenButton_OnLButtonUp);
HANDLE_MSG( hwnd, WM_MOUSEMOVE, cenButton_OnMouseMove);
/*HANDLE_MSG( hwnd, WM_KEYDOWN, cenButton_OnKey);*/
/*HANDLE_MSG( hwnd, WM_KEYUP, cenButton_OnKey);*/
HANDLE_MSG( hwnd, WM_ERASEBKGND, cenButton_OnEraseBkgnd);
HANDLE_MSG( hwnd, WM_PAINT_SPECIAL, cenButton_OnPaint);
/*HANDLE_MSG( hwnd, WM_GETDLGCODE, cenButton_OnGetDlgCode);*/
HANDLE_MSG( hwnd, BM_SETSTYLE, cenButton_OnSetStyle);
HANDLE_MSG( hwnd, BM_GETSTATE, cenButton_OnGetState);
HANDLE_MSG( hwnd, BM_SETSTATE, cenButton_OnSetState);
/*HANDLE_MSG( hwnd, WM_DESTROY, cenButton_OnDestroy);*/
/*HANDLE_MSG( hwnd, WM_SETFONT, cenButton_OnSetFont);*/
HANDLE_MSG( hwnd, WM_SETTEXT, cenButton_OnSetText);
 
case BM_GETCHECK:
#if 0
return cenButton_OnGetState(hwnd);
#else
return( ( GET_PBSTATE(hwnd) & PUSH_CHECKED) == PUSH_CHECKED);
#endif
 
case BM_SETCHECK:
#if 0
cenButton_OnSetState(hwnd, (WORD)wParam);
#else
{
WORD wStateOld;
 
wStateOld = cenButton_FnStart( hwnd);
cenButton_SetState( hwnd, PUSH_CHECKED,
((WORD)wParam ? TRUE : FALSE) );
cenButton_FnEnd( hwnd, wStateOld);
}
#endif
return 0;
}
 
return DefWindowProc( hwnd, message, wParam, lParam);
}
 
/* backwards compatibility*/
int WINAPI
MwButtonRegister(HINSTANCE hInstance)
{
return MwRegisterButtonControl(hInstance);
}
 
int WINAPI
MwRegisterButtonControl(HINSTANCE hInstance)
{
WNDCLASS wc;
 
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_GLOBALCLASS;
wc.lpfnWndProc = (WNDPROC)cenButtonWndFn;
wc.cbClsExtra = 0;
wc.cbWndExtra = 10;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = 0; /*LoadCursor(NULL, IDC_ARROW);*/
wc.hbrBackground= GetStockObject(LTGRAY_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName= "BUTTON";
 
return RegisterClass(&wc);
}
 
static void WINAPI
DrawGroupBox(HWND hwnd,HDC hDCwParam,DWORD dwStyle)
{
HDC hdc;
HFONT hFont;
RECT rcClient;
RECT rcText;
RECT rc;
PAINTSTRUCT ps;
char buf[256];
HPEN hPenTop, hPenBottom, holdPen;
COLORREF crTop,crBottom;
 
 
hdc = BeginPaint(hwnd, &ps);
if(!hdc)
goto Return;
 
GetWindowText(hwnd, buf, sizeof(buf));
GetClientRect( hwnd, &rcClient );
 
hFont = GetStockObject( DEFAULT_GUI_FONT);
if (hFont)
hFont = SelectObject(hdc,hFont);
 
rc.left = 0;
rc.top = 0;
DrawText( hdc, buf, -1, &rc, DT_CALCRECT);
 
if(buf[ 0]) {
SetTextColor(hdc,GetSysColor(COLOR_WINDOWTEXT));
SetBkMode(hdc,TRANSPARENT);
SetRect(&rcText,8,2,rc.right+8,rc.bottom+2);
DrawText(hdc,buf,-1,&rcText,DT_CENTER);
}
 
crTop=GetSysColor(COLOR_BTNHIGHLIGHT);
crBottom=GetSysColor(COLOR_BTNSHADOW);
 
hPenTop = CreatePen( PS_SOLID, 1, crTop);
hPenBottom = CreatePen( PS_SOLID, 1, crBottom);
holdPen = SelectObject( hdc, hPenTop);
 
MoveToEx(hdc,0,rc.bottom/2,NULL);
 
if(buf[ 0]) {
LineTo(hdc,5,rc.bottom/2);
MoveToEx(hdc,rc.right+11,rc.bottom/2,NULL);
LineTo(hdc,rcClient.right-1,rc.bottom/2);
}
else
LineTo(hdc,rcClient.right-1,rc.bottom/2);
 
LineTo(hdc,rcClient.right-1,rcClient.bottom-1);
 
SelectObject( hdc, hPenBottom);
LineTo(hdc,rcClient.left,rcClient.bottom-1);
LineTo(hdc,rcClient.left,rc.bottom/2);
 
SelectObject( hdc, holdPen);
DeleteObject( hPenTop);
DeleteObject( hPenBottom);
 
if (hFont)
SelectObject(hdc,hFont);
 
Return:
EndPaint(hwnd, &ps);
}
 
/* temporarily here, should move to winuser.c*/
void WINAPI
CheckRadioButton(HWND hDlg, int nIDFirst,int nIDLast,int nIDCheckButton)
{
HWND hWndCheck,hWndTemp;
DWORD dwStyle;
 
if (!(hWndCheck = GetDlgItem(hDlg,nIDCheckButton)))
return;
 
for(hWndTemp=hDlg->children; hWndTemp; hWndTemp=hWndTemp->siblings) {
if(hWndCheck == hWndTemp) continue;
dwStyle = GetWindowLong(hWndTemp,GWL_STYLE);
if ((hWndTemp->id >= (WORD)nIDFirst) &&
(hWndTemp->id <= (WORD)nIDLast) &&
((LOWORD(dwStyle) == BS_RADIOBUTTON) ||
(LOWORD(dwStyle) == BS_AUTORADIOBUTTON)))
SendMessage(hWndTemp,BM_SETCHECK,FALSE,0);
}
SendMessage(hWndCheck,BM_SETCHECK,TRUE,0);
}
/winlib/mwuser.c
0,0 → 1,7
#include "windows.h"
 
int
MwUserInit(int ac,char **av)
{
return 0;
}
/winlib/draw3d.c
0,0 → 1,144
#include "windows.h"
#include "wintools.h"
/*
* WIN Draw Library
* Draw3dShadow - draws a shadow with bottom-left and top-right missing
* Draw3dBox - draws a complete shadow
* Draw3dInset - draw a 2 line 3d inset
* Draw3dOutset - draw a 2 line 3d outset
*/
 
/*
* Draw3dShadow
* NOINDENT_BLACK T=white, B=black
* NOINDENT_GRAY T=white, B=dkgray
* INDENT_BLACK T=black, B=white
* INDENT_GRAY T=dkgray, B=white
*
* TTTTTTTTTTTTTT
* T B
* T B
* BBBBBBBBBBBBBB
*/
void WINAPI
Draw3dShadow(HDC hDC,int x,int y,int w,int h,COLORREF crTop,COLORREF crBottom)
{
HPEN hPenTop, hPenBottom, holdPen;
 
hPenTop = CreatePen( PS_SOLID, 1, crTop);
hPenBottom = CreatePen( PS_SOLID, 1, crBottom);
holdPen = SelectObject( hDC, hPenTop);
MoveToEx( hDC, x, y+h-2, NULL);
LineTo( hDC, x, y); /* left side*/
LineTo( hDC, x+w-1, y); /* top side*/
 
SelectObject( hDC, hPenBottom);
MoveToEx( hDC, x+w-1, y+1, NULL);
LineTo( hDC, x+w-1, y+h-1); /* right side*/
LineTo( hDC, x, y+h-1); /* bottom side*/
 
SelectObject( hDC, holdPen);
DeleteObject( hPenTop);
DeleteObject( hPenBottom);
}
 
/*
* Draw3dBox
*
* TTTTTTTTTTTTTTB
* T B
* T B
* BBBBBBBBBBBBBBB
*/
void WINAPI
Draw3dBox(HDC hDC,int x,int y,int w,int h,COLORREF crTop,COLORREF crBottom)
{
HPEN hPenTop, hPenBottom, holdPen;
 
hPenTop = CreatePen( PS_SOLID, 1, crTop);
hPenBottom = CreatePen( PS_SOLID, 1, crBottom);
holdPen = SelectObject( hDC, hPenTop);
MoveToEx( hDC, x, y+h-2, NULL);
LineTo( hDC, x, y); /* left side*/
MoveToEx( hDC, x, y, NULL);
LineTo( hDC, x+w-1, y); /* top side*/
 
SelectObject( hDC, hPenBottom);
MoveToEx( hDC, x+w-1, y, NULL);
LineTo( hDC, x+w-1, y+h-1); /* right side*/
LineTo( hDC, x-1, y+h-1); /* bottom side*/
 
SelectObject( hDC, holdPen);
DeleteObject( hPenTop);
DeleteObject( hPenBottom);
}
 
/*
* Draw 2 line deep 3d inset
*/
void WINAPI
Draw3dInset(HDC hDC,int x,int y,int w,int h)
{
Draw3dBox(hDC, x, y, w, h,
GetSysColor(COLOR_BTNSHADOW), GetSysColor(COLOR_BTNHIGHLIGHT));
++x; ++y; w -= 2; h -= 2;
Draw3dBox(hDC, x, y, w, h,
GetSysColor(COLOR_WINDOWFRAME), GetSysColor(COLOR_3DLIGHT));
}
 
/*
* Draw 2 line deep 3d outset
*/
void WINAPI
Draw3dOutset(HDC hDC,int x,int y,int w,int h)
{
Draw3dBox(hDC, x, y, w, h,
GetSysColor(COLOR_3DLIGHT), GetSysColor(COLOR_WINDOWFRAME));
++x; ++y; w -= 2; h -= 2;
Draw3dBox(hDC, x, y, w, h,
GetSysColor(COLOR_BTNHIGHLIGHT), GetSysColor(COLOR_BTNSHADOW));
}
 
/*
* Draw 1 line pushed down rectangle
*/
void WINAPI
Draw3dPushDown(HDC hDC, int x, int y, int w, int h)
{
Draw3dBox(hDC, x, y, w, h, GetSysColor(COLOR_BTNSHADOW),
GetSysColor(COLOR_BTNSHADOW));
}
 
/*
* Draw either 3d up or down depending on state
*/
void WINAPI
Draw3dUpDownState(HDC hDC, int x, int y, int w, int h, BOOL fDown)
{
if (fDown)
Draw3dPushDown(hDC, x, y, w, h);
else Draw3dOutset(hDC, x, y, w, h);
}
 
void WINAPI
Draw3dUpFrame(HDC hDC, int l, int t, int r, int b)
{
RECT rc;
HBRUSH hbr;
 
SetRect(&rc, l, t, r, b);
Draw3dBox(hDC, rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top,
GetSysColor(COLOR_3DLIGHT),
GetSysColor(COLOR_WINDOWFRAME));
InflateRect(&rc, -1, -1);
Draw3dBox(hDC, rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top,
GetSysColor(COLOR_BTNHIGHLIGHT),
GetSysColor(COLOR_BTNSHADOW));
InflateRect(&rc, -1, -1);
 
hbr = CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
FillRect(hDC, &rc, hbr);
DeleteObject(hbr);
}
/winlib/listbox.c
0,0 → 1,1688
/*
* Copyright (C) 1999, 2000, Wei Yongming.
* Portions Copyright (c) 2000 Greg Haerr <greg@censoft.com>
*
* Listbox for Microwindows win32 api.
*/
 
/*
** This library is free software; you can redistribute it and/or
** modify it under the terms of the GNU Library General Public
** License as published by the Free Software Foundation; either
** version 2 of the License, or (at your option) any later version.
**
** This library is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
** Library General Public License for more details.
**
** You should have received a copy of the GNU Library General Public
** License along with this library; if not, write to the Free
** Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
** MA 02111-1307, USA
*/
 
/*
** Alternatively, the contents of this file may be used under the terms
** of the Mozilla Public License (the "MPL License") in which case the
** provisions of the MPL License are applicable instead of those above.
*/
 
/* Note:
** Although there was a version by Zhao Jianghua, this version of
** LISTBOX control is written by Wei Yongming from scratch.
**
** Modify records:
**
** Who When Where For What Status
**-----------------------------------------------------------------------------
** Wei Yongming 1999/10/18 Tsinghua Item Additional Data Finished
** Wei Yongming 1999/10/31 Tsinghua Space bar for checkmark Finished
** Wei Yongming 1999/10/31 Tsinghua Character match item Finished
** Wei Yongming 1999/11/07 Tsinghua Character match item Bug fixing
** WEI Yongming 2000/01/20 Tsinghua Thumb dragging Finished
** WEI Yongming 2000/02/24 Tsinghua Add MPL License Finished
** Kevin Tseng 2000/05/26 gv port to microwin ported
** Greg Haerr 2000/06/15 Utah 3d look, bug fixes Finished
** Kevin Tseng 2000/06/22 gv port to mw-nanox ported
** Kevin Tseng 2000/06/22 gv fixed bug if no item Finished
** Kevin Tseng 2000/08/08 gv enable scrollbar(V) porting
** Kevin Tseng 2000/08/10 gv enable scrollbar(V) ported
** Kevin Tseng 2000/08/10 gv WM_CHAR, WM_KEYDOWN ported
**
** TODO:
** 1. Multiple columns support.
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MWINCLUDECOLORS
#include "windows.h"
#include "wintools.h" /* Draw3dBox */
#include "device.h" /* GdGetTextSize */
 
#define FixStrAlloc(n) malloc((n)+1)
#define FreeFixStr(p) free(p)
 
#define LBIF_NORMAL 0x0000L
#define LBIF_SELECTED 0x0001L
#define LBIF_CHECKED 0x0010L
#define LBIF_PARTCHECKED 0x0020L
#define LBIF_CHECKMARKMASK 0x00F0L
 
#define CMFLAG_BLANK 0
#define CMFLAG_CHECKED 1
#define CMFLAG_PARTCHECKED 2
typedef struct _LISTBOXITEMINFO {
int insPos; /* insert position */
char* string; /* item string */
int cmFlag; /* check mark flag */
HICON hIcon; /* handle of icon */
} LISTBOXITEMINFO, *PLISTBOXITEMINFO;
 
typedef struct _LISTBOXITEM {
char* key; /* item sort key */
DWORD dwFlags; /* item flags */
DWORD dwData; /* item data */
DWORD dwAddData; /* item additional data */
struct _LISTBOXITEM* next; /* next item */
} LISTBOXITEM, *PLISTBOXITEM;
 
#define DEF_LB_BUFFER_LEN 5
 
#define LBF_FOCUS 0x0001
#define LBF_NOTHINGSELECTED 0x0002
 
typedef struct _LISTBOXDATA {
DWORD dwFlags; /* listbox flags */
 
int itemCount; /* items count */
int itemTop; /* start display item */
int itemVisibles; /* number of visible items */
 
int itemHilighted; /* current hilighted item */
int itemHeight; /* item height */
 
LISTBOXITEM* head; /* items linked list head */
 
int buffLen; /* buffer length */
LISTBOXITEM* buffStart; /* buffer start */
LISTBOXITEM* buffEnd; /* buffer end */
LISTBOXITEM* freeList; /* free list in buffer */
} LISTBOXDATA, *PLISTBOXDATA;
 
void ListboxControlCleanup ();
static LRESULT CALLBACK
ListboxCtrlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
 
#define ITEM_BOTTOM(x) (x->itemTop + x->itemVisibles - 1)
 
#define LST_WIDTH_CHECKMARK 11
#define LST_HEIGHT_CHECKMARK 11
#define LST_INTER_BMPTEXT 2
 
int WINAPI MwRegisterListboxControl(HINSTANCE hInstance)
{
WNDCLASS wc;
#if 0
static BITMAP sg_bmpCheckMark;
if (!LoadSystemBitmap (&sg_bmpCheckMark, "checkmark")) {
fprintf (stderr, "Load ListBox Check Mark Bitmap failure!\n");
return FALSE;
}
#endif
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_GLOBALCLASS;
wc.lpfnWndProc = (WNDPROC)ListboxCtrlProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = 0; /*LoadCursor(NULL, IDC_ARROW);*/
wc.hbrBackground= GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName= "LISTBOX";
 
return RegisterClass(&wc);
}
 
void ListboxControlCleanup ()
{
#if 0
UnloadBitmap (&sg_bmpCheckMark);
#endif
}
 
static LRESULT NotifyParent (HWND hwnd, int id, int code)
{
return SendMessage (GetParent (hwnd), WM_COMMAND,
(WPARAM) MAKELONG (id, code), (LPARAM)hwnd);
}
 
static BOOL lstInitListBoxData (HWND hwnd,LISTBOXDATA* pData, int len)
{
int i, xw, xh, xb;
PLISTBOXITEM plbi;
HDC hdc;
memset (pData, 0, sizeof (LISTBOXDATA));
#if 0
pData->itemHeight = GetSysCharHeight ();
#else
hdc=GetDC(hwnd);
#if MWCLIENT /* nanox client */
GrSetGCFont(hdc->gc,hdc->font->fontid);
GrGetGCTextSize(hdc->gc,"X",1,
MWTF_ASCII,&xw,&xh,&xb);
#else
GdSetFont(hdc->font->pfont);
GdGetTextSize(hdc->font->pfont,"X",1,
&xw,&xh,&xb,MWTF_ASCII);
#endif
ReleaseDC(hwnd,hdc);
pData->itemHeight=xh + 1;
#endif
pData->itemHilighted = 0;
pData->dwFlags = LBF_NOTHINGSELECTED;
 
/* init item buffer. */
if (!(pData->buffStart = malloc (len * sizeof (LISTBOXITEM))))
return FALSE;
 
pData->buffLen = len;
pData->buffEnd = pData->buffStart + len;
pData->freeList = pData->buffStart;
 
plbi = pData->freeList;
for (i = 0; i < len - 1; i++) {
plbi->next = plbi + 1;
plbi ++;
}
plbi->next = NULL;
 
return TRUE;
}
 
static void lstListBoxCleanUp (LISTBOXDATA* pData)
{
PLISTBOXITEM plbi;
PLISTBOXITEM next;
 
plbi = pData->head;
while (plbi) {
FreeFixStr (plbi->key);
next = plbi->next;
if (plbi < pData->buffStart || plbi > pData->buffEnd)
free (plbi);
 
plbi = next;
}
free (pData->buffStart);
}
 
static void lstResetListBoxContent (PLISTBOXDATA pData)
{
int i;
PLISTBOXITEM plbi, next;
 
pData->itemCount = 0;
pData->itemTop = 0;
pData->itemHilighted = 0;
#if 0
pData->itemVisibles = 0;
#endif
 
plbi = pData->head;
while (plbi) {
FreeFixStr (plbi->key);
next = plbi->next;
if (plbi < pData->buffStart || plbi > pData->buffEnd)
free (plbi);
 
plbi = next;
}
 
pData->head = NULL;
pData->freeList = pData->buffStart;
 
plbi = pData->freeList;
for (i = 0; i < pData->buffLen - 1; i++) {
plbi->next = plbi + 1;
plbi ++;
}
plbi->next = NULL;
}
 
static PLISTBOXITEM lstAllocItem (PLISTBOXDATA pData)
{
PLISTBOXITEM plbi;
 
if (pData->freeList) {
plbi = pData->freeList;
pData->freeList = plbi->next;
}
else
plbi = (PLISTBOXITEM) malloc (sizeof (LISTBOXITEM));
return plbi;
}
 
static void lstFreeItem (PLISTBOXDATA pData, PLISTBOXITEM plbi)
{
if (plbi < pData->buffStart || plbi > pData->buffEnd)
free (plbi);
else {
plbi->next = pData->freeList;
pData->freeList = plbi;
}
}
 
static int lstAddNewItem (DWORD dwStyle,
PLISTBOXDATA pData, PLISTBOXITEM newItem, int pos)
{
PLISTBOXITEM plbi;
PLISTBOXITEM insPosItem = NULL;
int insPos = 0;
 
newItem->next = NULL;
if (!pData->head)
insPosItem = NULL;
else if (dwStyle & LBS_SORT) {
plbi = pData->head;
 
if (strcmp (newItem->key, plbi->key) < 0) {
insPosItem = NULL;
insPos = 0;
}
else {
while (plbi->next) {
if (strcmp (newItem->key, plbi->next->key) <= 0)
break;
plbi = plbi->next;
insPos ++;
}
insPosItem = plbi;
}
}
else {
plbi = pData->head;
 
if (pos < 0) {
while (plbi->next) {
plbi = plbi->next;
insPos ++;
}
insPosItem = plbi;
}
else if (pos > 0) {
int index = 0;
 
while (plbi->next) {
if (pos == index)
break;
plbi = plbi->next;
index ++;
insPos ++;
}
insPosItem = plbi;
}
}
 
if (insPosItem) {
plbi = insPosItem->next;
insPosItem->next = newItem;
newItem->next = plbi;
 
insPos ++;
}
else {
plbi = pData->head;
pData->head = newItem;
newItem->next = plbi;
}
 
pData->itemCount ++;
return insPos;
}
 
static PLISTBOXITEM lstRemoveItem (PLISTBOXDATA pData, int* pos)
{
int index = 0;
PLISTBOXITEM plbi, prev;
 
if (!pData->head)
return NULL;
 
if (*pos < 0) {
prev = pData->head;
plbi = pData->head;
while (plbi->next) {
prev = plbi;
plbi = plbi->next;
index ++;
}
 
if (plbi == pData->head) {
pData->head = pData->head->next;
*pos = 0;
return plbi;
}
else {
prev->next = plbi->next;
*pos = index;
return plbi;
}
}
else if (*pos == 0) {
plbi = pData->head;
pData->head = plbi->next;
return plbi;
}
else {
index = 0;
prev = pData->head;
plbi = pData->head;
while (plbi->next) {
if (*pos == index)
break;
 
prev = plbi;
plbi = plbi->next;
index ++;
}
 
if (plbi == pData->head) {
pData->head = pData->head->next;
*pos = 0;
return plbi;
}
else {
prev->next = plbi->next;
*pos = index;
return plbi;
}
}
 
return NULL;
}
 
static void lstGetItemsRect (PLISTBOXDATA pData, int start, int end, RECT* prc)
{
if (start < 0)
start = 0;
 
prc->top = (start - pData->itemTop)*pData->itemHeight;
 
if (end >= 0)
prc->bottom = (end - pData->itemTop + 1)*pData->itemHeight;
 
}
 
static void lstInvalidateItem (HWND hwnd, PLISTBOXDATA pData, int pos,BOOL fEBk)
{
RECT rcInv;
if (pos < pData->itemTop || pos > (pData->itemTop + pData->itemVisibles))
return;
GetClientRect (hwnd, &rcInv);
rcInv.top = (pos - pData->itemTop)*pData->itemHeight;
rcInv.bottom = rcInv.top + pData->itemHeight;
 
InvalidateRect (hwnd, &rcInv, fEBk);
}
 
static BOOL lstInvalidateUnderItem (HWND hwnd, PLISTBOXDATA pData, int pos)
{
RECT rcInv;
if (pos > (pData->itemTop + pData->itemVisibles))
return FALSE;
 
if (pos <= pData->itemTop) {
InvalidateRect (hwnd, NULL, TRUE);
return TRUE;
}
GetClientRect (hwnd, &rcInv);
 
lstGetItemsRect (pData, pos, -1, &rcInv);
 
if (rcInv.top < rcInv.bottom)
InvalidateRect (hwnd, &rcInv, TRUE);
 
return TRUE;
}
 
static PLISTBOXITEM lstGetItem (PLISTBOXDATA pData, int pos)
{
int i;
PLISTBOXITEM plbi;
 
plbi = pData->head;
for (i=0; i < pos && plbi; i++)
plbi = plbi->next;
 
return plbi;
}
 
static int lstFindItem (PLISTBOXDATA pData, int start, char* key, BOOL bExact)
{
PLISTBOXITEM plbi;
int keylen = strlen (key);
if (start >= (pData->itemCount - 1))
start = 0;
 
plbi = lstGetItem (pData, start);
 
while (plbi)
{
if (bExact && (keylen != strlen (plbi->key))) {
plbi = plbi->next;
start ++;
continue;
}
 
if (strncasecmp (key, plbi->key, keylen) == 0)
return start;
plbi = plbi->next;
start ++;
}
 
return LB_ERR;
}
 
static void lstOnDrawSListBoxItems (HDC hdc, DWORD dwStyle,
PLISTBOXDATA pData, int width)
{
PLISTBOXITEM plbi;
int i;
int x = 0, y = 0;
int offset;
RECT rc;
COLORREF bk;
 
plbi = lstGetItem (pData, pData->itemTop);
for (i = 0; plbi && i < (pData->itemVisibles + 1); i++) {
 
if (plbi->dwFlags & LBIF_SELECTED) {
SetBkColor (hdc, bk = BLUE);
SetTextColor (hdc, WHITE);
}
else {
SetBkColor (hdc, bk = WHITE);
SetTextColor (hdc, BLACK);
}
rc.left = 0;
rc.top = y;
rc.right = width;
rc.bottom = y + pData->itemHeight;
FastFillRect(hdc, &rc, bk);
 
if (dwStyle & LBS_CHECKBOX) {
x = LST_INTER_BMPTEXT;
if (plbi->dwFlags & LBIF_CHECKED)
offset = 0;
else if (plbi->dwFlags & LBIF_PARTCHECKED)
offset = LST_WIDTH_CHECKMARK << 1;
else
offset = LST_WIDTH_CHECKMARK;
#if 0 /* fix: no bitmap */
FillBoxWithBitmapPart (hdc,
x, y + ((pData->itemHeight - LST_HEIGHT_CHECKMARK)>>1),
LST_WIDTH_CHECKMARK, LST_HEIGHT_CHECKMARK,
0, 0,
&sg_bmpCheckMark,
offset, 0);
#endif
x += LST_WIDTH_CHECKMARK + LST_INTER_BMPTEXT;
}
#if 0 /* fix: no icon */
if (dwStyle & LBS_USEICON && plbi->dwData) {
DrawIcon (hdc,
x, y, pData->itemHeight, pData->itemHeight,
(HICON) plbi->dwData);
x += pData->itemHeight + LST_INTER_BMPTEXT;
}
#endif
 
/* jmt: should be SYSTEM_FIXED_FONT because of minigui's GetSysCharXXX() */
#if 0
SelectObject(hdc, GetStockObject(DEFAULT_GUI_FONT));
#endif
SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT));
TextOut (hdc, x+2, y, plbi->key,-1);
 
y += pData->itemHeight;
plbi = plbi->next;
}
}
 
static int lstSelectItem (DWORD dwStyle, PLISTBOXDATA pData, int newSel)
{
PLISTBOXITEM plbi, newItem;
int index;
newItem = lstGetItem (pData, newSel);
#if 1 /* jmt: fixed if no item added */
if (!newItem) return -1;
#endif
#ifdef _DEBUG
if (!newItem)
fprintf (stderr, "ASSERT failed: return value of lstGetItem"
" in lstSelectItem.\n");
#endif
 
if (dwStyle & LBS_MULTIPLESEL) {
newItem->dwFlags ^= LBIF_SELECTED;
return newSel;
}
 
index = 0;
plbi = pData->head;
while (plbi) {
if (plbi->dwFlags & LBIF_SELECTED) {
if (index != newSel) {
plbi->dwFlags &= ~LBIF_SELECTED;
newItem->dwFlags |= LBIF_SELECTED;
return index;
}
break;
}
 
plbi = plbi->next;
index ++;
}
 
newItem->dwFlags |= LBIF_SELECTED;
return -1;
}
 
static void lstDrawFocusRect (HDC hdc, PLISTBOXDATA pData, RECT* rc)
{
HGDIOBJ oldbrush,oldpen;
 
if (pData->itemHilighted < pData->itemTop
|| pData->itemHilighted > (pData->itemTop + pData->itemVisibles))
return;
 
if (pData->dwFlags & LBF_FOCUS) {
lstGetItemsRect (pData, pData->itemHilighted, pData->itemHilighted, rc);
#if 0
InflateRect (rc, -1, -1);
 
FocusRect (hdc, rc->left - 1, rc->top, rc->right, rc->bottom);
#else
oldbrush=SelectObject(hdc, GetStockObject(NULL_BRUSH));
oldpen=SelectObject(hdc, CreatePen(PS_SOLID, 1,
GetSysColor(COLOR_BTNHIGHLIGHT)));
#if 0
GdSetMode(MWMODE_XOR);
#endif
Rectangle (hdc, rc->left, rc->top, rc->right, rc->bottom);
#if 0
GdSetMode(MWMODE_SET);
#endif
SelectObject(hdc,oldbrush);
DeleteObject(SelectObject(hdc,oldpen));
#endif
}
}
 
static void lstCalcParams (const RECT* rcClient, PLISTBOXDATA pData)
{
#define RECTHP(prc) (prc->bottom - prc->top)
pData->itemVisibles = (RECTHP (rcClient)) / pData->itemHeight;
 
#if 1 /* test calculation of itemVisibles */
if( ((RECTHP (rcClient)) % pData->itemHeight) )
pData->itemVisibles++;
#endif
}
 
extern BOOL SetScrollPos (HWND hWnd, int iSBar, int iNewPos);
extern BOOL EnableScrollBar (HWND hWnd, int iSBar, BOOL bEnable);
 
static void lstSetVScrollInfo (HWND hwnd, PLISTBOXDATA pData, BOOL fRedraw)
{
SCROLLINFO si;
 
if (pData->itemVisibles >= pData->itemCount)
{
SetScrollPos (hwnd, SB_VERT, 0);
EnableScrollBar (hwnd, SB_VERT, FALSE);
return;
}
si.fMask = SIF_RANGE | SIF_PAGE | SIF_POS;
si.nMax = pData->itemCount - 1;
si.nMin = 0;
si.nPage = min (pData->itemVisibles, (pData->itemCount - pData->itemTop));
si.nPos = pData->itemTop;
 
SetScrollInfo (hwnd, SB_VERT, &si, fRedraw);
EnableScrollBar (hwnd, SB_VERT, TRUE);
}
 
LRESULT CALLBACK
ListboxCtrlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
HWND pCtrl;
PLISTBOXDATA pData;
DWORD dwStyle;
pCtrl = hwnd;
dwStyle = pCtrl->style;
 
switch (message)
{
case WM_CREATE:
pData = (LISTBOXDATA*) malloc (sizeof(LISTBOXDATA));
if (pData == NULL)
return -1;
 
pCtrl->userdata = (DWORD)pData;
if (!lstInitListBoxData (hwnd, pData, DEF_LB_BUFFER_LEN)) {
free (pData);
return -1;
}
break;
 
case WM_SIZE:
{
RECT rc;
 
pData = (PLISTBOXDATA)pCtrl->userdata;
GetClientRect(hwnd, &rc);
lstCalcParams (&rc, pData);
}
break;
 
case WM_DESTROY:
pData = (PLISTBOXDATA)pCtrl->userdata;
lstListBoxCleanUp (pData);
free (pData);
break;
 
case LB_RESETCONTENT:
pData = (PLISTBOXDATA)pCtrl->userdata;
lstResetListBoxContent (pData);
InvalidateRect (hwnd, NULL, TRUE);
break;
case LB_ADDSTRING:
case LB_INSERTSTRING:
{
char* string = NULL;
PLISTBOXITEMINFO plbii = NULL;
PLISTBOXITEM newItem;
int pos;
if (dwStyle & LBS_CHECKBOX || dwStyle & LBS_USEICON) {
plbii = (PLISTBOXITEMINFO)lParam;
if (!plbii)
return LB_ERR;
 
string = plbii->string;
}
else {
string = (char*)lParam;
if (string == NULL || string [0] == '\0')
return LB_ERR;
}
 
pData = (PLISTBOXDATA)pCtrl->userdata;
newItem = lstAllocItem (pData);
if (!newItem) {
NotifyParent (hwnd, pCtrl->id, LBN_ERRSPACE);
return LB_ERRSPACE;
}
 
newItem->key = FixStrAlloc (strlen (string));
strcpy (newItem->key, string);
newItem->dwFlags = LBIF_NORMAL;
if (plbii) {
switch (plbii->cmFlag) {
case CMFLAG_CHECKED:
newItem->dwFlags |= LBIF_CHECKED;
break;
case CMFLAG_PARTCHECKED:
newItem->dwFlags |= LBIF_PARTCHECKED;
break;
}
if (dwStyle & LBS_USEICON)
newItem->dwData = (DWORD)plbii->hIcon;
else
newItem->dwData = 0L;
}
newItem->dwAddData = 0L;
 
if (message == LB_ADDSTRING)
pos = lstAddNewItem (dwStyle, pData, newItem, -1);
else
pos = lstAddNewItem (dwStyle, pData, newItem, (int)wParam);
 
lstInvalidateUnderItem (hwnd, pData, pos);
 
lstSetVScrollInfo (hwnd, pData, TRUE);
 
return pos;
}
break;
case LB_DELETESTRING:
{
PLISTBOXITEM removed;
int delete;
 
delete = (int)wParam;
 
pData = (PLISTBOXDATA)pCtrl->userdata;
removed = lstRemoveItem (pData, &delete);
if (removed) {
FreeFixStr (removed->key);
lstFreeItem (pData, removed);
pData->itemCount --;
 
if (pData->itemTop != 0
&& pData->itemCount <= pData->itemVisibles) {
pData->itemTop = 0;
InvalidateRect (hwnd, NULL, TRUE);
}
else {
lstInvalidateUnderItem (hwnd, pData, delete);
if (delete <= pData->itemTop) {
pData->itemTop --;
if (pData->itemTop < 0)
pData->itemTop = 0;
}
}
 
if (pData->itemHilighted >= pData->itemCount) {
pData->itemHilighted = pData->itemCount - 1;
if (pData->itemHilighted < 0)
pData->itemHilighted = 0;
}
 
if (pData->itemHilighted < pData->itemTop)
pData->itemHilighted = pData->itemTop;
if (pData->itemHilighted > ITEM_BOTTOM (pData))
pData->itemHilighted = ITEM_BOTTOM (pData);
lstSetVScrollInfo (hwnd, pData, TRUE);
}
}
break;
 
case LB_FINDSTRING:
if( *(char*)lParam == '\0' )
return LB_ERR;
pData = (PLISTBOXDATA)pCtrl->userdata;
return lstFindItem(pData, (int)wParam, (char*)lParam, FALSE);
 
case LB_FINDSTRINGEXACT:
if( *(char*)lParam == '\0' )
return LB_ERR;
 
pData = (PLISTBOXDATA)pCtrl->userdata;
return lstFindItem(pData, (int)wParam, (char*)lParam, TRUE);
case LB_SETTOPINDEX:
{
int newTop = (int) wParam;
pData = (PLISTBOXDATA)pCtrl->userdata;
 
if (newTop <0)
newTop = 0;
else if (newTop > pData->itemCount - pData->itemVisibles)
newTop = pData->itemCount - pData->itemVisibles;
if (pData->itemTop != newTop) {
pData->itemTop = newTop;
 
if (pData->itemHilighted < pData->itemTop)
pData->itemHilighted = pData->itemTop;
if (pData->itemHilighted > ITEM_BOTTOM (pData))
pData->itemHilighted = ITEM_BOTTOM (pData);
 
lstSetVScrollInfo (hwnd, pData, TRUE);
 
InvalidateRect (hwnd, NULL, TRUE);
}
}
break;
case LB_SETCURSEL:
case LB_SETCARETINDEX:
{
int new = (int)wParam;
int old, newTop;
pData = (PLISTBOXDATA)pCtrl->userdata;
if (new < 0 || new > pData->itemCount - 1)
return LB_ERR;
 
old = pData->itemHilighted;
if (new >= 0 && new != old) {
if (pData->itemCount - new >= pData->itemVisibles)
newTop = new;
else
newTop = max (pData->itemCount - pData->itemVisibles, 0);
 
pData->itemTop = newTop;
pData->itemHilighted = new;
lstSetVScrollInfo (hwnd, pData, TRUE);
}
 
if (!(dwStyle & LBS_MULTIPLESEL))
lstSelectItem (dwStyle, pData, new);
InvalidateRect (hwnd, NULL, TRUE);
 
return old;
}
break;
case LB_GETCOUNT:
pData = (PLISTBOXDATA)pCtrl->userdata;
return pData->itemCount;
break;
case LB_GETCURSEL:
{
PLISTBOXITEM plbi;
int index = 0;
pData = (PLISTBOXDATA)pCtrl->userdata;
if (dwStyle & LBS_MULTIPLESEL)
return pData->itemHilighted;
 
plbi = pData->head;
while (plbi) {
if (plbi->dwFlags & LBIF_SELECTED)
return index;
 
index ++;
plbi = plbi->next;
}
return LB_ERR;
}
break;
case LB_GETSELCOUNT:
{
int nSel;
PLISTBOXITEM plbi;
pData = (PLISTBOXDATA)pCtrl->userdata;
 
nSel = 0;
plbi = pData->head;
while (plbi) {
if (plbi->dwFlags & LBIF_SELECTED)
nSel ++;
plbi = plbi->next;
}
return nSel;
}
break;
case LB_GETTOPINDEX:
pData = (PLISTBOXDATA)pCtrl->userdata;
return pData->itemTop;
break;
case LB_GETCARETINDEX:
pData = (PLISTBOXDATA)pCtrl->userdata;
return pData->itemHilighted;
break;
 
case LB_GETTEXTLEN:
{
PLISTBOXITEM plbi;
 
pData = (PLISTBOXDATA)pCtrl->userdata;
plbi = lstGetItem (pData, (int)wParam);
if (plbi)
return strlen (plbi->key);
else
return LB_ERR;
}
break;
case LB_GETTEXT:
{
PLISTBOXITEM plbi;
 
pData = (PLISTBOXDATA)pCtrl->userdata;
plbi = lstGetItem (pData, (int)wParam);
if (plbi)
strcpy ((char*)lParam, plbi->key);
else
return LB_ERR;
}
break;
 
case LB_SETTEXT:
{
PLISTBOXITEM plbi;
char* newStr;
 
pData = (PLISTBOXDATA)pCtrl->userdata;
plbi = lstGetItem (pData, (int)wParam);
if (plbi) {
newStr = FixStrAlloc (strlen ((char*)lParam));
if (newStr) {
FreeFixStr (plbi->key);
plbi->key = newStr;
strcpy (plbi->key, (char*)lParam);
lstInvalidateItem (hwnd, pData, (int)wParam, TRUE);
}
else
return LB_ERR;
}
else
return LB_ERR;
}
break;
case LB_GETITEMDATA:
{
PLISTBOXITEM plbi;
PLISTBOXITEMINFO plbii;
 
pData = (PLISTBOXDATA)pCtrl->userdata;
if (!(plbi = lstGetItem (pData, (int)wParam)))
return LB_ERR;
 
if (!(dwStyle & LBS_CHECKBOX || dwStyle & LBS_USEICON)) {
return plbi->dwData;
}
plbii = (PLISTBOXITEMINFO)lParam;
if (!plbii)
return LB_ERR;
 
if (plbi->dwFlags & LBIF_CHECKED)
plbii->cmFlag = CMFLAG_CHECKED;
else if (plbi->dwFlags & LBIF_PARTCHECKED)
plbii->cmFlag = CMFLAG_PARTCHECKED;
else
plbii->cmFlag = CMFLAG_BLANK;
plbii->hIcon = (HICON)plbi->dwData;
 
return LB_OKAY;
}
break;
case LB_SETITEMDATA:
{
PLISTBOXITEM plbi;
PLISTBOXITEMINFO plbii;
 
pData = (PLISTBOXDATA)pCtrl->userdata;
if (!(plbi = lstGetItem (pData, (int)wParam)))
return LB_ERR;
 
if (!(dwStyle & LBS_CHECKBOX || dwStyle & LBS_USEICON)) {
plbi->dwData = (DWORD)lParam;
return LB_OKAY;
}
 
plbii = (PLISTBOXITEMINFO)lParam;
if (!plbii)
return LB_ERR;
 
plbi->dwFlags &= ~LBIF_CHECKMARKMASK;
switch (plbii->cmFlag) {
case CMFLAG_CHECKED:
plbi->dwFlags |= LBIF_CHECKED;
break;
case CMFLAG_PARTCHECKED:
plbi->dwFlags |= LBIF_PARTCHECKED;
break;
}
if (dwStyle & LBS_USEICON)
plbi->dwData = (DWORD)plbii->hIcon;
else
plbi->dwData = 0;
lstInvalidateItem (hwnd, pData, (int)wParam, TRUE);
 
return LB_OKAY;
}
break;
case LB_GETITEMADDDATA:
{
PLISTBOXITEM plbi;
 
pData = (PLISTBOXDATA)pCtrl->userdata;
if (!(plbi = lstGetItem (pData, (int)wParam)))
return LB_ERR;
 
return plbi->dwAddData;
}
break;
case LB_SETITEMADDDATA:
{
PLISTBOXITEM plbi;
 
pData = (PLISTBOXDATA)pCtrl->userdata;
if (!(plbi = lstGetItem (pData, (int)wParam)))
return LB_ERR;
 
plbi->dwAddData = (DWORD)lParam;
 
return LB_OKAY;
}
break;
case LB_GETCHECKMARK:
{
PLISTBOXITEM plbi;
 
if (!(dwStyle & LBS_CHECKBOX))
return LB_ERR;
 
pData = (PLISTBOXDATA)pCtrl->userdata;
if (!(plbi = lstGetItem (pData, (int)wParam)))
return LB_ERR;
 
if (plbi->dwFlags & LBIF_CHECKED)
return CMFLAG_CHECKED;
 
if (plbi->dwFlags & LBIF_PARTCHECKED)
return CMFLAG_PARTCHECKED;
 
return CMFLAG_BLANK;
}
break;
 
case LB_SETCHECKMARK:
{
PLISTBOXITEM plbi;
 
if (!(dwStyle & LBS_CHECKBOX))
return LB_ERR;
 
pData = (PLISTBOXDATA)pCtrl->userdata;
if (!(plbi = lstGetItem (pData, (int)wParam)))
return LB_ERR;
 
plbi->dwFlags &= ~LBIF_CHECKMARKMASK;
switch (lParam) {
case CMFLAG_CHECKED:
plbi->dwFlags |= LBIF_CHECKED;
break;
case CMFLAG_PARTCHECKED:
plbi->dwFlags |= LBIF_PARTCHECKED;
break;
}
lstInvalidateItem (hwnd, pData, (int)wParam, TRUE);
 
return LB_OKAY;
}
break;
 
case LB_GETSELITEMS:
{
int nItem;
int nSel = 0;
int index = 0;
int* pInt;
PLISTBOXITEM plbi;
 
nItem = (int)wParam;
pInt = (int*)lParam;
pData = (PLISTBOXDATA)pCtrl->userdata;
plbi = pData->head;
while (plbi) {
 
if (plbi->dwFlags & LBIF_SELECTED) {
if (pInt) {
if (nSel < nItem)
*(pInt + nSel) = index;
else
return nItem;
}
nSel ++;
}
plbi = plbi->next;
index ++;
}
return nSel;
}
break;
case LB_GETSEL:
{
PLISTBOXITEM plbi;
 
pData = (PLISTBOXDATA)pCtrl->userdata;
plbi = lstGetItem (pData, (int)wParam);
if (plbi)
return plbi->dwFlags & LBIF_SELECTED;
else
return LB_ERR;
}
break;
 
case LB_SETSEL:
{
PLISTBOXITEM plbi;
 
pData = (PLISTBOXDATA)pCtrl->userdata;
plbi = lstGetItem (pData, (int)lParam);
if (plbi) {
pData->dwFlags &= ~LBF_NOTHINGSELECTED;
if (wParam == -1)
plbi->dwFlags ^= LBIF_SELECTED;
else if (wParam == 0)
plbi->dwFlags &= ~LBIF_SELECTED;
else
plbi->dwFlags |= LBIF_SELECTED;
 
lstInvalidateItem (hwnd, pData, (int)lParam, FALSE);
}
else
return LB_ERR;
}
break;
case LB_GETITEMHEIGHT:
pData = (PLISTBOXDATA)pCtrl->userdata;
return pData->itemHeight;
break;
case LB_SETITEMHEIGHT:
pData = (PLISTBOXDATA)pCtrl->userdata;
if (pData->itemHeight != LOWORD (lParam)) {
RECT rcClient;
pData->itemHeight = LOWORD (lParam);
GetClientRect (hwnd, &rcClient);
lstCalcParams (&rcClient, pData);
lstSetVScrollInfo (hwnd, pData, TRUE);
InvalidateRect (hwnd, NULL, TRUE);
}
break;
 
case WM_SETFOCUS:
{
pData = (PLISTBOXDATA)pCtrl->userdata;
 
if (pData->dwFlags & LBF_FOCUS)
break;
pData->dwFlags |= LBF_FOCUS;
InvalidateRect(hwnd, NULL, TRUE);
 
NotifyParent (hwnd, pCtrl->id, LBN_SETFOCUS);
}
break;
case WM_KILLFOCUS:
{
pData = (PLISTBOXDATA)pCtrl->userdata;
 
pData->dwFlags &= ~LBF_FOCUS;
InvalidateRect(hwnd, NULL, TRUE);
 
NotifyParent (hwnd, pCtrl->id, LBN_KILLFOCUS);
}
break;
 
case WM_GETDLGCODE:
return DLGC_WANTARROWS | DLGC_WANTCHARS;
 
case WM_GETTEXTLENGTH:
case WM_GETTEXT:
case WM_SETTEXT:
return -1;
#if 0
case WM_SETFONT:
break;
case WM_GETFONT:
break;
#endif
case WM_NCCALCSIZE:
{
LPNCCALCSIZE_PARAMS lpnc;
 
/* calculate client rect from passed window rect in rgrc[0]*/
lpnc = (LPNCCALCSIZE_PARAMS)lParam;
if(GetWindowLong(hwnd, GWL_STYLE) & WS_BORDER)
InflateRect(&lpnc->rgrc[0], -2, -2);
}
break;
 
case WM_NCPAINT:
{
RECT rc;
 
hdc = wParam? (HDC)wParam: GetWindowDC (hwnd);
GetWindowRect(hwnd, &rc);
 
if (dwStyle & WS_BORDER)
Draw3dInset(hdc, rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top);
 
if (!wParam)
ReleaseDC (hwnd, hdc);
}
break;
 
case WM_PAINT:
{
RECT rc;
PAINTSTRUCT ps;
hdc = BeginPaint (hwnd,&ps);
pData = (PLISTBOXDATA)pCtrl->userdata;
 
/*
* If this is the first paint and there's nothing
* selected, then auto select the topmost displayed item.
*/
if (pData->dwFlags & LBF_NOTHINGSELECTED) {
lstSelectItem (hwnd->style, pData, pData->itemTop);
pData->dwFlags &= ~LBF_NOTHINGSELECTED;
}
GetClientRect (hwnd, &rc);
lstOnDrawSListBoxItems (hdc, dwStyle, pData, rc.right-rc.left);
lstDrawFocusRect (hdc, pData, &rc);
 
EndPaint (hwnd, &ps);
}
break;
case WM_LBUTTONDBLCLK:
if (dwStyle & LBS_NOTIFY)
NotifyParent (hwnd, pCtrl->id, LBN_DBLCLK);
break;
case WM_LBUTTONDOWN:
{
int oldSel, mouseX, mouseY, hit;
RECT rcInv;
 
pData = (PLISTBOXDATA)pCtrl->userdata;
if (pData->itemCount == 0)
break;
 
mouseX = LOWORD (lParam);
mouseY = HIWORD (lParam);
hit = mouseY / pData->itemHeight;
hit += pData->itemTop;
if (hit >= pData->itemCount)
break;
 
GetClientRect (hwnd, &rcInv);
oldSel = lstSelectItem (dwStyle, pData, hit);
if ((dwStyle & LBS_NOTIFY) && (oldSel != hit))
NotifyParent (hwnd, pCtrl->id, LBN_SELCHANGE);
if (oldSel >= 0) {
if (oldSel >= pData->itemTop
&& (oldSel <= pData->itemTop + pData->itemVisibles)) {
lstGetItemsRect (pData, oldSel, oldSel, &rcInv);
InvalidateRect (hwnd, &rcInv, TRUE);
}
}
 
lstGetItemsRect (pData, hit, hit, &rcInv);
InvalidateRect (hwnd, &rcInv, TRUE);
 
if (pData->itemHilighted != hit)
{
hdc = GetDC(hwnd); /* hdc = GetClientDC (hwnd); */
 
lstDrawFocusRect (hdc, pData, &rcInv);
ReleaseDC (hwnd,hdc);
}
pData->itemHilighted = hit;
 
if (dwStyle & LBS_CHECKBOX) {
if (mouseX > 0 && mouseX < LST_WIDTH_CHECKMARK) {
NotifyParent (hwnd, pCtrl->id, LBN_CLICKCHECKMARK);
if (dwStyle & LBS_AUTOCHECK) {
PLISTBOXITEM plbi;
 
plbi = lstGetItem (pData, hit);
 
switch (plbi->dwFlags & LBIF_CHECKMARKMASK) {
case LBIF_CHECKED:
plbi->dwFlags &= ~LBIF_CHECKMARKMASK;
break;
default:
plbi->dwFlags &= ~LBIF_CHECKMARKMASK;
plbi->dwFlags |= LBIF_CHECKED;
break;
}
lstInvalidateItem (hwnd, pData, hit, TRUE);
}
}
}
lstSetVScrollInfo (hwnd, pData, TRUE);
}
break;
case WM_LBUTTONUP:
break;
case WM_MOUSEMOVE:
break;
 
case WM_KEYDOWN:
{
int oldSel, newSel, newTop;
RECT rcInv;
 
pData = (PLISTBOXDATA)pCtrl->userdata;
newTop = pData->itemTop;
newSel = pData->itemHilighted;
switch (LOWORD (wParam))
{
case VK_HOME: /* SCANCODE_HOME: */
newSel = 0;
newTop = 0;
break;
case VK_END: /* SCANCODE_END: */
newSel = pData->itemCount - 1;
if (pData->itemCount > pData->itemVisibles)
newTop = pData->itemCount - pData->itemVisibles;
else
newTop = 0;
break;
case VK_DOWN: /* SCANCODE_CURSORBLOCKDOWN: */
newSel ++;
if (newSel >= pData->itemCount)
return 0;
if (newSel > ITEM_BOTTOM (pData))
newTop ++;
break;
case VK_UP: /* SCANCODE_CURSORBLOCKUP: */
newSel --;
if (newSel < 0)
return 0;
if (newSel < pData->itemTop)
newTop --;
break;
case VK_NEXT: /* SCANCODE_PAGEDOWN: */
newSel += pData->itemVisibles;
if (newSel >= pData->itemCount)
newSel = pData->itemCount - 1;
if (pData->itemCount - newSel >= pData->itemVisibles)
newTop = newSel;
else
newTop = max (pData->itemCount-pData->itemVisibles, 0);
break;
 
case VK_PRIOR: /* SCANCODE_PAGEUP: */
newSel -= pData->itemVisibles;
if (newSel < 0)
newSel = 0;
newTop -= pData->itemVisibles;
if (newTop < 0)
newTop = 0;
break;
default:
return 0;
}
 
GetClientRect (hwnd, &rcInv);
if (pData->itemHilighted != newSel) {
if (pData->itemTop != newTop) {
pData->itemTop = newTop;
pData->itemHilighted = newSel;
if (!(dwStyle & LBS_MULTIPLESEL)) {
oldSel = lstSelectItem (dwStyle, pData, newSel);
if ((dwStyle & LBS_NOTIFY) && (oldSel != newSel))
NotifyParent (hwnd, pCtrl->id, LBN_SELCHANGE);
}
InvalidateRect (hwnd, NULL, TRUE);
}
else {
if (!(dwStyle & LBS_MULTIPLESEL)) {
oldSel = lstSelectItem (dwStyle, pData, newSel);
if ((dwStyle & LBS_NOTIFY) && (oldSel != newSel))
NotifyParent (hwnd, pCtrl->id, LBN_SELCHANGE);
if (oldSel >= 0) {
if (oldSel >= pData->itemTop
&& oldSel <= (ITEM_BOTTOM (pData) + 1)) {
lstGetItemsRect (pData, oldSel, oldSel, &rcInv);
InvalidateRect (hwnd, &rcInv, TRUE);
}
}
if (newSel < newTop) {
pData->itemHilighted = newSel;
break;
}
lstGetItemsRect (pData, pData->itemHilighted,
pData->itemHilighted, &rcInv);
 
hdc = GetDC(hwnd); /* hdc = GetClientDC (hwnd); */
 
lstDrawFocusRect (hdc, pData, &rcInv);
ReleaseDC (hwnd,hdc);
pData->itemHilighted = newSel;
lstGetItemsRect (pData, newSel, newSel, &rcInv);
InvalidateRect (hwnd, &rcInv, TRUE);
}
else
{
hdc = GetDC(hwnd); /* hdc = GetClientDC (hwnd); */
 
lstDrawFocusRect (hdc, pData, &rcInv);
pData->itemHilighted = newSel;
GetClientRect (hwnd, &rcInv);
lstDrawFocusRect (hdc, pData, &rcInv);
ReleaseDC (hwnd,hdc);
}
}
lstSetVScrollInfo (hwnd, pData, TRUE);
}
}
break;
 
case WM_CHAR:
{
char head [2];
int index;
int newTop;
head [0] = (char) (wParam);
head [1] = '\0';
 
pData = (PLISTBOXDATA)pCtrl->userdata;
 
if (head[0] == ' ') {
if (dwStyle & LBS_MULTIPLESEL) {
RECT rcInv;
GetClientRect (hwnd, &rcInv);
lstSelectItem (dwStyle, pData, pData->itemHilighted);
lstGetItemsRect (pData,
pData->itemHilighted,
pData->itemHilighted,
&rcInv);
InvalidateRect (hwnd, &rcInv, TRUE);
}
else if (dwStyle & LBS_CHECKBOX) {
NotifyParent (hwnd, pCtrl->id, LBN_CLICKCHECKMARK);
if (dwStyle & LBS_AUTOCHECK) {
PLISTBOXITEM plbi;
 
plbi = lstGetItem (pData, pData->itemHilighted);
 
switch (plbi->dwFlags & LBIF_CHECKMARKMASK) {
case LBIF_CHECKED:
plbi->dwFlags &= ~LBIF_CHECKMARKMASK;
break;
default:
plbi->dwFlags &= ~LBIF_CHECKMARKMASK;
plbi->dwFlags |= LBIF_CHECKED;
break;
}
lstInvalidateItem (hwnd, pData,
pData->itemHilighted, TRUE);
}
}
break;
}
 
index = lstFindItem (pData, pData->itemHilighted + 1, head, FALSE);
if (index < 0) {
index = lstFindItem (pData, 0, head, FALSE);
}
 
if (index >= 0) {
if (pData->itemCount - index >= pData->itemVisibles)
newTop = index;
else
newTop = max (pData->itemCount - pData->itemVisibles, 0);
 
pData->itemTop = newTop;
pData->itemHilighted = index;
if (!(dwStyle & LBS_MULTIPLESEL))
lstSelectItem (dwStyle, pData, index);
InvalidateRect (hwnd, NULL, TRUE);
 
lstSetVScrollInfo (hwnd, pData, TRUE);
}
}
break;
case WM_VSCROLL:
{
int newTop;
int scrollHeight = 0;
 
pData = (PLISTBOXDATA)pCtrl->userdata;
newTop = pData->itemTop;
switch(wParam)
{
case SB_LINEDOWN:
 
#if 0 /* test itemVisibles */
printf("itemVisibles:%d\n",pData->itemVisibles);
printf("SB_LINEDOWN:(%d:%d)\n",
ITEM_BOTTOM (pData),(pData->itemCount - 1 ));
#endif
if (ITEM_BOTTOM (pData) < (pData->itemCount - 1 ))
{
newTop ++;
scrollHeight = -pData->itemHeight; /* for ScrollWindow() */
}
break;
case SB_LINEUP:
if (pData->itemTop > 0)
{
newTop --;
scrollHeight = pData->itemHeight;
}
break;
case SB_PAGEDOWN:
if ((pData->itemTop + (pData->itemVisibles << 1)) <=
pData->itemCount)
newTop += pData->itemVisibles;
else
newTop = pData->itemCount - pData->itemVisibles;
 
if (newTop < 0)
return 0;
 
scrollHeight = -(newTop - pData->itemTop)
*pData->itemHeight;
break;
 
case SB_PAGEUP:
if (pData->itemTop >= pData->itemVisibles)
newTop -= pData->itemVisibles;
else
newTop = 0;
 
scrollHeight = (pData->itemTop - newTop)*pData->itemHeight;
break;
 
case SB_THUMBTRACK:
newTop = (int)lParam;
scrollHeight = (pData->itemTop - newTop)*pData->itemHeight;
break;
}
if (scrollHeight)
{
pData->itemTop = newTop;
#if 0 /* !!: fix: no scroll */
ScrollWindow (hwnd, 0, scrollHeight, NULL, NULL);
#endif
SendMessage (hwnd, WM_PAINT, 0, 0);
 
lstSetVScrollInfo (hwnd, pData, TRUE);
 
return 0;
}
}
break;
 
case WM_HSCROLL:
pData = (PLISTBOXDATA)pCtrl->userdata;
switch (wParam)
{
case SB_LINERIGHT:
break;
case SB_LINELEFT:
break;
case SB_PAGELEFT:
break;
case SB_PAGERIGHT:
break;
}
break;
 
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
/winlib/edit.c
0,0 → 1,1172
/*
* Copyright (C) 1999, 2000, Wei Yongming.
* Portions Copyright (c) 2000 Greg Haerr <greg@censoft.com>
*
* Edit control for Microwindows win32 api.
*/
 
/*
** This library is free software; you can redistribute it and/or
** modify it under the terms of the GNU Library General Public
** License as published by the Free Software Foundation; either
** version 2 of the License, or (at your option) any later version.
**
** This library is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
** Library General Public License for more details.
**
** You should have received a copy of the GNU Library General Public
** License along with this library; if not, write to the Free
** Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
** MA 02111-1307, USA
*/
 
/*
** Alternatively, the contents of this file may be used under the terms
** of the Mozilla Public License (the "MPL License") in which case the
** provisions of the MPL License are applicable instead of those above.
*/
 
/* Note:
** Although there was a version by Zhao Jianghua, this version of
** EDIT control is written by Wei Yongming from scratch.
**
** Create date: 1999/8/26
**
** Modify records:
**
** Who When Where For What Status
**-----------------------------------------------------------------------------
** WEI Yongming 2000/02/24 Tsinghua Add MPL License Finished
** Kevin Tseng 2000/05/30 gv port to microwin ported
** Greg Haerr 2000/06/16 Utah 3d look, bug fixes Finished
** Kevin Tseng 2000/06/22 gv port to mw-nanox ported
**
** TODO:
** * Selection.
** * Undo.
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MWINCLUDECOLORS
#include "windows.h" /* windef.h, winuser.h */
#include "wintools.h"
#include "device.h" /* GdGetTextSize */
 
#define USE_BIG5
 
#if 0
#define DEFAULT_FONT DEFAULT_GUI_FONT
#endif
#define DEFAULT_FONT SYSTEM_FIXED_FONT
 
#define WIDTH_EDIT_BORDER 2
#define MARGIN_EDIT_LEFT 1
#define MARGIN_EDIT_TOP 1
#define MARGIN_EDIT_RIGHT 2
#define MARGIN_EDIT_BOTTOM 1
 
#define LEN_SLEDIT_BUFFER 3000
#define LEN_SLEDIT_UNDOBUFFER 1024
 
#define EST_FOCUSED 0x00000001L
#define EST_MODIFY 0x00000002L
#define EST_READONLY 0x00000004L
#define EST_REPLACE 0x00000008L
 
#define EDIT_OP_NONE 0x00
#define EDIT_OP_DELETE 0x01
#define EDIT_OP_INSERT 0x02
#define EDIT_OP_REPLACE 0x03
 
typedef struct tagSLEDITDATA {
HFONT hFont; /* hFont used */
int bufferLen; /* length of buffer */
 
int dataEnd; /* data end position */
int editPos; /* current edit position */
int caretOff; /* caret offset in box */
int startPos; /* start display position */
int selStart; /* selection start position */
int selEnd; /* selection end position */
int passwdChar; /* password character */
int leftMargin; /* left margin */
int topMargin; /* top margin */
int rightMargin; /* right margin */
int bottomMargin; /* bottom margin */
int hardLimit; /* hard limit */
 
int lastOp; /* last operation */
int lastPos; /* last operation position */
int affectedLen; /* affected len of last operation */
int undoBufferLen; /* undo buffer len */
char undoBuffer [LEN_SLEDIT_UNDOBUFFER]; /* Undo buffer; */
char buffer [LEN_SLEDIT_BUFFER]; /* buffer */
} SLEDITDATA, *PSLEDITDATA;
 
static LRESULT CALLBACK
SLEditCtrlProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
 
static int GetSysCharHeight (HWND hwnd)
{
#ifndef USE_BIG5
HDC hdc;
int xw, xh, xb;
 
hdc = GetDC(hwnd);
SelectObject(hdc, GetStockObject(DEFAULT_FONT));
GdSetFont(hdc->font->pfont);
GdGetTextSize(hdc->font->pfont,"X",1, &xw,&xh,&xb,MWTF_ASCII);
ReleaseDC(hwnd,hdc);
 
return xh;
#else
return 12;
#endif
}
 
static int GetSysCharWidth (HWND hwnd)
{
#ifndef USE_BIG5
HDC hdc;
int xw, xh, xb;
 
hdc = GetDC(hwnd);
SelectObject(hdc, GetStockObject(DEFAULT_FONT));
GdSetFont(hdc->font->pfont);
GdGetTextSize(hdc->font->pfont,"X",1, &xw,&xh,&xb,MWTF_ASCII);
ReleaseDC(hwnd,hdc);
 
return xw;
#else
return 6;
#endif
}
 
static int GetSysCCharWidth (HWND hwnd)
{
return (2*GetSysCharWidth(hwnd));
}
 
int WINAPI MwRegisterEditControl(HINSTANCE hInstance)
{
WNDCLASS wc;
 
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_GLOBALCLASS;
wc.lpfnWndProc = (WNDPROC)SLEditCtrlProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = 0; /*LoadCursor(NULL, IDC_ARROW);*/
wc.hbrBackground= GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName= "EDIT";
 
return RegisterClass(&wc);
}
 
static int edtGetOutWidth (const HWND pCtrl)
{
return pCtrl->clirect.right - pCtrl->clirect.left
- ((PSLEDITDATA)(pCtrl->userdata2))->leftMargin
- ((PSLEDITDATA)(pCtrl->userdata2))->rightMargin;
}
 
static int edtGetStartDispPosAtEnd (const HWND pCtrl, PSLEDITDATA pSLEditData)
{
int nOutWidth = edtGetOutWidth (pCtrl);
int endPos = pSLEditData->dataEnd;
int newStartPos = pSLEditData->startPos;
const char* buffer = pSLEditData->buffer;
 
while (TRUE) {
if ((endPos - newStartPos) * GetSysCharWidth (pCtrl) < nOutWidth)
break;
/* FIXME: #ifdef GB2312?*/
if ((BYTE)buffer [newStartPos] > 0xA0) /* 1st:gb:a1-f7,big5:a1-f9 */
{
newStartPos ++;
if (newStartPos < pSLEditData->dataEnd)
{
#ifndef USE_BIG5
if ((BYTE)buffer [newStartPos] > 0xA0)
#else /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */
if ( ((BYTE)buffer [newStartPos] >= 0x40 && (BYTE)buffer[newStartPos] <= 0x7e) ||
((BYTE)buffer [newStartPos] >= 0xa1 && (BYTE)buffer[newStartPos] <= 0xfe))
#endif
newStartPos ++;
}
}
else
newStartPos ++;
}
 
return newStartPos;
}
 
static int edtGetDispLen (const HWND pCtrl)
{
int i, n = 0;
int nOutWidth = edtGetOutWidth (pCtrl);
int nTextWidth = 0;
PSLEDITDATA pSLEditData = (PSLEDITDATA)(pCtrl->userdata2);
const char* buffer = pSLEditData->buffer;
 
for (i = pSLEditData->startPos; i < pSLEditData->dataEnd; i++) {
/* FIXME #ifdef GB2312?*/
if ((BYTE)buffer [i] > 0xA0) /* st:gb:a1-f7,big5:a1-f9 */
{
i++;
if (i < pSLEditData->dataEnd)
{
#ifndef USE_BIG5
if ((BYTE)buffer [i] > 0xA0) /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */
#else /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */
if ( ((BYTE)buffer [i] >= 0x40 && (BYTE)buffer[i] <= 0x7e) ||
((BYTE)buffer [i] >= 0xa1 && (BYTE)buffer[i] <= 0xfe))
#endif
{
nTextWidth += GetSysCCharWidth (pCtrl);
n += 2;
}
else
i--;
}
else
{
nTextWidth += GetSysCharWidth (pCtrl);
n++;
}
}
else
{
nTextWidth += GetSysCharWidth (pCtrl);
n++;
}
 
if (nTextWidth > nOutWidth)
break;
}
 
return n;
}
 
static int edtGetOffset (HWND hwnd,const SLEDITDATA* pSLEditData, int x)
{
int i;
int newOff = 0;
int nTextWidth = 0;
const char* buffer = pSLEditData->buffer;
 
x -= pSLEditData->leftMargin;
for (i = pSLEditData->startPos; i < pSLEditData->dataEnd; i++) {
if ((nTextWidth + (GetSysCharWidth(hwnd) >> 1)) >= x)
break;
 
/* FIXME #ifdef GB2312?*/
if ((BYTE)buffer [i] > 0xA0) /* 1st:gb:a1-f7,big5:a1-f9 */
{
i++;
if (i < pSLEditData->dataEnd)
{
#ifndef USE_BIG5
if ((BYTE)buffer [i] > 0xA0) /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */
#else /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */
if ( ((BYTE)buffer [i] >= 0x40 && (BYTE)buffer[i] <= 0x7e) ||
((BYTE)buffer [i] >= 0xa1 && (BYTE)buffer[i] <= 0xfe))
#endif
{
nTextWidth += GetSysCCharWidth (hwnd);
newOff += 2;
}
else
i --;
}
else
{
nTextWidth += GetSysCharWidth (hwnd);
newOff ++;
}
}
else
{
nTextWidth += GetSysCharWidth (hwnd);
newOff ++;
}
 
}
 
return newOff;
}
 
static BOOL edtIsACCharBeforePosition (const char* string, int pos)
{
if (pos < 2)
return FALSE;
 
/* 1st:gb:a1-f7,big5:a1-f9 2nd:gb:a1-fe,big5:40-7e,a1-fe */
#ifndef USE_BIG5
/* FIXME #ifdef GB2312?*/
if ((BYTE)string [pos - 2] > 0xA0 && (BYTE)string [pos - 1] > 0xA0)
return TRUE;
#else
if ((BYTE)string [pos - 2] > 0xA0)
{
if ( ((BYTE)string [pos - 1] >= 0x40 && (BYTE)string[pos - 1] <= 0x7e) ||
((BYTE)string [pos - 1] >= 0xa1 && (BYTE)string[pos - 1] <= 0xfe))
return TRUE;
}
#endif
 
return FALSE;
}
 
static BOOL edtIsACCharAtPosition (const char* string, int len, int pos)
{
if (pos > (len - 2))
return FALSE;
 
/* 1st:gb:a1-f7,big5:a1-f9 2nd:gb:a1-fe,big5:40-7e,a1-fe */
#ifndef USE_BIG5
if ((BYTE)string [pos] > 0xA0 && (BYTE)string [pos + 1] > 0xA0)
return TRUE;
#else
if ((BYTE)string [pos] > 0xA0)
{
if ( ((BYTE)string [pos + 1] >= 0x40 && (BYTE)string [pos + 1] <= 0x7e) ||
((BYTE)string [pos + 1] >= 0xa1 && (BYTE)string [pos + 1] <= 0xfe)) {
/*fprintf(stderr,"true\n");
fflush(stderr);*/
return TRUE;
}
}
#endif
 
return FALSE;
}
 
LRESULT CALLBACK
SLEditCtrlProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND pCtrl;
DWORD dwStyle;
HDC hdc;
PSLEDITDATA pSLEditData;
RECT rc;
 
pCtrl = hWnd;
dwStyle = pCtrl->style;
 
switch (message)
{
case WM_CREATE:
if (!(pSLEditData = malloc (sizeof (SLEDITDATA)))) {
fprintf (stderr, "EDIT: malloc error!\n");
return -1;
}
 
pSLEditData->hFont = GetStockObject(DEFAULT_FONT);
 
pSLEditData->bufferLen = LEN_SLEDIT_BUFFER;
pSLEditData->editPos = 0;
pSLEditData->caretOff = 0;
pSLEditData->startPos = 0;
pSLEditData->selStart = 0;
pSLEditData->selEnd = 0;
pSLEditData->passwdChar = '*';
pSLEditData->leftMargin = MARGIN_EDIT_LEFT;
pSLEditData->topMargin = MARGIN_EDIT_TOP;
pSLEditData->rightMargin = MARGIN_EDIT_RIGHT;
pSLEditData->bottomMargin = MARGIN_EDIT_BOTTOM;
 
pSLEditData->hardLimit = -1;
/* undo information */
pSLEditData->lastOp = EDIT_OP_NONE;
pSLEditData->lastPos = 0;
pSLEditData->affectedLen = 0;
pSLEditData->undoBufferLen = LEN_SLEDIT_UNDOBUFFER;
pSLEditData->undoBuffer [0] = '\0';
 
pSLEditData->dataEnd = strlen (pCtrl->szTitle);
memcpy (pSLEditData->buffer, pCtrl->szTitle,
min (LEN_SLEDIT_BUFFER, pSLEditData->dataEnd));
 
pCtrl->userdata2 = (DWORD) pSLEditData;
 
pCtrl->userdata = 0;
break;
 
case WM_DESTROY:
DestroyCaret ();
 
free ((void*)pCtrl->userdata2);
break;
#if 0
case WM_CHANGESIZE:
{
pCtrl->cl = pCtrl->left + WIDTH_EDIT_BORDER;
pCtrl->ct = pCtrl->top + WIDTH_EDIT_BORDER;
pCtrl->cr = pCtrl->right - WIDTH_EDIT_BORDER;
pCtrl->cb = pCtrl->bottom - WIDTH_EDIT_BORDER;
}
break;
#endif
 
#if 1 /* jmt: for edit: chinese support */
case WM_SETFONT:
{
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);
pSLEditData->hFont = (HFONT)wParam;
 
ShowWindow(hWnd, SW_HIDE);
ShowWindow(hWnd, SW_SHOWNA);
 
if(LOWORD(lParam))
InvalidateRect(hWnd,NULL,TRUE);
}
return (LRESULT)0;
case WM_GETFONT:
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);
return (LRESULT)pSLEditData->hFont;
#endif
 
#if 0
case WM_SETCURSOR:
if (dwStyle & WS_DISABLED)
{
SetCursor (GetSystemCursor (IDC_ARROW));
return 0;
}
break;
#endif
case WM_KILLFOCUS:
pCtrl->userdata &= ~EST_FOCUSED;
 
HideCaret (hWnd);
DestroyCaret ();
 
SendMessage (GetParent (hWnd), WM_COMMAND,
(WPARAM) MAKELONG (pCtrl->id, EN_KILLFOCUS), (LPARAM)hWnd);
break;
case WM_SETFOCUS:
if (pCtrl->userdata & EST_FOCUSED)
return 0;
pCtrl->userdata |= EST_FOCUSED;
 
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);
/* only implemented for ES_LEFT align format. */
 
CreateCaret (hWnd, NULL, 1 /*+ GetSysCharWidth(hWnd)*/,
hWnd->clirect.bottom-hWnd->clirect.top-2);
SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd)
+ pSLEditData->leftMargin, pSLEditData->topMargin);
ShowCaret (hWnd);
 
SendMessage (GetParent (hWnd), WM_COMMAND,
(WPARAM) MAKELONG (pCtrl->id, EN_SETFOCUS), (LPARAM) hWnd);
break;
case WM_ENABLE:
if ( (!(dwStyle & WS_DISABLED) && !wParam)
|| ((dwStyle & WS_DISABLED) && wParam) ) {
if (wParam)
pCtrl->style &= ~WS_DISABLED;
else
pCtrl->style |= WS_DISABLED;
 
InvalidateRect (hWnd, NULL, FALSE);
}
break;
 
case WM_NCCALCSIZE:
{
LPNCCALCSIZE_PARAMS lpnc;
 
/* calculate client rect from passed window rect in rgrc[0]*/
lpnc = (LPNCCALCSIZE_PARAMS)lParam;
if(GetWindowLong(hWnd, GWL_STYLE) & WS_BORDER)
InflateRect(&lpnc->rgrc[0], -2, -2);
}
break;
 
case WM_NCPAINT:
hdc = wParam? (HDC)wParam: GetWindowDC (hWnd);
GetWindowRect(hWnd, &rc);
 
if (dwStyle & WS_BORDER)
Draw3dInset(hdc, rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top);
 
if (!wParam)
ReleaseDC (hWnd, hdc);
break;
 
case WM_PAINT:
{
int dispLen;
char* dispBuffer;
RECT rect,rc;
PAINTSTRUCT ps;
 
HGDIOBJ oldfont;
oldfont=NULL;
 
hdc = BeginPaint (hWnd,&ps);
GetClientRect (hWnd, &rect);
if (dwStyle & WS_DISABLED)
{
#if 0
SetBrushColor (hdc, LTGRAY/*COLOR_lightgray*/);
FillBox (hdc, 0, 0, rect.right, rect.bottom);
#else
rc.left=0; rc.top=0; rc.bottom=rect.bottom; rc.right=rect.right;
FillRect(hdc,&rc,GetStockObject(LTGRAY_BRUSH));
#endif
SetBkColor (hdc, LTGRAY/*COLOR_lightgray*/);
}
else
{
#if 0
SetBrushColor (hdc, WHITE/*COLOR_lightwhite*/);
FillBox (hdc, 0, 0, rect.right, rect.bottom);
#else
rc.left=0; rc.top=0; rc.bottom=rect.bottom; rc.right=rect.right;
FillRect(hdc,&rc,GetStockObject(WHITE_BRUSH));
#endif
SetBkColor (hdc, WHITE/*COLOR_lightwhite*/);
}
 
SetTextColor (hdc, BLACK/*COLOR_black*/);
dispLen = edtGetDispLen (pCtrl);
if (dispLen == 0)
{
EndPaint (hWnd, &ps);
break;
}
 
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);
 
#ifdef _DEBUG
if (pSLEditData->startPos > pSLEditData->dataEnd)
fprintf (stderr, "ASSERT failure: %s.\n", "Edit Paint");
#endif
dispBuffer = ALLOCA(dispLen + 1);
 
if (dwStyle & ES_PASSWORD)
memset (dispBuffer, '*', dispLen);
else
memcpy (dispBuffer,
pSLEditData->buffer + pSLEditData->startPos,
dispLen);
 
dispBuffer [dispLen] = '\0';
 
/* only implemented ES_LEFT align format for single line edit. */
rect.left += pSLEditData->leftMargin;
rect.top += pSLEditData->topMargin;
rect.right -= pSLEditData->rightMargin;
rect.bottom -= pSLEditData->bottomMargin;
 
#if 0 /* FIXME no ClipRectIntersect() */
#if 0
ClipRectIntersect (hdc, &rect);
#else
GdSetClipRects(hdc->psd,1,&rect); /*??==ClipRectIntersect??*/
#endif
#endif
 
#ifdef USE_BIG5
oldfont=SelectObject(hdc,CreateFont(12,
0,0,0,0,0,0,0,0,0,0,0,
FF_DONTCARE|DEFAULT_PITCH,
"HZXFONT"));
#else
SelectObject(hdc, pSLEditData->hFont);
#endif
TextOut (hdc, pSLEditData->leftMargin, pSLEditData->topMargin,
dispBuffer,-1);
 
#ifdef USE_BIG5
DeleteObject(SelectObject(hdc,oldfont));
#endif
EndPaint (hWnd, &ps);
 
FREEA(dispBuffer);
}
break;
#if 1 /* jmt+ */
case WM_KEYDOWN:
{
BOOL bChange = FALSE;
int i;
RECT InvRect;
int deleted;
 
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);
switch ((int)(wParam)) /* (LOWORD (wParam)) */
{
#if 0
case SCANCODE_ENTER:
SendMessage (GetParent (hWnd), WM_COMMAND,
(WPARAM) MAKELONG (pCtrl->id, EN_ENTER), (LPARAM) hWnd);
return 0;
 
case SCANCODE_HOME:
if (pSLEditData->editPos == 0)
return 0;
 
pSLEditData->editPos = 0;
pSLEditData->caretOff = 0;
 
SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd)
+ pSLEditData->leftMargin, pSLEditData->topMargin);
if (pSLEditData->startPos != 0)
InvalidateRect (hWnd, NULL, FALSE);
pSLEditData->startPos = 0;
return 0;
case SCANCODE_END:
{
int newStartPos;
if (pSLEditData->editPos == pSLEditData->dataEnd)
return 0;
 
newStartPos = edtGetStartDispPosAtEnd (pCtrl, pSLEditData);
pSLEditData->editPos = pSLEditData->dataEnd;
pSLEditData->caretOff = pSLEditData->editPos - newStartPos;
 
SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd)
+ pSLEditData->leftMargin, pSLEditData->topMargin);
if (pSLEditData->startPos != newStartPos)
InvalidateRect (hWnd, NULL, FALSE);
pSLEditData->startPos = newStartPos;
}
return 0;
#endif
 
case VK_LEFT: /* SCANCODE_CURSORBLOCKLEFT: */
{
BOOL bScroll = FALSE;
int scrollStep;
if (pSLEditData->editPos == 0)
return 0;
 
if (edtIsACCharBeforePosition (pSLEditData->buffer,
pSLEditData->editPos))
{
scrollStep = 2;
pSLEditData->editPos -= 2;
}
else {
scrollStep = 1;
pSLEditData->editPos --;
}
 
pSLEditData->caretOff -= scrollStep;
if (pSLEditData->caretOff == 0
&& pSLEditData->editPos != 0)
{
bScroll = TRUE;
 
if (edtIsACCharBeforePosition (pSLEditData->buffer,
pSLEditData->editPos))
{
pSLEditData->startPos -= 2;
pSLEditData->caretOff = 2;
}
else
{
pSLEditData->startPos --;
pSLEditData->caretOff = 1;
}
}
else if (pSLEditData->caretOff < 0)
{
pSLEditData->startPos = 0;
pSLEditData->caretOff = 0;
}
SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd)
+ pSLEditData->leftMargin, pSLEditData->topMargin);
if (bScroll)
InvalidateRect (hWnd, NULL, FALSE);
}
return 0;
case VK_RIGHT: /* SCANCODE_CURSORBLOCKRIGHT: */
{
BOOL bScroll = FALSE;
int scrollStep, moveStep;
 
if (pSLEditData->editPos == pSLEditData->dataEnd)
return 0;
 
if (edtIsACCharAtPosition (pSLEditData->buffer,
pSLEditData->dataEnd,
pSLEditData->startPos))
{
if (edtIsACCharAtPosition (pSLEditData->buffer,
pSLEditData->dataEnd,
pSLEditData->editPos))
{
scrollStep = 2;
moveStep = 2;
pSLEditData->editPos += 2;
}
else
{
scrollStep = 2;
moveStep = 1;
pSLEditData->editPos ++;
}
}
else
{
if (edtIsACCharAtPosition (pSLEditData->buffer,
pSLEditData->dataEnd,
pSLEditData->editPos))
{
if (edtIsACCharAtPosition (pSLEditData->buffer,
pSLEditData->dataEnd,
pSLEditData->startPos + 1))
scrollStep = 3;
else
scrollStep = 2;
 
moveStep = 2;
pSLEditData->editPos += 2;
}
else
{
scrollStep = 1;
moveStep = 1;
pSLEditData->editPos ++;
}
}
 
pSLEditData->caretOff += moveStep;
if (pSLEditData->caretOff * GetSysCharWidth (hWnd)
> edtGetOutWidth (pCtrl))
{
bScroll = TRUE;
pSLEditData->startPos += scrollStep;
 
pSLEditData->caretOff =
pSLEditData->editPos - pSLEditData->startPos;
}
 
SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd)
+ pSLEditData->leftMargin, pSLEditData->topMargin);
if (bScroll)
InvalidateRect (hWnd, NULL, FALSE);
}
return 0;
#if 0
case SCANCODE_INSERT:
pCtrl->userdata ^= EST_REPLACE;
break;
#endif
case VK_DELETE: /* SCANCODE_REMOVE: */
if ((pCtrl->userdata & EST_READONLY)
|| (pSLEditData->editPos == pSLEditData->dataEnd)){
#if 0 /* fix: no ping() */
Ping ();
#endif
return 0;
}
if (edtIsACCharAtPosition (pSLEditData->buffer,
pSLEditData->dataEnd, pSLEditData->editPos))
deleted = 2;
else
deleted = 1;
for (i = pSLEditData->editPos;
i < pSLEditData->dataEnd - deleted; i++)
pSLEditData->buffer [i]
= pSLEditData->buffer [i + deleted];
 
pSLEditData->dataEnd -= deleted;
bChange = TRUE;
InvRect.left = pSLEditData->leftMargin
+ pSLEditData->caretOff * GetSysCharWidth (hWnd);
InvRect.top = pSLEditData->topMargin;
InvRect.right = pCtrl->clirect.right - pCtrl->clirect.left;
InvRect.bottom = pCtrl->clirect.bottom - pCtrl->clirect.top;
 
InvalidateRect (hWnd, &InvRect, FALSE);
break;
 
case VK_BACK: /* SCANCODE_BACKSPACE: */
if ((pCtrl->userdata & EST_READONLY)
|| (pSLEditData->editPos == 0)) {
#if 0 /* fix: no ping */
Ping ();
#endif
return 0;
}
 
if (edtIsACCharBeforePosition (pSLEditData->buffer,
pSLEditData->editPos))
deleted = 2;
else
deleted = 1;
for (i = pSLEditData->editPos;
i < pSLEditData->dataEnd;
i++)
pSLEditData->buffer [i - deleted]
= pSLEditData->buffer [i];
 
pSLEditData->dataEnd -= deleted;
pSLEditData->editPos -= deleted;
bChange = TRUE;
pSLEditData->caretOff -= deleted;
if (pSLEditData->caretOff == 0
&& pSLEditData->editPos != 0) {
if (edtIsACCharBeforePosition (pSLEditData->buffer,
pSLEditData->editPos)) {
pSLEditData->startPos -= 2;
pSLEditData->caretOff = 2;
}
else {
pSLEditData->startPos --;
pSLEditData->caretOff = 1;
}
InvRect.left = pSLEditData->leftMargin;
InvRect.top = pSLEditData->topMargin;
InvRect.right = pCtrl->clirect.right -
pCtrl->clirect.left;
InvRect.bottom = pCtrl->clirect.bottom -
pCtrl->clirect.top;
}
else {
InvRect.left = pSLEditData->leftMargin
+ pSLEditData->caretOff * GetSysCharWidth (hWnd);
InvRect.top = pSLEditData->topMargin;
InvRect.right = pCtrl->clirect.right -
pCtrl->clirect.left;
InvRect.bottom = pCtrl->clirect.bottom -
pCtrl->clirect.top;
}
 
SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd)
+ pSLEditData->leftMargin, pSLEditData->topMargin);
InvalidateRect (hWnd, &InvRect, FALSE);
break;
 
default:
break;
}
if (bChange)
SendMessage (GetParent (hWnd), WM_COMMAND,
(WPARAM) MAKELONG (pCtrl->id, EN_CHANGE), (LPARAM) hWnd);
}
break;
#endif
case WM_CHAR:
{
char charBuffer [2];
int i, chars, scrollStep, inserting;
RECT InvRect;
 
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);
 
if (dwStyle & ES_READONLY) {
 
#if 0 /* fix: no ping() */
Ping();
#endif
return 0;
}
if (HIBYTE (wParam)) {
charBuffer [0] = LOBYTE (wParam);
charBuffer [1] = HIBYTE (wParam);
chars = 2;
}
else {
charBuffer [0] = LOBYTE (wParam);
chars = 1;
}
if (chars == 1) {
switch (charBuffer [0])
{
case 0x00: /* NULL */
case 0x07: /* BEL */
case 0x08: /* BS */
case 0x09: /* HT */
case 0x0A: /* LF */
case 0x0B: /* VT */
case 0x0C: /* FF */
case 0x0D: /* CR */
case 0x1B: /* Escape */
return 0;
}
}
 
if (pCtrl->userdata & EST_REPLACE) {
if (pSLEditData->dataEnd == pSLEditData->editPos)
inserting = chars;
else if (edtIsACCharAtPosition (pSLEditData->buffer,
pSLEditData->dataEnd,
pSLEditData->editPos)) {
if (chars == 2)
inserting = 0;
else
inserting = -1;
}
else {
if (chars == 2)
inserting = 1;
else
inserting = 0;
}
}
else
inserting = chars;
 
/* check space */
if (pSLEditData->dataEnd + inserting > pSLEditData->bufferLen) {
 
#if 0 /* fix: no ping() */
Ping ();
#endif
SendMessage (GetParent (hWnd), WM_COMMAND,
(WPARAM) MAKELONG (pCtrl->id, EN_MAXTEXT), (LPARAM) hWnd);
return 0;
}
else if ((pSLEditData->hardLimit >= 0)
&& ((pSLEditData->dataEnd + inserting)
> pSLEditData->hardLimit)) {
#if 0 /* fix: no ping() */
Ping ();
#endif
SendMessage (GetParent (hWnd), WM_COMMAND,
(WPARAM) MAKELONG (pCtrl->id, EN_MAXTEXT), (LPARAM) hWnd);
return 0;
}
 
if (inserting == -1) {
for (i = pSLEditData->editPos; i < pSLEditData->dataEnd-1; i++)
pSLEditData->buffer [i] = pSLEditData->buffer [i + 1];
}
else if (inserting > 0) {
for (i = pSLEditData->dataEnd + inserting - 1;
i > pSLEditData->editPos + inserting - 1;
i--)
pSLEditData->buffer [i]
= pSLEditData->buffer [i - inserting];
}
 
for (i = 0; i < chars; i++)
pSLEditData->buffer [pSLEditData->editPos + i]
= charBuffer [i];
pSLEditData->editPos += chars;
pSLEditData->caretOff += chars;
pSLEditData->dataEnd += inserting;
 
if (pSLEditData->caretOff * GetSysCharWidth (hWnd)
> edtGetOutWidth (pCtrl))
{
if (edtIsACCharAtPosition (pSLEditData->buffer,
pSLEditData->dataEnd,
pSLEditData->startPos))
scrollStep = 2;
else {
if (chars == 2) {
if (edtIsACCharAtPosition (pSLEditData->buffer,
pSLEditData->dataEnd,
pSLEditData->startPos + 1))
scrollStep = 3;
else
scrollStep = 2;
}
else
scrollStep = 1;
}
pSLEditData->startPos += scrollStep;
 
pSLEditData->caretOff =
pSLEditData->editPos - pSLEditData->startPos;
 
InvRect.left = pSLEditData->leftMargin;
InvRect.top = pSLEditData->topMargin;
InvRect.right = pCtrl->clirect.right - pCtrl->clirect.left;
InvRect.bottom = pCtrl->clirect.bottom - pCtrl->clirect.top;
}
else {
InvRect.left = pSLEditData->leftMargin
+ (pSLEditData->caretOff - chars)
* GetSysCharWidth (hWnd);
InvRect.top = pSLEditData->topMargin;
InvRect.right = pCtrl->clirect.right - pCtrl->clirect.left;
InvRect.bottom = pCtrl->clirect.bottom - pCtrl->clirect.top;
}
 
SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd)
+ pSLEditData->leftMargin, pSLEditData->topMargin);
InvalidateRect (hWnd, &InvRect, FALSE);
 
SendMessage (GetParent (hWnd), WM_COMMAND,
(WPARAM) MAKELONG (pCtrl->id, EN_CHANGE), (LPARAM) hWnd);
}
break;
 
case WM_GETTEXTLENGTH:
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);
return pSLEditData->dataEnd;
case WM_GETTEXT:
{
char* buffer = (char*)lParam;
int len;
 
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);
 
len = min ((int)wParam, pSLEditData->dataEnd);
 
memcpy (buffer, pSLEditData->buffer, len);
buffer [len] = '\0';
 
return len;
}
break;
 
case WM_SETTEXT:
{
int len;
 
if (dwStyle & ES_READONLY)
return 0;
 
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);
 
len = strlen ((char*)lParam);
len = min (len, pSLEditData->bufferLen);
if (pSLEditData->hardLimit >= 0)
len = min (len, pSLEditData->hardLimit);
pSLEditData->dataEnd = len;
memcpy (pSLEditData->buffer, (char*)lParam, len);
 
pSLEditData->editPos = 0;
pSLEditData->caretOff = 0;
pSLEditData->startPos = 0;
InvalidateRect (hWnd, NULL, FALSE);
}
break;
 
case WM_LBUTTONDBLCLK:
break;
case WM_LBUTTONDOWN:
{
int newOff;
 
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);
newOff = edtGetOffset (hWnd,pSLEditData, LOWORD (lParam));
if (newOff != pSLEditData->caretOff)
{
pSLEditData->editPos += newOff - pSLEditData->caretOff;
pSLEditData->caretOff = newOff;
 
SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd)
+ pSLEditData->leftMargin, pSLEditData->topMargin);
}
}
break;
 
case WM_LBUTTONUP:
break;
case WM_MOUSEMOVE:
break;
 
case WM_GETDLGCODE:
return DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTARROWS;
 
case EM_SETREADONLY:
if (wParam)
pCtrl->style/*dwStyle*/ |= ES_READONLY;
else
pCtrl->style/*dwStyle*/ &= ~ES_READONLY;
return 0;
case EM_SETPASSWORDCHAR:
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);
 
if (pSLEditData->passwdChar != (int)wParam) {
if (dwStyle & ES_PASSWORD) {
pSLEditData->passwdChar = (int)wParam;
InvalidateRect (hWnd, NULL, TRUE);
}
}
return 0;
case EM_GETPASSWORDCHAR:
{
int* passwdchar;
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);
passwdchar = (int*) lParam;
 
*passwdchar = pSLEditData->passwdChar;
}
return 0;
case EM_LIMITTEXT:
{
int newLimit = (int)wParam;
if (newLimit >= 0) {
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2);
if (pSLEditData->bufferLen < newLimit)
pSLEditData->hardLimit = -1;
else
pSLEditData->hardLimit = newLimit;
}
}
return 0;
default:
return DefWindowProc (hWnd, message, wParam, lParam);
break;
}
return 0;
}
/winlib/static.c
0,0 → 1,369
/*
* Copyright (C) 1999, 2000, Wei Yongming.
* Portions Copyright (c) 2000 Greg Haerr <greg@censoft.com>
*
* Static control for Microwindows win32 api.
*/
 
/*
** This library is free software; you can redistribute it and/or
** modify it under the terms of the GNU Library General Public
** License as published by the Free Software Foundation; either
** version 2 of the License, or (at your option) any later version.
**
** This library is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
** Library General Public License for more details.
**
** You should have received a copy of the GNU Library General Public
** License along with this library; if not, write to the Free
** Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
** MA 02111-1307, USA
*/
 
/*
** Alternatively, the contents of this file may be used under the terms
** of the Mozilla Public License (the "MPL License") in which case the
** provisions of the MPL License are applicable instead of those above.
*/
 
/* Create date: 1999/5/22
**
** Modify records:
**
** Who When Where For What Status
**-----------------------------------------------------------------------------
** WEI Yongming 1999/8/21 Tsinghua Rearrangment Finished
** WEI Yongming 1999/10/27 Tsinghua SETTEXT bug Finished
** WEI Yongming 1999/10/27 Tsinghua SETTEXT bug Finished
** WEI Yongming 2000/02/24 Tsinghua Add MPL License Finished
** Kevin Tseng 2000/06/26 gv port to microwin ported
** Greg Haerr 2000/07/05 Utah bug fixes Finished
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MWINCLUDECOLORS
#include "windows.h" /* windef.h, winuser.h */
#include "wintools.h"
#include "device.h" /* GdGetTextSize */
 
/* jmt: should be SYSTEM_FIXED_FONT because of minigui's GetSysCharXXX() */
#define FONT_NAME SYSTEM_FIXED_FONT /* was DEFAULT_GUI_FONT*/
 
static LRESULT CALLBACK
StaticControlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
 
int WINAPI MwRegisterStaticControl(HINSTANCE hInstance)
{
WNDCLASS wc;
 
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_GLOBALCLASS;
wc.lpfnWndProc = (WNDPROC)StaticControlProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = 0; /*LoadCursor(NULL, IDC_ARROW);*/
wc.hbrBackground= GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName= "STATIC";
 
return RegisterClass(&wc);
}
 
#if 1
#define RECTW(rc) (rc.right-rc.left)
#define RECTH(rc) (rc.bottom-rc.top)
 
static DWORD GetWindowStyle (HWND hwnd)
{
return hwnd->style;
}
 
static COLORREF GetWindowBkColor (HWND hwnd)
{
MWBRUSHOBJ *hbr;
hbr=(MWBRUSHOBJ *)hwnd->pClass->hbrBackground;
return hbr->color;
}
 
static char *GetWindowCaption (HWND hwnd)
{
return hwnd->szTitle;
}
 
static void SetWindowCaption (HWND hwnd,char *caption)
{
if (strlen(caption)<=63) /* mw: szTitle[64] */
strcpy(hwnd->szTitle,caption);
else
{
strncpy(hwnd->szTitle,caption,63);
hwnd->szTitle[63]='\0';
}
}
 
static int GetSysCharHeight (HWND hwnd)
{
HDC hdc;
int xw, xh, xb;
 
hdc = GetDC(hwnd);
 
SelectObject(hdc, GetStockObject(FONT_NAME));
 
#if MWCLIENT /* nanox client */
GrGetGCTextSize(hdc->gc, "X", 1, MWTF_ASCII, &xw, &xh, &xb);
#else
GdGetTextSize(hdc->font->pfont,"X",1, &xw,&xh,&xb,MWTF_ASCII);
#endif
ReleaseDC(hwnd,hdc);
 
return xh;
}
 
static int GetSysCharWidth (HWND hwnd)
{
HDC hdc;
int xw, xh, xb;
 
hdc = GetDC(hwnd);
 
SelectObject(hdc, GetStockObject(FONT_NAME));
 
#if MWCLIENT /* nanox client */
GrGetGCTextSize(hdc->gc, "X", 1, MWTF_ASCII, &xw, &xh, &xb);
#else
GdGetTextSize(hdc->font->pfont,"X",1, &xw,&xh,&xb,MWTF_ASCII);
#endif
ReleaseDC(hwnd,hdc);
 
return xw;
}
#endif
 
static LRESULT CALLBACK
StaticControlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
RECT rcClient;
HDC hdc;
char* spCaption;
HWND pCtrl;
UINT uFormat;
DWORD dwStyle;
pCtrl = hwnd;
switch (message) {
case WM_CREATE:
return 0;
case WM_DESTROY:
break;
 
case STM_GETIMAGE:
return (int)(pCtrl->userdata);
case STM_SETIMAGE:
{
int pOldValue;
pOldValue = (int)(pCtrl->userdata);
pCtrl->userdata = (DWORD)wParam;
InvalidateRect (hwnd, NULL, FALSE);
return pOldValue;
}
case WM_GETDLGCODE:
return DLGC_STATIC;
 
 
case WM_PAINT:
{
PAINTSTRUCT ps;
RECT rc;
HBRUSH hbr;
 
hdc = BeginPaint (hwnd,&ps);
 
GetClientRect (hwnd, &rcClient);
 
FastFillRect(hdc, &rcClient, GetSysColor(COLOR_BTNFACE));
 
dwStyle = GetWindowStyle (hwnd);
 
switch (dwStyle & SS_TYPEMASK)
{
case SS_GRAYRECT:
#if 0
SetBrushColor (hdc, LTGRAY);
FillBox(hdc, 0, 0, RECTW(rcClient), RECTH(rcClient));
#else
rc.left=0; rc.top=0; rc.bottom=RECTH(rcClient); rc.right=RECTW(rcClient);
FillRect(hdc,&rc,GetStockObject(LTGRAY_BRUSH));
#endif
break;
case SS_GRAYFRAME:
#if 0
Draw3DDownFrame (hdc,
0, 0, rcClient.right, rcClient.bottom,
DKGRAY);
#else
Draw3dInset(hdc, 0, 0,
rcClient.right, rcClient.bottom);
#endif
break;
case SS_BITMAP:
#if 0 /* jmt: fix: no FillBoxWithBitmap() */
FillBoxWithBitmap(hdc, 0, 0, 0, 0,
(PBITMAP)(pCtrl->userdata));
#endif
break;
case SS_ICON:
#if 0 /* jmt: fix: no DrawIcon */
hIcon = (HICON)(pCtrl->userdata);
DrawIcon (hdc, 0, 0, 0, 0, hIcon);
#endif
break;
case SS_SIMPLE:
#if 0
SetBrushColor (hdc, GetWindowBkColor (hwnd));
FillBox (hdc, 0, 0, rcClient.right, rcClient.bottom);
#else
hbr=CreateSolidBrush(GetWindowBkColor(hwnd));
rc.left=0; rc.top=0; rc.bottom=rcClient.bottom; rc.right=rcClient.right;
FillRect(hdc,&rc,hbr);
DeleteObject(hbr);
#endif
if (dwStyle & WS_DISABLED)
SetTextColor (hdc, DKGRAY);
else
SetTextColor (hdc, BLACK);
SetBkColor(hdc, GetSysColor(COLOR_BTNFACE));
spCaption = GetWindowCaption (hwnd);
if (spCaption)
{
SelectObject(hdc, GetStockObject(FONT_NAME));
TextOut (hdc, 0, 0, spCaption, -1);
}
break;
 
case SS_LEFT:
case SS_CENTER:
case SS_RIGHT:
case SS_LEFTNOWORDWRAP:
uFormat = DT_TOP;
if ( (dwStyle & SS_TYPEMASK) == SS_LEFT)
uFormat |= DT_LEFT | DT_WORDBREAK;
else if ( (dwStyle & SS_TYPEMASK) == SS_CENTER)
uFormat |= DT_CENTER | DT_WORDBREAK;
else if ( (dwStyle & SS_TYPEMASK) == SS_RIGHT)
uFormat |= DT_RIGHT | DT_WORDBREAK;
else if ( (dwStyle & SS_TYPEMASK) == SS_LEFTNOWORDWRAP)
uFormat |= DT_LEFT | DT_SINGLELINE | DT_EXPANDTABS;
if (dwStyle & WS_DISABLED)
SetTextColor (hdc, DKGRAY);
else
SetTextColor (hdc, BLACK);
 
#if 0
SetBkColor (hdc, GetWindowBkColor (hwnd));
#endif
SetBkColor(hdc, GetSysColor(COLOR_BTNFACE));
spCaption = GetWindowCaption (hwnd);
if (dwStyle & SS_NOPREFIX)
uFormat |= DT_NOPREFIX;
if (spCaption)
{
SelectObject(hdc, GetStockObject(FONT_NAME));
DrawText (hdc, spCaption, -1, &rcClient, uFormat);
}
break;
 
case SS_GROUPBOX:
#if 0
Draw3DBorder (hdc, rcClient.left,
rcClient.top + (GetSysCharHeight(hwnd) >> 1),
rcClient.right, rcClient.bottom);
#else
Draw3dInset(hdc, rcClient.left,
rcClient.top+(GetSysCharHeight(hwnd) >> 1),
rcClient.right-rcClient.left,
rcClient.bottom-rcClient.top);
#endif
if (dwStyle & WS_DISABLED)
SetTextColor (hdc, DKGRAY);
else
SetTextColor (hdc, BLACK);
 
#if 0
SetBkColor(hdc, GetWindowBkColor (GetParent (hwnd)));
#endif
SetBkColor(hdc, GetSysColor(COLOR_BTNFACE));
spCaption = GetWindowCaption (hwnd);
if (spCaption)
{
SelectObject(hdc, GetStockObject(FONT_NAME));
TextOut (hdc, GetSysCharWidth (hwnd), 2, spCaption, -1);
}
break;
}
EndPaint (hwnd, &ps);
}
break;
 
#if 0 /* jmt: SS_NOTIFY isn't standard in win32 */
case WM_LBUTTONDBLCLK:
if (GetWindowStyle (hwnd) & SS_NOTIFY)
SendMessage (GetParent(hwnd), WM_COMMAND,
(WPARAM)MAKELONG(pCtrl->id, STN_DBLCLK),
(LPARAM)hwnd);
break;
#endif
case WM_LBUTTONDOWN:
break;
 
case WM_NCLBUTTONDBLCLK:
break;
 
case WM_NCLBUTTONDOWN:
break;
 
case WM_NCHITTEST:
dwStyle = GetWindowStyle (hwnd);
if ((dwStyle & SS_TYPEMASK) == SS_GROUPBOX)
return HTTRANSPARENT;
 
#if 0 /* jmt: SS_NOTIFY isn't standard in win32 */
if (GetWindowStyle (hwnd) & SS_NOTIFY)
return HTCLIENT;
else
#endif
return HTNOWHERE;
break;
 
 
#if 0 /* jmt: fix: no WM_GETFONT/WM_SETFONT */
case WM_GETFONT:
break;
case WM_SETFONT:
break;
#endif
case WM_SETTEXT:
SetWindowCaption (hwnd, (char*)lParam);
InvalidateRect (hwnd, NULL, TRUE);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
/winlib/scrlbar.c
0,0 → 1,1140
/*
* Copyright (c) 2000 Greg Haerr <greg@censoft.com>
* Portions Copyright (c) 1999, 2000, Wei Yongming.
* jmt: scrollbar thumb ported
*
* Microwindows win32 Scrollbars control
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MWINCLUDECOLORS /* jmt: for color macros */
#include "windows.h"
#include "wintern.h"
#include "wintools.h"
 
/* scrollbar status/positions*/
#define SBS_UNKNOWN 0x0000
#define SBS_LEFTARROW 0x0001
#define SBS_RIGHTARROW 0x0002
#define SBS_LEFTSPACE 0x0004
#define SBS_RIGHTSPACE 0x0008
#define SBS_HORZTHUMB 0x0010
#define SBS_UPARROW 0x0020
#define SBS_DOWNARROW 0x0040
#define SBS_UPSPACE 0x0080
#define SBS_DOWNSPACE 0x0100
#define SBS_VERTTHUMB 0x0200
#define SBS_MASK 0x03ff
#define SBS_DISABLED 0x4000
#define SBS_HIDE 0x8000
 
 
#define MWM_DEFBARLEN 18
#define MWM_MINBARLEN 8
 
static LRESULT CALLBACK
ScrollbarControlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
 
 
int WINAPI MwRegisterScrollbarControl(HINSTANCE hInstance)
{
WNDCLASS wc;
 
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_GLOBALCLASS;
wc.lpfnWndProc = (WNDPROC)ScrollbarControlProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = 0; /*LoadCursor(NULL, IDC_ARROW);*/
wc.hbrBackground= GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName= "SCROLLBAR";
 
return RegisterClass(&wc);
}
 
static DWORD GetWindowStyle (HWND hwnd)
{
return hwnd->style;
}
 
static int
wndGetBorder(HWND hwnd)
{
if (hwnd->style & WS_BORDER) {
if ((hwnd->style & WS_CAPTION) == WS_CAPTION)
return mwSYSMETRICS_CXFRAME;
return mwSYSMETRICS_CXBORDER;
}
return 0;
}
 
static BOOL
wndGetVScrollBarRect (HWND hwnd, RECT* rcVBar)
{
int cx,cy; RECT rc;
MWSCROLLBARINFO* pData;
pData = (MWSCROLLBARINFO *)hwnd->userdata;
rc = hwnd->winrect;
cx=rc.right-rc.left;
cy=rc.bottom-rc.top;
 
rcVBar->left = hwnd->winrect.right - cx
- wndGetBorder (hwnd);
rcVBar->right = hwnd->winrect.right - wndGetBorder (hwnd);
rcVBar->top = hwnd->winrect.top;
rcVBar->bottom = hwnd->winrect.bottom - wndGetBorder (hwnd);
 
return TRUE;
}
 
static BOOL
wndGetHScrollBarRect (HWND hwnd, RECT* rcHBar)
{
int cx,cy; RECT rc;
MWSCROLLBARINFO* pData;
pData = (MWSCROLLBARINFO *)hwnd->userdata;
rc = hwnd->winrect;
cx=rc.right-rc.left;
cy=rc.bottom-rc.top;
 
rcHBar->top = hwnd->winrect.bottom - cy
- wndGetBorder (hwnd);
rcHBar->bottom = hwnd->winrect.bottom - wndGetBorder (hwnd);
rcHBar->left = hwnd->winrect.left;
rcHBar->right = hwnd->winrect.right - wndGetBorder (hwnd);
 
return TRUE;
}
 
void
MwPaintScrollbars(HWND hwnd, HDC hdc, DWORD style)
{
BOOL vertbar = (style==SBS_VERT);
BOOL horzbar = (style==SBS_HORZ);
BOOL fGotDC = FALSE;
RECT rc,rc2;
 
POINT p3[3];
int shrink=2;
 
int start = 0;
RECT rcHBar, rcVBar;
 
int cx,cy;
MWSCROLLBARINFO* pData;
pData = (MWSCROLLBARINFO *)hwnd->userdata;
rc = hwnd->winrect;
cx=rc.right-rc.left;
cy=rc.bottom-rc.top;
 
if (!hdc && (horzbar || vertbar)) {
hdc = GetWindowDC(hwnd);
fGotDC = TRUE;
}
 
if (vertbar) {
 
#if 1
/* bkgnd */
rc2.left=rc.left; rc2.right=rc2.left+ cx;
rc2.top=rc.top;
rc2.bottom=rc2.top+ cx;
FillRect(hdc, &rc2, (HBRUSH)(COLOR_BTNFACE+1));
rc2.top=rc.bottom- cx;
rc2.bottom=rc2.top+ cx;
FillRect(hdc, &rc2, (HBRUSH)(COLOR_BTNFACE+1));
#endif
/* up */
Draw3dUpDownState(hdc, rc.left, rc.top,
cx, cx,
pData->status & SBS_UPARROW);
/* down */
Draw3dUpDownState(hdc, rc.left,rc.bottom-cx,
cx, cx,
pData->status & SBS_DOWNARROW);
/* jmt: draw arrows */
SelectObject(hdc,GetStockObject(BLACK_BRUSH));
/* up */
p3[0].x= rc.left + (cx/2) - 1;
p3[0].y= rc.top + 2 + shrink;
p3[1].x= rc.left + 2 + shrink - 1;
p3[1].y= rc.top + (cx-4) - shrink;
p3[2].x= rc.left + (cx-4) - shrink;
p3[2].y= rc.top + (cx-4) - shrink;
Polygon(hdc,p3,3);
/* down */
p3[0].x= rc.left + (cx/2) - 1;
p3[0].y= rc.bottom - 4 - shrink;
p3[1].x= rc.left + 2 + shrink - 1;
p3[1].y= rc.bottom-cx + 2 + shrink;
p3[2].x= rc.left + (cx-4) - shrink;
p3[2].y= rc.bottom-cx + 2 + shrink;
Polygon(hdc,p3,3);
 
/* draw moving bar */
 
wndGetVScrollBarRect (hwnd, &rcVBar);
rcVBar.left -- ;
/*rcVBar.right -- ;*/
 
start = rcVBar.top + cx + pData->barStart;
if (start + pData->barLen > rcVBar.bottom)
start = rcVBar.bottom - pData->barLen;
if (pData->barLen == 0)
pData->barLen=rc.bottom-rc.top-(cx*2);
 
/* bkgnd */
rc2.left=rc.left; rc2.right=rc.right/*-1*/;
rc2.top=rc.top+cx;
rc2.bottom=start;
if (rc2.bottom>rc2.top)
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH));
 
rc2.top=start+pData->barLen;
rc2.bottom=rc.bottom-cx;
if (rc2.bottom>rc2.top)
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH));
 
Draw3dUpFrame (hdc, rcVBar.left, start, rcVBar.right,
start + pData->barLen);
/*printf("barv:(l,t,r,b):(%d,%d,%d,%d)\n",
rcVBar.left, start, rcVBar.right,
start + pData->barLen);*/
 
}
if (horzbar) {
#if 1
/* bkgnd */
rc2.top=rc.top; rc2.bottom=rc2.top+ cy;
rc2.left=rc.left;
rc2.right=rc2.left+ cy;
FillRect(hdc, &rc2, (HBRUSH)(COLOR_BTNFACE+1));
rc2.left=rc.right- cy;
rc2.right=rc2.left+ cy;
FillRect(hdc, &rc2, (HBRUSH)(COLOR_BTNFACE+1));
#endif
/* left */
Draw3dUpDownState(hdc, rc.left, rc.top,
cy, cy,
pData->status & SBS_LEFTARROW);
/* right */
Draw3dUpDownState(hdc, rc.right-cy, rc.top,
cy, cy,
pData->status & SBS_RIGHTARROW);
/* jmt: draw arrows */
SelectObject(hdc,GetStockObject(BLACK_BRUSH));
/* left */
p3[0].x= rc.left + 2 + shrink;
p3[0].y= rc.top + (cy/2) ;
p3[1].x= rc.left + (cy-4) - shrink ;
p3[1].y= rc.top + 2 + shrink;
p3[2].x= rc.left + (cy-4) - shrink;
p3[2].y= rc.bottom - 4 - shrink + 1;
Polygon(hdc,p3,3);
/* right */
p3[0].x= rc.right - 4 - shrink;
p3[0].y= rc.top + (cy/2) ;
p3[1].x= rc.right-cy + 2 + shrink ;
p3[1].y= rc.top + 2 + shrink;
p3[2].x= rc.right-cy + 2 + shrink;
p3[2].y= rc.bottom - 4 - shrink + 1;
Polygon(hdc,p3,3);
 
/* draw moving bar. */
 
wndGetHScrollBarRect (hwnd, &rcHBar);
rcHBar.top -- ;
/*rcHBar.bottom -- ;*/
 
start = rcHBar.left + cy + pData->barStart;
 
if (start + pData->barLen > rcHBar.right)
start = rcHBar.right - pData->barLen;
 
if (pData->barLen == 0)
pData->barLen=rc.right-rc.left-(cy*2);
 
/* bkgnd */
rc2.top=rc.top; rc2.bottom=rc.bottom/*-1*/;
rc2.left=rc.left+cy;
rc2.right=start;
if (rc2.right>rc2.left)
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH));
 
rc2.left=start+pData->barLen;
rc2.right=rc.right-cy;
if (rc2.right>rc2.left)
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH));
 
Draw3dUpFrame (hdc, start, rcHBar.top, start + pData->barLen,
rcHBar.bottom);
/*printf("barh:(l,t,r,b):(%d,%d,%d,%d)\n",
start, rcHBar.top, start + pData->barLen,
rcHBar.bottom);*/
}
 
if (fGotDC)
ReleaseDC(hwnd, hdc);
}
 
/* handle a non-client message for a scrollbar*/
void
MwHandleMessageScrollbar(HWND hwnd, WPARAM hitcode, LPARAM lParam, UINT msg, DWORD style)
{
int pos = SBS_UNKNOWN;
BOOL vertbar = (style==SBS_VERT);
BOOL horzbar = (style==SBS_HORZ);
int * pStat;
POINT pt;
RECT rc;
 
static BOOL bDraw;
 
static int downPos = SBS_UNKNOWN;
static int sbCode;
int newThumbPos;
 
int itemMoveable,itemCount,itemVisible,moveRange; /* jmt:2k0819 */
int moveTop,moveBottom,moveLeft,moveRight; /* jmt:2k0819 */
 
int cx,cy;
MWSCROLLBARINFO* pData;
pData = (MWSCROLLBARINFO *)hwnd->userdata;
rc = hwnd->winrect;
cx=rc.right-rc.left;
cy=rc.bottom-rc.top;
 
POINTSTOPOINT(pt, lParam);
for (;;) { /* use for() to allow break statement*/
if (vertbar)
{
pStat = &pData->status;
rc = hwnd->winrect;
rc.bottom = rc.top + cx;
if (PtInRect(&rc, pt))
{
pos = SBS_UPARROW;
break;
}
rc.bottom = hwnd->winrect.bottom;
rc.top = rc.bottom - cx;
if (PtInRect(&rc, pt))
{
pos = SBS_DOWNARROW;
break;
}
pos = SBS_VERTTHUMB;
} else if (horzbar)
{
pStat = &pData->status;
rc = hwnd->winrect;
rc.right = rc.left + cy;
if (PtInRect(&rc, pt)) {
pos = SBS_LEFTARROW;
break;
}
rc.right = hwnd->winrect.right;
rc.left = rc.right - cy;
if (PtInRect(&rc, pt)) {
pos = SBS_RIGHTARROW;
break;
}
pos = SBS_HORZTHUMB;
} else
return;
break;
}
 
if (pos == SBS_UNKNOWN)
return;
 
*pStat &= ~SBS_MASK; /* remove stray mouse states*/
 
if (msg == WM_NCLBUTTONDOWN || msg == WM_NCLBUTTONDBLCLK)
*pStat |= pos;
else *pStat &= ~pos;
 
if (msg == WM_NCLBUTTONDOWN || msg == WM_NCLBUTTONDBLCLK)
bDraw=TRUE;
 
if (bDraw)
MwPaintScrollbars(hwnd, NULL,style);
 
if (pos == SBS_UPARROW || pos == SBS_LEFTARROW) /* jmt:2k0820 */
{
if (pData->curPos != pData->minPos)
sbCode = SB_LINEUP;
}
else if (pos == SBS_DOWNARROW || pos == SBS_RIGHTARROW) /* jmt:2k0820 */
{
if (pData->curPos != pData->maxPos)
sbCode = SB_LINEDOWN;
}
else if (pos == SBS_VERTTHUMB || pos == SBS_HORZTHUMB)
{
sbCode = SB_THUMBTRACK;
}
 
switch(msg)
{
case WM_NCLBUTTONDOWN:
case WM_NCLBUTTONDBLCLK:
downPos = pos;
break;
 
case WM_NCMOUSEMOVE:
if (vertbar)
{
if (sbCode == SB_THUMBTRACK && downPos == SBS_VERTTHUMB)
{
/* jmt(2k0819): new algorithm for SB_THUMBTRACK */
 
rc = hwnd->winrect;
moveTop = rc.top + cx;
moveBottom = hwnd->winrect.bottom - cx;
moveRange = moveBottom - moveTop;
 
itemCount = pData->maxPos - pData->minPos + 1;
itemVisible = pData->pageStep;
itemMoveable = itemCount - itemVisible + 1;
 
newThumbPos = ((pt.y - moveTop) * itemMoveable) / moveRange;
printf("((%d-%d)*%d)/%d=%d\n",
pt.y,moveTop,itemMoveable,moveRange,newThumbPos);
 
if ( newThumbPos >= pData->minPos &&
newThumbPos <= pData->maxPos)
{
SendMessage (hwnd,
WM_VSCROLL, SB_THUMBTRACK, newThumbPos);
 
SendMessage (GetParent(hwnd),
WM_VSCROLL, SB_THUMBTRACK, newThumbPos);
}
break;
}
}
if (horzbar)
{
if (sbCode == SB_THUMBTRACK && downPos == SBS_HORZTHUMB)
{
/* jmt(2k0819): new algorithm for SB_THUMBTRACK */
 
rc = hwnd->winrect;
moveLeft = rc.left + cy;
moveRight = hwnd->winrect.right - cy;
moveRange = moveRight - moveLeft;
 
itemCount = pData->maxPos - pData->minPos + 1;
itemVisible = pData->pageStep;
itemMoveable = itemCount - itemVisible + 1;
 
newThumbPos = ((pt.x - moveLeft) * itemMoveable) / moveRange;
printf("((%d-%d)*%d)/%d=%d\n",
pt.y,moveLeft,itemMoveable,moveRange,newThumbPos);
if ( newThumbPos >= pData->minPos &&
newThumbPos <= pData->maxPos)
{
SendMessage (hwnd,
WM_HSCROLL, SB_THUMBTRACK, newThumbPos);
 
SendMessage (GetParent(hwnd),
WM_HSCROLL, SB_THUMBTRACK, newThumbPos);
}
break;
}
}
break;
 
case WM_NCLBUTTONUP:
bDraw=FALSE;
downPos = SBS_UNKNOWN;
 
if (sbCode==SB_THUMBTRACK)
{
if (vertbar)
{
/* jmt(2k0819): new algorithm for SB_THUMBTRACK */
 
rc = hwnd->winrect;
moveTop = rc.top + cx;
moveBottom = hwnd->winrect.bottom - cx;
moveRange = moveBottom - moveTop;
 
itemCount = pData->maxPos - pData->minPos + 1;
itemVisible = pData->pageStep;
itemMoveable = itemCount - itemVisible + 1;
 
newThumbPos = ((pt.y - moveTop) * itemMoveable) / moveRange;
printf("((%d-%d)*%d)/%d=%d\n",
pt.y,moveTop,itemMoveable,moveRange,newThumbPos);
 
if ( newThumbPos >= pData->minPos &&
newThumbPos <= pData->maxPos)
{
SendMessage (hwnd,
WM_VSCROLL, SB_THUMBTRACK, newThumbPos);
 
SendMessage (GetParent(hwnd),
WM_VSCROLL, SB_THUMBTRACK, newThumbPos);
}
break; /* case */
}
if (horzbar)
{
/* jmt(2k0819): new algorithm for SB_THUMBTRACK */
 
rc = hwnd->winrect;
moveLeft = rc.left + cy;
moveRight = hwnd->winrect.right - cy;
moveRange = moveRight - moveLeft;
 
itemCount = pData->maxPos - pData->minPos + 1;
itemVisible = pData->pageStep;
itemMoveable = itemCount - itemVisible + 1;
 
newThumbPos = ((pt.x - moveLeft) * itemMoveable) / moveRange;
printf("((%d-%d)*%d)/%d=%d\n",
pt.y,moveLeft,itemMoveable,moveRange,newThumbPos);
if ( newThumbPos >= pData->minPos &&
newThumbPos <= pData->maxPos)
{
SendMessage (hwnd,
WM_HSCROLL, SB_THUMBTRACK, newThumbPos);
 
SendMessage (GetParent(hwnd),
WM_HSCROLL, SB_THUMBTRACK, newThumbPos);
}
break; /* case */
}
}
else
{
if (vertbar)
{
SendMessage (hwnd, WM_VSCROLL, sbCode, 0);
SendMessage (GetParent(hwnd), WM_VSCROLL, sbCode, 0);
}
if (horzbar)
{
SendMessage (hwnd, WM_HSCROLL, sbCode, 0);
SendMessage (GetParent(hwnd), WM_HSCROLL, sbCode, 0);
}
}
break;
}
}
 
 
static BOOL
PtInRect2(const RECT *lprc, int x, int y)
{
POINT p;
 
p.x = x;
p.y = y;
return PtInRect(lprc, p);
}
 
static void
wndScrollBarPos (HWND hwnd, BOOL bIsHBar, RECT* rcBar) /* jmt: 2k0820 */
{
UINT moveRange;
PMWSCROLLBARINFO pSBar;
int cx,cy;
RECT rc;
rc = hwnd->winrect;
cx=rc.right-rc.left;
cy=rc.bottom-rc.top;
pSBar = (MWSCROLLBARINFO *)hwnd->userdata;
 
if (pSBar->minPos == pSBar->maxPos) {
pSBar->status |= SBS_HIDE;
return;
}
 
if (bIsHBar)
moveRange = (rcBar->right - rcBar->left) - (cy << 1);
else
moveRange = (rcBar->bottom - rcBar->top) - (cx << 1);
 
 
if (pSBar->pageStep == 0)
{
pSBar->barLen = MWM_DEFBARLEN;
 
if (pSBar->barLen > moveRange)
pSBar->barLen = MWM_MINBARLEN;
}
else
{
pSBar->barLen = moveRange * pSBar->pageStep /
(pSBar->maxPos - pSBar->minPos + 1);
if (pSBar->barLen < MWM_MINBARLEN)
pSBar->barLen = MWM_MINBARLEN;
}
 
pSBar->barStart = moveRange * (pSBar->curPos - pSBar->minPos) /
(pSBar->maxPos - pSBar->minPos + 1);
 
 
if (pSBar->barStart + pSBar->barLen > moveRange)
pSBar->barStart = moveRange - pSBar->barLen;
 
 
if (pSBar->barStart < 0)
pSBar->barStart = 0;
}
 
static PMWSCROLLBARINFO wndGetScrollBar (HWND pWin) /* jmt: 2k0820 */
{
MWSCROLLBARINFO* pData;
pData = (MWSCROLLBARINFO *)pWin->userdata;
 
if (!strcmp(pWin->pClass->lpszClassName,"SCROLLBAR"))
return pData;
else
return NULL;
}
 
BOOL EnableScrollBarEx (HWND hWnd, int iSBar, BOOL bEnable) /* jmt: iSBar not used */
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
BOOL bPrevState;
RECT rcBar;
DWORD dwStyle; /* jmt:2k0820 */
 
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin)) )
return FALSE;
 
bPrevState = !(pSBar->status & SBS_DISABLED);
 
if (bEnable && !bPrevState)
pSBar->status &= ~SBS_DISABLED;
else if (!bEnable && bPrevState)
pSBar->status |= SBS_DISABLED;
else
return FALSE;
 
dwStyle = (GetWindowStyle (hWnd) & SBS_TYPEMASK); /* jmt: 2k0820 */
 
if (dwStyle == SBS_VERT)
{
wndGetVScrollBarRect (pWin, &rcBar);
rcBar.left --;
rcBar.right --;
}
else
{
wndGetHScrollBarRect (pWin, &rcBar);
rcBar.top --;
rcBar.bottom --;
}
#if 0
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar));
#else
MwPaintScrollbars(hWnd,NULL,dwStyle); /* a must */
#endif
 
return TRUE;
}
 
BOOL GetScrollPosEx (HWND hWnd, int iSBar, int* pPos) /* jmt: iSBar not used */
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin)) )
return FALSE;
 
*pPos = pSBar->curPos;
return TRUE;
}
 
BOOL GetScrollRangeEx (HWND hWnd, int iSBar, int* pMinPos, int* pMaxPos) /* jmt: iSBar not used */
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin)) )
return FALSE;
 
*pMinPos = pSBar->minPos;
*pMaxPos = pSBar->maxPos;
return TRUE;
}
 
BOOL SetScrollPosEx (HWND hWnd, int iSBar, int iNewPos) /* jmt: iSBar not used */
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
RECT rcBar;
DWORD dwStyle; /* jmt:2k0820 */
 
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin)) )
return FALSE;
 
if (iNewPos < pSBar->minPos)
pSBar->curPos = pSBar->minPos;
else
pSBar->curPos = iNewPos;
 
{
int max = pSBar->maxPos;
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0;
 
if (pSBar->curPos > max)
pSBar->curPos = max;
}
dwStyle = (GetWindowStyle (hWnd) & SBS_TYPEMASK); /* jmt: 2k0820 */
 
if (dwStyle == SBS_VERT)
{
wndGetVScrollBarRect (pWin, &rcBar);
rcBar.left --;
rcBar.right --;
}
else
{
wndGetHScrollBarRect (pWin, &rcBar);
rcBar.top --;
rcBar.bottom --;
}
 
wndScrollBarPos (pWin, dwStyle == SBS_HORZ, &rcBar);
 
#if 0
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar));
#else
MwPaintScrollbars(hWnd,NULL,dwStyle); /* a must */
#endif
return TRUE;
}
 
BOOL SetScrollRangeEx (HWND hWnd, int iSBar, int iMinPos, int iMaxPos) /* jmt: iSBar not used */
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
RECT rcBar;
DWORD dwStyle; /* jmt:2k0820 */
 
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin)) )
return FALSE;
 
pSBar->minPos = (iMinPos < iMaxPos)?iMinPos:iMaxPos;
pSBar->maxPos = (iMinPos > iMaxPos)?iMinPos:iMaxPos;
/* validate parameters. */
if (pSBar->curPos < pSBar->minPos)
pSBar->curPos = pSBar->minPos;
 
if (pSBar->pageStep <= 0)
pSBar->pageStep = 0;
else if (pSBar->pageStep > (pSBar->maxPos - pSBar->minPos + 1))
pSBar->pageStep = pSBar->maxPos - pSBar->minPos + 1;
{
int max = pSBar->maxPos;
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0;
 
if (pSBar->curPos > max)
pSBar->curPos = max;
}
 
dwStyle = (GetWindowStyle (hWnd) & SBS_TYPEMASK); /* jmt: 2k0820 */
 
if (dwStyle == SBS_VERT)
{
wndGetVScrollBarRect (pWin, &rcBar);
rcBar.left --;
rcBar.right --;
}
else
{
wndGetHScrollBarRect (pWin, &rcBar);
rcBar.top --;
rcBar.bottom --;
}
wndScrollBarPos (pWin, dwStyle == SBS_HORZ, &rcBar);
 
#if 0
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar));
#else
MwPaintScrollbars(hWnd,NULL,dwStyle); /* a must */
#endif
 
return TRUE;
}
 
BOOL SetScrollInfoEx (HWND hWnd, int iSBar,
LPCSCROLLINFO lpsi, BOOL fRedraw) /* jmt: iSBar not used */
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
RECT rcBar;
DWORD dwStyle; /* jmt:2k0820 */
 
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin)) )
return FALSE;
if( lpsi->fMask & SIF_RANGE )
{
pSBar->minPos = (lpsi->nMin < lpsi->nMax)?lpsi->nMin:lpsi->nMax;
pSBar->maxPos = (lpsi->nMin < lpsi->nMax)?lpsi->nMax:lpsi->nMin;
}
if( lpsi->fMask & SIF_POS )
pSBar->curPos = lpsi->nPos;
if( lpsi->fMask & SIF_PAGE )
pSBar->pageStep = lpsi->nPage;
 
/* validate parameters. */
if (pSBar->curPos < pSBar->minPos)
pSBar->curPos = pSBar->minPos;
 
if (pSBar->pageStep <= 0)
pSBar->pageStep = 0;
else if (pSBar->pageStep > (pSBar->maxPos - pSBar->minPos + 1))
pSBar->pageStep = pSBar->maxPos - pSBar->minPos + 1;
{
int max = pSBar->maxPos;
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0;
 
if (pSBar->curPos > max)
pSBar->curPos = max;
}
 
dwStyle = (GetWindowStyle (hWnd) & SBS_TYPEMASK); /* jmt: 2k0820 */
 
if(fRedraw)
{
if (dwStyle == SBS_VERT)
{
wndGetVScrollBarRect (pWin, &rcBar);
rcBar.left --;
rcBar.right --;
}
else
{
wndGetHScrollBarRect (pWin, &rcBar);
rcBar.top --;
rcBar.bottom --;
}
wndScrollBarPos (pWin, dwStyle == SBS_HORZ, &rcBar);
 
#if 0
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar));
#else
MwPaintScrollbars(hWnd,NULL,dwStyle); /* a must */
#endif
}
return TRUE;
}
 
BOOL GetScrollInfoEx(HWND hWnd, int iSBar, LPSCROLLINFO lpsi) /* jmt: iSBar not used */
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin)) )
return FALSE;
if( lpsi->fMask & SIF_RANGE )
{
lpsi->nMin = pSBar->minPos;
lpsi->nMax = pSBar->maxPos;
}
if( lpsi->fMask & SIF_POS )
{
lpsi->nPos = pSBar->curPos;
}
if( lpsi->fMask & SIF_PAGE )
lpsi->nPage = pSBar->pageStep;
return TRUE;
}
 
BOOL ShowScrollBarEx (HWND hWnd, int iSBar, BOOL bShow) /* jmt: iSBar not used */
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
BOOL bPrevState;
RECT rcBar;
DWORD dwStyle; /* jmt:2k0820 */
 
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin)) )
return FALSE;
 
bPrevState = !(pSBar->status & SBS_HIDE);
 
if (bShow && !bPrevState)
pSBar->status &= ~SBS_HIDE;
else if (!bShow && bPrevState)
pSBar->status |= SBS_HIDE;
else
return FALSE;
 
#if 0 /* fix: no WM_CHANGESIZE */
SendMessage (hWnd, WM_CHANGESIZE, 0, 0);
#endif
 
dwStyle = (GetWindowStyle (hWnd) & SBS_TYPEMASK); /* jmt: 2k0820 */
 
if (dwStyle == SBS_VERT)
wndGetVScrollBarRect (pWin, &rcBar);
else
wndGetHScrollBarRect (pWin, &rcBar);
 
{
RECT rcWin, rcClient;
memcpy (&rcWin, &pWin->winrect.left, sizeof (RECT));
rcClient.left = 0;
rcClient.top = 0;
rcClient.right = pWin->clirect.right - pWin->clirect.left;
rcClient.bottom = pWin->clirect.bottom - pWin->clirect.top;
#if 0 /* fix: no WM_SIZECHANGED */
SendMessage (hWnd, WM_SIZECHANGED,
(WPARAM)&rcWin, (LPARAM)&rcClient);
#endif
}
if (bShow) {
SendMessage (hWnd, WM_NCPAINT, 0, 0);
}
else {
rcBar.left -= pWin->clirect.left;
rcBar.top -= pWin->clirect.top;
rcBar.right -= pWin->clirect.left;
rcBar.bottom -= pWin->clirect.top;
SendMessage (hWnd, WM_NCPAINT, 0, 0);
InvalidateRect (hWnd, &rcBar, TRUE);
}
 
return TRUE;
}
 
static void sbSetScrollInfo (HWND hwnd, PMWSCROLLBARINFO pData, BOOL fRedraw) /* jmt:2k0820 */
{
SCROLLINFO si;
 
int itemCount,itemVisibles;
 
itemCount = pData->maxPos - pData->minPos + 1;
itemVisibles = pData->pageStep;
 
if (itemVisibles >= itemCount)
{
SetScrollPosEx (hwnd, 0, 0); /* jmt: arg2 not used */
EnableScrollBarEx (hwnd, 0, FALSE); /* jmt: arg2 not used */
return;
}
si.fMask = SIF_RANGE | SIF_PAGE | SIF_POS;
si.nMax = itemCount - 1;
si.nMin = 0;
 
si.nPage = itemVisibles; /* jmt(2k0819): new algorithm for SB_THUMBTRACK */
 
si.nPos = pData->curPos;
 
SetScrollInfoEx (hwnd, 0, &si, fRedraw); /* jmt: arg2 not used */
EnableScrollBarEx (hwnd, 0, TRUE); /* jmt: arg2 not used */
}
 
static LRESULT CALLBACK
ScrollbarControlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) /* jmt:2k0820 */
{
DWORD dwStyle;
MWSCROLLBARINFO* pData;
 
int moveRange;
RECT rcBar;
 
dwStyle = (GetWindowStyle (hwnd) & SBS_TYPEMASK);
switch (message)
{
case WM_CREATE:
if (!(pData = malloc (sizeof (MWSCROLLBARINFO))))
{
fprintf(stderr, "Create scroll bar control failure!\n");
return -1;
}
 
pData->minPos=0; /* min value of scroll range.*/
/* max value of scroll range.*/
pData->maxPos=0;
if (dwStyle==SBS_VERT)
moveRange=((hwnd->winrect.bottom-hwnd->winrect.top)
-((hwnd->winrect.right-hwnd->winrect.left)<<1));
else
moveRange=((hwnd->winrect.right-hwnd->winrect.left)
-((hwnd->winrect.bottom-hwnd->winrect.top)<<1));
if (moveRange > MWM_MINBARLEN)
{
 
 
pData->maxPos=moveRange / MWM_MINBARLEN;
if( (moveRange % MWM_MINBARLEN) )
pData->maxPos++;
}
printf("maxPos=%d\n",pData->maxPos);
 
pData->curPos=0; /* current scroll pos.*/
 
/* steps per page.*/
pData->pageStep=1;
if ( (pData->maxPos - 2) > 1)
pData->pageStep = pData->maxPos - 2;
printf("pageStep=%d\n",pData->pageStep);
 
pData->barStart=0; /* start pixel of bar.*/
pData->barLen=MWM_MINBARLEN; /* length of bar.*/
pData->status=SBS_UNKNOWN; /* status of scroll bar.*/
#if 0 /* jmt: must handle WM_MOVE */
pData->rc=hwnd->winrect; /* screen coordinates position*/
#endif
hwnd->userdata = (DWORD)pData;
 
if (dwStyle == SBS_VERT)
{
wndGetVScrollBarRect (hwnd, &rcBar);
rcBar.left --;
rcBar.right --;
}
else
{
wndGetHScrollBarRect (hwnd, &rcBar);
rcBar.top --;
rcBar.bottom --;
}
/* adjust pData->barLen */
wndScrollBarPos (hwnd, dwStyle == SBS_HORZ, &rcBar);
 
break;
case WM_DESTROY:
free ((void *)(hwnd->userdata));
break;
 
case WM_PAINT:
MwPaintScrollbars(hwnd,NULL,dwStyle);
break;
case WM_NCLBUTTONDOWN:
case WM_NCLBUTTONDBLCLK:
case WM_NCMOUSEMOVE:
case WM_NCLBUTTONUP:
MwHandleMessageScrollbar(hwnd, wParam, lParam, message, dwStyle);
break;
 
case WM_HSCROLL:
case WM_VSCROLL:
{
int newTop,itemCount,itemVisibles;
 
pData = (MWSCROLLBARINFO *)hwnd->userdata;
newTop = pData->curPos;
itemCount = pData->maxPos - pData->minPos + 1;
itemVisibles = pData->pageStep;
 
switch(wParam)
{
case SB_LINEDOWN:
#define ITEM_BOTTOM(x) (x->curPos + itemVisibles - 1)
if (ITEM_BOTTOM (pData) < (itemCount - 1 ))
{
newTop ++;
}
break;
case SB_LINEUP:
if (pData->curPos > 0)
{
newTop --;
}
break;
case SB_PAGEDOWN:
if ((pData->curPos + (itemVisibles << 1)) <=
itemCount)
newTop += itemVisibles;
else
newTop = itemCount - itemVisibles;
 
if (newTop < 0)
return 0;
 
break;
 
case SB_PAGEUP:
if (pData->curPos >= itemVisibles)
newTop -= itemVisibles;
else
newTop = 0;
 
break;
 
case SB_THUMBTRACK:
newTop = (int)lParam;
break;
}
pData->curPos = newTop;
 
SendMessage (hwnd, WM_PAINT, 0, 0);
 
sbSetScrollInfo (hwnd, pData, TRUE);
 
return 0;
}
break;
 
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
 
/winlib/graph3d.c
0,0 → 1,540
/*
* Copyright (c) 1999 Greg Haerr <greg@censoft.com>
*
* 3D Graphics Library for Micro-Windows
*/
#define MWINCLUDECOLORS
#include "windows.h"
#include "device.h"
#include "graph3d.h"
#define USEBLIT 1 /* =1 to use memDC's*/
 
static int nxpix;
static int nypix;
static vec1 xscale;
static vec1 yscale;
static vec3 eye;
static vec3 direct;
static double Q[5][5];
static HDC hdc;
static HDC hdcMem;
static HBITMAP hbmp, hbmpOrg;
 
/* setup eye, direction, calc observation matrix Q*/
void
look3(vec1 x, vec1 y, vec1 z)
{
eye.x = x;
eye.y = y;
eye.z = z;
direct.x = -eye.x;
direct.y = -eye.y;
direct.z = -eye.z;
findQ();
}
 
void
init3(HDC hDC, HWND memhwnd)
{
HBRUSH hbr;
 
hdc = hDC;
if(hdc) {
nxpix = hdc->hwnd->clirect.right - hdc->hwnd->clirect.left;
nypix = hdc->hwnd->clirect.bottom - hdc->hwnd->clirect.top;
xscale = (vec1)(nxpix-1) / nxpix * nxpix/2;
yscale = (vec1)(nypix-1) / nypix * nypix/2;
 
if(memhwnd) {
hdcMem = CreateCompatibleDC(NULL);
if(hdcMem) {
hbmp = CreateCompatibleBitmap(hdcMem,
nxpix, nypix);
hbmpOrg = SelectObject(hdcMem, hbmp);
hdc = hdcMem;
}
hbr = (HBRUSH)GetClassLong(memhwnd, GCL_HBRBACKGROUND);
FillRect(hdc, NULL, hbr);
}
/* create pen for setcolor3() color override*/
SelectObject(hdc, CreatePen(PS_SOLID, 1, BLACK));
}
}
 
void
paint3(HDC hDC)
{
if(hdcMem) {
BitBlt(hDC, 0, 0, nxpix, nypix, hdcMem, 0, 0, SRCCOPY);
DeleteObject(SelectObject(hdcMem, hbmpOrg));
DeleteDC(hdcMem);
}
hdcMem = NULL;
}
 
int
fx(vec1 x)
{
return (int)(x * xscale + nxpix*0.5 - 0.5);
}
 
int
fy(vec1 y)
{
return (int)(y * yscale + nypix*0.5 - 0.5);
}
 
void
moveto3(vec2 pt)
{
MoveToEx(hdc, fx(pt.x), fy(pt.y), NULL);
}
 
void
setcolor3(MWCOLORVAL c)
{
if(hdc)
hdc->pen->color = c;
}
 
void
lineto3(vec2 pt)
{
LineTo(hdc, fx(pt.x), fy(pt.y));
}
 
void
polyfill(int n, vec2 points[])
{
int i;
int xoff, yoff;
MWPOINT pv[MAXPOLY];
 
if(!hdc)
return;
 
/* calc window offset*/
xoff = hdc->hwnd->clirect.left;
yoff = hdc->hwnd->clirect.top;
 
/* only plot non-trivial polygons*/
if(n > 2) {
for(i=0; i<n; ++i) {
pv[i].x = fx(points[i].x) + xoff;
pv[i].y = fy(points[i].y) + yoff;
/* fix: floating round error, y intercept difference
* with GdLine
*/
/*pv[i].x = fx(points[i].x + xoff);*/
/*pv[i].y = fy(points[i].y + yoff);*/
}
GdSetForeground(GdFindColor(hdc->pen->color));
GdFillPoly(hdc->psd, n, pv);
}
}
 
void
square(void)
{
vec2 pt0, pt1, pt2, pt3;
 
pt0.x = -1; pt0.y = 1;
pt1.x = -1; pt1.y = -1;
pt2.x = 1; pt2.y = -1;
pt3.x = 1; pt3.y = 1;
moveto3(pt0);
lineto3(pt1);
lineto3(pt2);
lineto3(pt3);
lineto3(pt0);
}
 
void
circle3(vec1 r)
{
vec1 theta = 0;
vec1 thinc = 2*pi/100;
int i;
vec2 pt;
 
pt.x = r;
pt.y = 0.0;
moveto3(pt);
 
for(i=0; i<100; ++i) {
theta = theta + thinc;
pt.x = r*cos(theta);
pt.y = r*sin(theta);
lineto3(pt);
}
}
 
void
daisy(vec1 r,int points)
{
int i, j;
vec1 theta = 0;
vec1 thinc;
vec2 pt[100];
 
/* calculate n points on a circle*/
thinc = 2*pi/points;
for(i=0; i<points; ++i) {
pt[i].x = r*cos(theta);
pt[i].y = r*sin(theta);
theta += thinc;
}
 
/* join point i to point j for all 0 <= i < j < n */
for(i=0; i<points-1; ++i) {
for(j=i+1; j<points; ++j) {
moveto3(pt[i]);
lineto3(pt[j]);
}
}
}
 
void
rose(vec1 r,int levels,int points)
{
int i, j, m, n;
vec1 r1, theta, thinc;
vec2 inner[100];
vec2 outer[100];
vec2 triangle[3];
 
m = levels;
n = points;
thinc = 2*pi/n;
 
/* initial inner circle*/
for(i=0; i<n; ++i) {
inner[i].x = 0.0;
inner[i].y = 0.0;
}
 
/* loop thru m levels*/
for(j=1; j<=m; ++j) {
theta = -j*pi/n;
r1 = r * (vec1)j/m;
 
/* calc n points on outer circle*/
for(i=0; i<n; ++i) {
theta += thinc;
outer[i].x = r1*cos(theta);
outer[i].y = r1*sin(theta);
}
 
/* construct/draw triangles with vertices on
* inner and outer circles
*/
for(i=0; i<n; ++i) {
triangle[0] = outer[i];
triangle[1] = outer[(i+1) % n];
triangle[2] = inner[i];
 
/* fill triangle in red*/
setcolor3(RED);
polyfill(3, triangle);
 
#if 1
/* outline triangle in white*/
setcolor3(WHITE);
moveto3(triangle[0]);
lineto3(triangle[1]);
lineto3(triangle[2]);
lineto3(triangle[0]);
#endif
}
 
/* copy points on outer circle to inner arrays*/
for(i=0; i<n; ++i)
inner[i] = outer[i];
}
}
 
/* draw a triangle with cordners v0, v1, v2*/
void
triangle(vec2 v0, vec2 v1, vec2 v2)
{
vec2 poly[3];
 
poly[0] = v0;
poly[1] = v1;
poly[2] = v2;
 
setcolor3(GREEN);
polyfill(3, poly);
setcolor3(BLACK);
moveto3(poly[2]);
lineto3(poly[0]);
lineto3(poly[1]);
lineto3(poly[2]);
}
 
/* draw a quadrilateral with corners v0, v1, v2, v3*/
void
quadrilateral(vec2 v0, vec2 v1, vec2 v2, vec2 v3)
{
vec2 poly[4];
 
poly[0] = v0;
poly[1] = v1;
poly[2] = v2;
poly[3] = v3;
setcolor3(GREEN);
polyfill(4, poly);
setcolor3(BLACK);
moveto3(poly[3]);
lineto3(poly[0]);
lineto3(poly[1]);
lineto3(poly[2]);
lineto3(poly[3]);
}
 
/* find intersection of lines v0 to v1 and v2 to v3*/
static int
patch(vec2 v0, vec2 v1, vec2 v2, vec2 v3)
{
vec1 denom;
vec1 mu;
vec2 v4;
 
denom = (v1.x-v0.x)*(v3.y-v2.y) - (v1.y-v0.y)*(v3.x-v2.x);
if(fabs(denom) > epsilon) {
mu = ((v2.x-v0.x)*(v3.y-v2.y) - (v2.y-v0.y)*(v3.x-v2.x))/denom;
 
/* if intersection between lines v0 to v1 and v2 to v3,
* call it v4 and form triangles v0,v2,v4 and v1,v3,v4
*/
if(mu >= 0 && mu <= 1) {
v4.x = (1-mu)*v0.x + mu*v1.x;
v4.y = (1-mu)*v0.y + mu*v1.y;
triangle(v0, v2, v4);
triangle(v1, v3, v4);
return 0;
}
}
 
/* else find intersection of lines v0 to v2 and v1 to v3*/
denom = (v2.x-v0.x)*(v3.y-v1.y) - (v2.y-v0.y)*(v3.x-v1.x);
if(fabs(denom) > epsilon) {
mu = ((v1.x-v0.x)*(v3.y-v1.y) - (v1.y-v0.y)*(v3.x-v1.x))/denom;
 
/* if intersection between v0 and v1, call it v4
* and form triangles v0,v1,v4 and v2,v3,v4
*/
if(mu >= 0 && mu <= 1) {
v4.x = (1-mu)*v0.x + mu*v2.x;
v4.y = (1-mu)*v0.y + mu*v2.y;
triangle(v0, v1, v4);
triangle(v2, v3, v4);
return 0;
}
}
 
/* there are no proper intersections so form quadrilateral v0,v1,v3,v2*/
quadrilateral(v0, v1, v3, v2);
return 1;
}
 
/* plotted function*/
static vec1
plotfn(vec1 x, vec1 z)
{
vec1 t;
 
/* y = 4sin(sqrt(x*x+z*z))/sqrt(x*x+z*z) */
t = sqrt(x*x + z*z);
if(fabs(t) < epsilon)
return 4.0;
return 4.0 * sin(t) / t;
}
 
/* draw mathematical function plotfn*/
void
drawgrid(vec1 xmin, vec1 xmax, int nx, vec1 zmin, vec1 zmax, int nz)
{
int i, j;
vec1 xi, xstep, yij;
vec1 zj, zstep;
vec2 v[2][100];
double S[5][5];
 
/* scale it down*/
scale3(1.0/(xmax-xmin)*2, 1.0/(xmax-xmin)*2, 1.0/(zmax-zmin), S);
mult3(Q, S, Q);
 
/* grid from xmin to xmax in nx steps and zmin to xmax in nz steps*/
xstep = (xmax-xmin)/nx;
zstep = (zmax-zmin)/nz;
xi = xmin;
zj = zmin;
 
/* calc grid points on first fixed-z line, fine the y-height
* and transfrorm the points (xi,yij,zj) into observed
* position. Observed first set stored in v[0,1..nx]
*/
for(i=0; i<=nx; ++i) {
yij = plotfn(xi, zj);
v[0][i].x = Q[1][1]*xi + Q[1][2]*yij + Q[1][3]*zj;
v[0][i].y = Q[2][1]*xi + Q[2][2]*yij + Q[2][3]*zj;
xi += xstep;
}
 
/* run thru consecutive fixed-z lines (the second set)*/
for(j=0; j<nz; ++j) {
xi = xmin;
zj += zstep;
 
/* calc grid points on this second set, find the
* y-height and transform the points (xi,yij,zj)
* into observed position. Observed second set
* stored in v[1,0..nx]
*/
for(i=0; i<=nx; ++i) {
yij = plotfn(xi, zj);
v[1][i].x = Q[1][1]*xi + Q[1][2]*yij + Q[1][3]*zj;
v[1][i].y = Q[2][1]*xi + Q[2][2]*yij + Q[2][3]*zj;
xi += xstep;
}
 
/* run thru the nx patches formed by these two sets*/
for(i=0; i<nx; ++i)
patch(v[0][i], v[0][i+1], v[1][i], v[1][i+1]);
 
/* copy second set into first set*/
for(i=0; i<=nx; ++i)
v[0][i] = v[1][i];
}
}
 
/* returns the angle whose tangent is y/x.
* all anomalies such as x=0 are also checked
*/
vec1
angle(vec1 x, vec1 y)
{
if(fabs(x) < epsilon)
if(fabs(y) < epsilon)
return 0.0;
else
if(y > 0.0)
return pi*0.5;
else return pi*1.5;
else
if(x < 0.0)
return atan(y/x) + pi;
else return atan(y/x);
}
 
/* calc 3d scaling matrix A giving scaling vector sx,sy,sz.
* one unit on the x axis becomes sx units, one unit on y, sy,
* and one unit on the z axis becomes sz units
*/
void
scale3(vec1 sx, vec1 sy, vec1 sz, double A[][5])
{
int i, j;
 
for(i=1; i<5; ++i)
for(j=1; j<5; ++j)
A[i][j] = 0.0;
A[1][1] = sx;
A[2][2] = sy;
A[3][3] = sz;
A[4][4] = 1.0;
}
 
/* calc 3d axes translation matrix A
* origin translated by vectdor tx,ty,tz
*/
void
tran3(vec1 tx, vec1 ty, vec1 tz, double A[][5])
{
int i, j;
 
for(i=1; i<5; ++i) {
for(j=1; j<5; ++j)
A[i][j] = 0.0;
A[i][i] = 1.0;
}
A[1][4] = -tx;
A[2][4] = -ty;
A[3][4] = -tz;
}
 
/* calc 3d axes rotation matrix A. The axes are
* rotated anti-clockwise through an angle theta radians
* about an axis specified by m: m=1 means x, m=2 y, m=3 z axis
*/
void
rot3(int m, vec1 theta, double A[][5])
{
int i, j, m1, m2;
vec1 c, s;
 
for(i=1; i<5; ++i)
for(j=1; j<5; ++j)
A[i][j] = 0.0;
A[m][m] = 1.0;
A[4][4] = 1.0;
m1 = (m % 3) + 1;
m2 = (m1 % 3) + 1;
c = cos(theta);
s = sin(theta);
A[m1][m1] = c;
A[m2][m2] = c;
A[m1][m2] = s;
A[m2][m1] = s;
}
 
/* calc the matrix product C of two matrices A and B*/
void
mult3(double A[][5], double B[][5], double C[][5])
{
int i, j, k;
vec1 ab;
 
for(i=1; i<5; ++i)
for(j=1; j<5; ++j) {
ab = 0;
for(k=1; k<5; ++k)
ab += A[i][k] * B[k][j];
C[i][j] = ab;
}
}
 
/* calc observation matrix Q for given observer*/
void
findQ(void)
{
vec1 alpha, beta, gamma, v, w;
double E[5][5];
double F[5][5];
double G[5][5];
double H[5][5];
double U[5][5];
 
/* calc translation matrix F*/
tran3(eye.x, eye.y, eye.z, F);
 
/* calc rotation matrix G*/
alpha = angle(-direct.x, -direct.y);
rot3(3, alpha, G);
 
/* calc rotation matrix H*/
v = sqrt(direct.x*direct.x + direct.y*direct.y);
beta = angle(-direct.z, v);
rot3(2, beta, H);
 
/* calc rotation matrix U*/
w = sqrt(v*v + direct.z*direct.z);
gamma = angle(-direct.x*w, direct.y*direct.z);
rot3(3, -gamma, U);
 
/* combine the transformations to find Q*/
mult3(G, F, Q);
mult3(H, Q, E);
mult3(U, E, Q);
}
/winlib/Makefile
0,0 → 1,50
##############################################################################
# Microwindows template Makefile
# Copyright (c) 2000 Martin Jolicoeur, Greg Haerr
##############################################################################
 
ifndef TOP
TOP = ../..
CONFIG = $(TOP)/config
endif
 
include $(CONFIG)
 
######################## Additional Flags section ############################
 
# Directories list for header files
INCLUDEDIRS +=
# Defines for preprocessor
DEFINES +=
 
# Compilation flags for C files OTHER than include directories
CFLAGS +=
# Preprocessor flags OTHER than defines
CPPFLAGS +=
# Linking flags
LDFLAGS +=
 
############################# targets section ################################
 
ifeq ($(MICROWIN), Y)
 
# If you want to create a library with the objects files, define the name here
LIBNAME = libmwinlib.a
LIBNAMESO = libmwinlib.so
 
# List of objects to compile
OBJS = draw3d.o ptinsid.o insetr.o fastfill.o graph3d.o mwuser.o
 
ifneq ($(ARCH), ELKS)
OBJS += button.o edit.o listbox.o progbar.o static.o combobox.o caret.o \
scrlbar.o medit.o
endif
 
endif
 
######################### Makefile.rules section #############################
 
include $(TOP)/Makefile.rules
 
######################## Tools targets section ###############################
 
/winlib/progbar.c
0,0 → 1,363
/*
* Copyright (C) 1999, 2000, Wei Yongming.
* Portions Copyright (c) 2000 Greg Haerr <greg@censoft.com>
*
* Progress bar for Microwindows win32 api.
*/
 
/*
** This library is free software; you can redistribute it and/or
** modify it under the terms of the GNU Library General Public
** License as published by the Free Software Foundation; either
** version 2 of the License, or (at your option) any later version.
**
** This library is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
** Library General Public License for more details.
**
** You should have received a copy of the GNU Library General Public
** License along with this library; if not, write to the Free
** Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
** MA 02111-1307, USA
*/
 
/*
** Alternatively, the contents of this file may be used under the terms
** of the Mozilla Public License (the "MPL License") in which case the
** provisions of the MPL License are applicable instead of those above.
*/
 
/* Copyright (C) 1999, 2000, Wei Yongming.
**
** Note:
** Originally by Zhao Jianghua.
**
** Create date: 1999/8/29
**
** Modify records:
**
** Who When Where For What Status
**-----------------------------------------------------------------------------
** WEI Yongming 1999/10/27 Tsinghua unsigned int Finished
** WEI Yongming 1999/10/27 Tsinghua FPException fixing Finished
** WEI Yongming 2000/02/24 Tsinghua Add MPL License Finished
** Kevin Tseng 2000/05/24 gv port to microwin ported
** Greg Haerr 2000/06/15 Utah removed floats Finished
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MWINCLUDECOLORS
#include "windows.h" /* windef.h, winuser.h */
#include "wintools.h" /* Draw3dBox */
#include "device.h" /* GdGetTextSize */
 
#define TEST 1 /* =1 for testing*/
 
#define WIDTH_PBAR_BORDER 2
 
typedef struct _PROGRESSDATA {
unsigned int nMin;
unsigned int nMax;
unsigned int nPos;
unsigned int nStepInc;
} PROGRESSDATA, *PPROGRESSDATA;
 
static LRESULT CALLBACK
ProgressBarCtrlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
 
int WINAPI MwRegisterProgressBarControl(HINSTANCE hInstance)
{
WNDCLASS wc;
 
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_GLOBALCLASS;
wc.lpfnWndProc = (WNDPROC)ProgressBarCtrlProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = 0; /*LoadCursor(NULL, IDC_ARROW);*/
wc.hbrBackground= GetStockObject(LTGRAY_BRUSH);
wc.lpszMenuName = NULL;
wc.lpszClassName= "PROGBAR";
 
return RegisterClass(&wc);
}
 
static void
FillBox(HDC hdc, int x, int y, int w, int h, COLORREF cr)
{
RECT rc;
 
if (w <= 0)
return;
SetRect(&rc, x, y, x+w, y+h);
FastFillRect(hdc, &rc, cr);
}
 
static int
GetSysCharWidth(HDC hdc)
{
int cw, ch, cb;
 
GdGetTextSize(hdc->font->pfont,"X",1, &cw,&ch,&cb,MWTF_ASCII);
return cw;
}
 
static int
GetSysCharHeight(HDC hdc)
{
int cw, ch, cb;
 
GdGetTextSize(hdc->font->pfont,"X",1, &cw,&ch,&cb,MWTF_ASCII);
return ch;
}
 
void pbarOnDraw (HWND hwnd, HDC hdc, PROGRESSDATA* pData, BOOL fVertical,
BOOL fErase)
{
int x, y, w, h;
unsigned int nAllPart;
unsigned int nNowPart;
int whOne, nRem;
int ix, iy;
int i;
int step;
COLORREF cr;
RECT rcClient;
char szText[8];
if (!hdc || (pData->nMax == pData->nMin))
return;
if ((pData->nMax - pData->nMin) > 5)
step = 5;
else
step = 1;
 
GetClientRect (hwnd, &rcClient);
SelectObject(hdc, GetStockObject(DEFAULT_GUI_FONT));
 
x = rcClient.left + WIDTH_PBAR_BORDER;
y = rcClient.top + WIDTH_PBAR_BORDER;
w = (rcClient.right - rcClient.left) - (WIDTH_PBAR_BORDER << 1);
h = (rcClient.bottom - rcClient.top) - (WIDTH_PBAR_BORDER << 1);
 
nAllPart = (pData->nMax - pData->nMin) / step;
nNowPart = (pData->nPos - pData->nMin) / step;
if (fVertical) {
whOne = h / nAllPart;
nRem = h % nAllPart;
} else {
whOne = w / nAllPart;
nRem = w % nAllPart;
}
if (fErase)
FillBox (hdc, x, y, w, h, GetSysColor(COLOR_BTNSHADOW));
 
if(whOne >= 4) {
if (fVertical) {
for (i = 0, iy = y + h - 1; i < nNowPart; ++i) {
#if 0
if ((iy - whOne) < y)
whOne = iy - y;
#endif
 
FillBox (hdc, x, iy - whOne, w, whOne - 1, BLUE);
 
iy -= whOne + 1;
#if 0
if(nRem > 0) {
iy --;
nRem --;
}
#endif
}
}
else {
for (i = 0, ix = x + 1; i < nNowPart; ++i) {
#if 0
if ((ix + whOne) > (x + w))
whOne = x + w - ix;
#endif
FillBox (hdc, ix, y, whOne - 1, h, BLUE);
ix += whOne + 1;
#if 0
if(nRem > 0) {
ix ++;
nRem --;
}
#endif
}
}
}
else {
/* no vertical support */
int d = nNowPart*100/nAllPart;
int maxw = GetSysCharWidth (hdc) << 2;
int charh = GetSysCharHeight (hdc);
 
if (d > 50)
cr = BLUE;
else
cr = GetSysColor(COLOR_BTNSHADOW);
FillBox (hdc, x + ((w - maxw)>>1), y + ((h - charh) > 1), maxw,
charh - 1, cr);
FillBox (hdc, x, y, (int)((long)w*d/100L), h, BLUE);
SetTextColor (hdc, WHITE);
SetBkMode (hdc, TRANSPARENT);
sprintf (szText, "%d%%", d);
TextOut (hdc, x + ((w - GetSysCharWidth (hdc) * strlen (szText) )>>1),
y + ((h - GetSysCharHeight(hdc) )>>1),
szText, strlen(szText));
}
}
 
static void pbarNormalizeParams (const HWND pCtrl,
PROGRESSDATA* pData, BOOL fNotify)
{
if (pData->nPos > pData->nMax) {
if (fNotify)
SendMessage (GetParent ((HWND)pCtrl), WM_COMMAND,
(WPARAM)MAKELONG (pCtrl->id, PBN_REACHMAX), (LPARAM)pCtrl);
pData->nPos = pData->nMax;
}
 
if (pData->nPos < pData->nMin) {
if (fNotify)
SendMessage (GetParent ((HWND)pCtrl), WM_COMMAND,
(WPARAM)MAKELONG (pCtrl->id, PBN_REACHMIN), (LPARAM)pCtrl);
pData->nPos = pData->nMin;
}
}
 
static LRESULT CALLBACK
ProgressBarCtrlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
HWND pCtrl;
PROGRESSDATA* pData;
BOOL fErase;
RECT rc;
PAINTSTRUCT ps;
int pos;
pCtrl = hwnd;
switch (message)
{
case WM_CREATE:
if (!(pData = malloc (sizeof (PROGRESSDATA)))) {
fprintf(stderr, "Create progress bar control failure!\n");
return -1;
}
#if TEST
pData->nMax = 1000;
pData->nMin = 0;
pData->nPos = 500;
pData->nStepInc = 100;
#else
pData->nMax = 100;
pData->nMin = 0;
pData->nPos = 0;
pData->nStepInc = 10;
#endif
 
pCtrl->userdata = (DWORD)pData;
break;
case WM_DESTROY:
free ((void *)(pCtrl->userdata));
break;
 
case WM_GETDLGCODE:
return DLGC_STATIC;
 
case WM_NCPAINT:
if(GetWindowLong(hwnd, GWL_STYLE) & WS_BORDER) {
GetWindowRect(hwnd, &rc);
hdc = GetWindowDC(hwnd);
Draw3dBox(hdc, rc.left, rc.top, rc.right-rc.left,
rc.bottom-rc.top, GetSysColor(COLOR_BTNSHADOW),
GetSysColor(COLOR_BTNHIGHLIGHT));
}
break;
 
case WM_PAINT:
hdc = BeginPaint (hwnd,&ps);
pbarOnDraw (hwnd, hdc, (PROGRESSDATA *)pCtrl->userdata,
hwnd->style & PBS_VERTICAL, TRUE);
EndPaint (hwnd, &ps);
break;
 
case PBM_SETRANGE:
pData = (PROGRESSDATA *)pCtrl->userdata;
pData->nMin = min (wParam, lParam);
pData->nMax = max (wParam, lParam);
if (pData->nPos > pData->nMax)
pData->nPos = pData->nMax;
if (pData->nPos < pData->nMin)
pData->nPos = pData->nMin;
break;
case PBM_SETSTEP:
pData = (PROGRESSDATA *)pCtrl->userdata;
pData->nStepInc = wParam;
break;
case PBM_SETPOS:
pData = (PROGRESSDATA *)pCtrl->userdata;
if (pData->nPos == wParam)
break;
 
fErase = (wParam < pData->nPos);
pData->nPos = wParam;
pbarNormalizeParams (pCtrl, pData, hwnd->style & PBS_NOTIFY);
InvalidateRect(hwnd, NULL, fErase);
break;
case PBM_DELTAPOS:
pData = (PROGRESSDATA *)pCtrl->userdata;
 
if (wParam == 0)
break;
fErase = (wParam < 0);
pData->nPos += wParam;
pbarNormalizeParams (pCtrl, pData, hwnd->style & PBS_NOTIFY);
InvalidateRect(hwnd, NULL, fErase);
break;
case PBM_STEPIT:
pData = (PROGRESSDATA *)pCtrl->userdata;
if (pData->nStepInc == 0)
break;
 
fErase = (pData->nStepInc < 0);
pData->nPos += pData->nStepInc;
pbarNormalizeParams (pCtrl, pData, hwnd->style & PBS_NOTIFY);
InvalidateRect(hwnd, NULL, fErase);
break;
#if TEST
case WM_LBUTTONDOWN:
case WM_LBUTTONDBLCLK:
pData = (PROGRESSDATA *)pCtrl->userdata;
pos = pData->nPos;
pos += pData->nStepInc;
if (pos > pData->nMax)
pos = pData->nMin;
SendMessage(hwnd, PBM_SETPOS, pos, 0L);
break;
#endif
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
/windefw.c
0,0 → 1,402
/*
* Copyright (c) 1999 Greg Haerr <greg@censoft.com>
*
* DefWindowProc implementation for Micro-Windows
* This file should ideally only include windows.h, and be built
* on top of regular win32 api calls. For speed, however,
* certain knowledge of the internal hwnd is known...
*/
#include "windows.h"
#include "wintern.h"
#include "device.h"
#include "wintools.h" /* Draw3dBox, etc*/
#include <string.h>
 
/* desktop wallpaper image*/
static PMWIMAGEHDR pImageWallpaper = NULL;
 
/* local routines*/
static void GetCloseBoxRect(HWND hwnd, LPRECT lprc);
static void DrawXORFrame(HWND hwnd,int x, int y, BOOL bDrawCurrent);
static RECT lastrc;
 
BOOL
MwSetDesktopWallpaper(PMWIMAGEHDR pImage)
{
pImageWallpaper = pImage;
InvalidateRect(rootwp, NULL, TRUE);
return TRUE;
}
 
/* needed only for XORMOVE repaint algorithm*/
static void
DrawXORFrame(HWND hwnd,int x, int y, BOOL bDrawCurrent)
{
HDC hdc;
RECT rc;
 
hdc = GetDCEx(NULL, NULL, DCX_WINDOW|DCX_EXCLUDEUPDATE);
SelectObject(hdc, GetStockObject(NULL_BRUSH));
SelectObject(hdc, GetStockObject(WHITE_PEN));
GdSetMode(MWMODE_XOR);
if(!IsRectEmpty(&lastrc))
Rectangle(hdc, lastrc.left, lastrc.top, lastrc.right,
lastrc.bottom);
GetWindowRect(hwnd, &rc);
SetRect(&lastrc, rc.left+x, rc.top+y, rc.right+x, rc.bottom+y);
if(bDrawCurrent)
Rectangle(hdc, lastrc.left, lastrc.top, lastrc.right,
lastrc.bottom);
ReleaseDC(NULL, hdc);
GdSetMode(MWMODE_COPY);
}
 
/*
* This procedure implements the messages passed by the window
* manager for default processing on behalf of the window.
*/
LRESULT WINAPI
DefWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
RECT rc;
DWORD dwStyle;
HBRUSH hbr;
HPEN hpen, holdpen;
PAINTSTRUCT ps;
POINT curpt;
int x, y;
HWND wp;
HWND oldActive;
COLORREF crCaption;
LPNCCALCSIZE_PARAMS lpnc;
CHAR szTitle[64];
static POINT startpt;
 
switch(msg) {
case WM_NCCALCSIZE:
/* calculate client rect from passed window rect in rgrc[0]*/
lpnc = (LPNCCALCSIZE_PARAMS)lParam;
dwStyle = GetWindowLong(hwnd, GWL_STYLE);
if(dwStyle & WS_BORDER) {
if((dwStyle & WS_CAPTION) == WS_CAPTION) {
InflateRect(&lpnc->rgrc[0],
-mwSYSMETRICS_CXFRAME,
-mwSYSMETRICS_CYFRAME);
lpnc->rgrc[0].top += mwSYSMETRICS_CYCAPTION + 1;
} else
InflateRect(&lpnc->rgrc[0], -1, -1);
}
break;
 
case WM_NCPAINT:
/* repaint all non-client area*/
dwStyle = GetWindowLong(hwnd, GWL_STYLE);
 
if(dwStyle & WS_BORDER) {
hdc = GetWindowDC(hwnd);
GetWindowRect(hwnd, &rc);
 
if((dwStyle & WS_CAPTION) == WS_CAPTION) {
/* draw 2-line 3d border around window*/
Draw3dOutset(hdc, rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top);
InflateRect(&rc, -2, -2);
 
/* draw 1-line inset inside border*/
hpen = CreatePen(PS_SOLID, 1,
GetSysColor(COLOR_BTNFACE));
holdpen = SelectObject(hdc, hpen);
SelectObject(hdc, GetStockObject(NULL_BRUSH));
Rectangle(hdc, rc.left, rc.top, rc.right,
rc.bottom);
InflateRect(&rc, -1, -1);
 
/* fill caption*/
rc.bottom = rc.top + mwSYSMETRICS_CYCAPTION;
crCaption = GetActiveWindow()==hwnd?
GetSysColor(COLOR_ACTIVECAPTION):
GetSysColor(COLOR_INACTIVECAPTION);
hbr = CreateSolidBrush(crCaption);
FillRect(hdc, &rc, hbr);
DeleteObject(hbr);
 
/* draw 1 line under caption*/
MoveToEx(hdc, rc.left, rc.bottom, NULL);
LineTo(hdc, rc.right, rc.bottom);
DeleteObject(SelectObject(hdc, holdpen));
 
/* draw caption text*/
if(GetWindowText(hwnd, szTitle,
sizeof(szTitle))) {
SetBkMode(hdc, TRANSPARENT);
/* set background color even though
* transparent in case GdArea is used
* to draw text which compares
* gr_foreground != gr_background
* when transparent...
*/
SetBkColor(hdc, crCaption);
SetTextColor(hdc,
GetActiveWindow()==hwnd?
GetSysColor(COLOR_CAPTIONTEXT):
GetSysColor(COLOR_INACTIVECAPTIONTEXT));
SelectObject(hdc,
GetStockObject(DEFAULT_GUI_FONT));
GetWindowRect(hwnd, &rc);
TextOut(hdc, rc.left+4, rc.top+2,
szTitle, strlen(szTitle));
}
 
/* draw close box*/
GetCloseBoxRect(hwnd, &rc);
/*DrawDIB(hdc, rc.right-XSIZE_CLOSEBOX-3,
rc.top+3, &image_close4);*/
Draw3dBox(hdc, rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top,
GetSysColor(COLOR_BTNHIGHLIGHT),
GetSysColor(COLOR_WINDOWFRAME));
InflateRect(&rc, -1, -1);
hbr = CreateSolidBrush(
GetSysColor(COLOR_BTNFACE));
FillRect(hdc, &rc, hbr);
DeleteObject(hbr);
 
InflateRect(&rc, -1, -1);
MoveToEx(hdc, rc.left, rc.top, NULL);
LineTo(hdc, rc.right-1, rc.bottom-1);
MoveToEx(hdc, rc.left, rc.bottom-1, NULL);
LineTo(hdc, rc.right-1, rc.top);
} else {
SelectObject(hdc, GetStockObject(NULL_BRUSH));
Rectangle(hdc, rc.left, rc.top, rc.right,
rc.bottom);
}
ReleaseDC(hwnd, hdc);
}
break;
 
case WM_NCHITTEST:
/* if system is dragging a window, always return caption*/
if(dragwp)
return HTCAPTION;
 
/* Determine what part of the window the mouse is over*/
POINTSTOPOINT(curpt, lParam);
 
if(PtInRect(&hwnd->clirect, curpt))
return HTCLIENT;
 
if(PtInRect(&hwnd->vscroll.rc, curpt))
return HTVSCROLL;
if(PtInRect(&hwnd->hscroll.rc, curpt))
return HTHSCROLL;
 
dwStyle = GetWindowLong(hwnd, GWL_STYLE);
if((dwStyle & WS_CAPTION) == WS_CAPTION) {
GetCloseBoxRect(hwnd, &rc);
if(PtInRect(&rc, curpt))
return HTCLOSE;
 
GetWindowRect(hwnd, &rc);
InflateRect(&rc, -2, -2);
rc.bottom = rc.top + mwSYSMETRICS_CYCAPTION;
if(PtInRect(&rc, curpt))
return HTCAPTION;
 
GetWindowRect(hwnd, &rc);
InflateRect(&rc, -2, -2);
rc.top += mwSYSMETRICS_CYCAPTION;
if(PtInRect(&rc, curpt))
return HTCLIENT;
 
return HTBORDER;
}
return HTNOWHERE;
 
case WM_NCLBUTTONDOWN:
/* Handle default actions for mouse down on window*/
if(wParam == HTCLOSE) {
SendMessage(hwnd, WM_CLOSE, 0, 0L);
break;
}
 
/* set focus on mouse down, repaint if necessary*/
oldActive = GetActiveWindow();
if(wParam == HTCLIENT || wParam == HTVSCROLL ||
wParam == HTHSCROLL)
/* activate and raise window if in client area*/
/* kaffe port requires this commented out*/
SetForegroundWindow(hwnd);
else {
/* otherwise just change focus window, same z order*/
/* this will activate it's top level parent*/
SetFocus(hwnd);
}
/* repaint captions now because of activation change*/
UpdateWindow(oldActive);
UpdateWindow(hwnd);
 
if(wParam == HTVSCROLL || wParam == HTHSCROLL) {
MwHandleNCMessageScrollbar(hwnd, msg, wParam, lParam);
break;
}
 
/* start window drag if in caption area*/
if(wParam == HTCAPTION && hwnd != rootwp) {
POINTSTOPOINT(startpt, lParam);
if(!(GetWindowLong(hwnd, GWL_STYLE) & WS_MAXIMIZE))
dragwp = hwnd;
SetRectEmpty(&lastrc); /* XORMOVE only*/
}
break;
 
case WM_NCMOUSEMOVE:
if(wParam == HTVSCROLL || wParam == HTHSCROLL) {
MwHandleNCMessageScrollbar(hwnd, msg, wParam, lParam);
break;
}
 
/* drag window with mousemove after mousedown*/
if(dragwp == hwnd) {
POINTSTOPOINT(curpt, lParam);
x = curpt.x - startpt.x;
y = curpt.y - startpt.y;
 
if(mwERASEMOVE) {
GetWindowRect(hwnd, &rc);
MoveWindow(hwnd, rc.left+x, rc.top+y,
rc.right-rc.left, rc.bottom-rc.top,
TRUE);
startpt = curpt;
} else
DrawXORFrame(hwnd, x, y, TRUE);
}
break;
 
case WM_NCLBUTTONUP:
/* stop window drag*/
if(dragwp == hwnd) {
dragwp = NULL;
 
if(mwERASEMOVE) {
/*
* User stopped moving window, repaint
* windows previously queued for painting.
*/
for(wp=listwp; wp; wp=wp->next)
if(wp->gotPaintMsg == PAINT_DELAYPAINT)
wp->gotPaintMsg = PAINT_NEEDSPAINT;
} else {
POINTSTOPOINT(curpt, lParam);
x = curpt.x - startpt.x;
y = curpt.y - startpt.y;
DrawXORFrame(hwnd, x, y, FALSE);
GetWindowRect(hwnd, &rc);
MoveWindow(hwnd, rc.left+x, rc.top+y,
rc.right-rc.left, rc.bottom-rc.top, TRUE);
}
}
 
if(wParam == HTVSCROLL || wParam == HTHSCROLL) {
MwHandleNCMessageScrollbar(hwnd, msg, wParam, lParam);
break;
}
break;
 
case WM_NCLBUTTONDBLCLK:
if(wParam == HTVSCROLL || wParam == HTHSCROLL) {
MwHandleNCMessageScrollbar(hwnd, msg, wParam, lParam);
break;
}
 
/* maximize/restore processing*/
if(wParam != HTCAPTION)
break;
 
if((hwnd->style & WS_CAPTION) == WS_CAPTION) {
if(hwnd->style & WS_MAXIMIZE) {
rc = hwnd->restorerc;
MoveWindow(hwnd, rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top,
TRUE);
hwnd->style &= ~WS_MAXIMIZE;
} else {
hwnd->restorerc = hwnd->winrect;
GetWindowRect(rootwp, &rc);
MoveWindow(hwnd, -mwSYSMETRICS_CXFRAME,
-mwSYSMETRICS_CYFRAME,
rc.right+2*mwSYSMETRICS_CXFRAME,
rc.bottom+2*mwSYSMETRICS_CYFRAME, TRUE);
hwnd->style |= WS_MAXIMIZE;
}
}
break;
 
case WM_GETTEXTLENGTH:
/* Get window text length. This routine requires
* knowledge of the internal window structure
*/
return strlen(hwnd->szTitle);
 
case WM_GETTEXT:
/* Get window text. This routine requires
* knowledge of the internal window structure
*/
return strzcpy((LPSTR)lParam, hwnd->szTitle, wParam);
 
case WM_SETTEXT:
/* Set window text. This routine requires
* knowledge of the internal window structure.
* Note that setting text doesn't invalidate the window.
*/
strzcpy(hwnd->szTitle, (LPSTR)lParam, sizeof(hwnd->szTitle));
return TRUE;
 
case WM_CLOSE:
DestroyWindow(hwnd);
if(hwnd == rootwp)
PostQuitMessage(0);
break;
 
case WM_ERASEBKGND:
/* erase background with class background brush*/
hbr = (HBRUSH)GetClassLong(hwnd, GCL_HBRBACKGROUND);
if(!hbr)
return 0;
/* don't exclude update region*/
hdc = GetDCEx(hwnd, NULL, DCX_DEFAULTCLIP);
FillRect(hdc, NULL, hbr);
ReleaseDC(hwnd, hdc);
return 1;
 
case WM_PAINT:
/* required to send erasebkgnd for desktop window*/
hdc = BeginPaint(hwnd, &ps);
 
/* draw desktop wallpaper*/
if(hwnd == rootwp && pImageWallpaper) {
GetWindowRect(hwnd, &rc);
DrawDIB(hdc,
(rc.right-rc.left-pImageWallpaper->width)/2,
(rc.bottom-rc.top-pImageWallpaper->height)/2,
pImageWallpaper);
}
 
EndPaint(hwnd, &ps);
break;
}
return 0;
}
 
static void
GetCloseBoxRect(HWND hwnd, LPRECT lprc)
{
#define XSIZE_CLOSEBOX 9
#define YSIZE_CLOSEBOX 9
GetWindowRect(hwnd, lprc);
lprc->left = lprc->right - XSIZE_CLOSEBOX - 5;
lprc->top = lprc->top + 5;
lprc->right = lprc->left + XSIZE_CLOSEBOX;
lprc->bottom = lprc->top + YSIZE_CLOSEBOX;
}
/winrgn.c
0,0 → 1,566
/*
* Portions Copyright (c) 1999, 2000 Greg Haerr <greg@censoft.com>
* Somewhat less shamelessly ripped from the Wine distribution
*
* Win32 API Region Management Routines.
* Win32 API Complex Rectangle Routines.
*
* GDI region objects. Shamelessly ripped out from the X11 distribution
* Thanks for the nice licence.
*
* Copyright 1993, 1994, 1995 Alexandre Julliard
* Modifications and additions: Copyright 1998 Huw Davies
*/
#include "windows.h"
#include "device.h"
#include <stdlib.h>
#include <string.h>
 
/* later, error checking can be built into this get*/
#define GDI_GetObjPtr(hrgn,type) (hrgn)
 
/* local functions*/
static HRGN REGION_CreateRegion(void);
/*BOOL REGION_UnionRectWithRgn( HRGN hrgn, const RECT *lpRect );*/
/*BOOL REGION_FrameRgn( HRGN hDest, HRGN hSrc, INT x, INT y );*/
 
#define EMPTY_REGION(pReg) { \
(pReg)->numRects = 0; \
(pReg)->extents.left = (pReg)->extents.top = 0; \
(pReg)->extents.right = (pReg)->extents.bottom = 0; \
(pReg)->type = NULLREGION; \
}
 
/*
* Create a new empty region.
*/
static HRGN
REGION_CreateRegion(void)
{
MWRGNOBJ *obj;
obj = GdItemNew(MWRGNOBJ);
if(!obj)
return NULL;
obj->hdr.type = OBJ_REGION;
obj->hdr.stockobj = FALSE;
if(!(obj->rgn = GdAllocRegion())) {
GdItemFree(obj);
return NULL;
}
return (HRGN)obj;
}
 
 
INT WINAPI
OffsetRgn( HRGN hrgn, INT x, INT y )
{
MWRGNOBJ * obj = (MWRGNOBJ *) GDI_GetObjPtr( hrgn, OBJ_REGION );
 
if (obj)
{
GdOffsetRegion(obj->rgn, x, y);
return obj->rgn->type;
}
return ERRORREGION;
}
 
 
INT WINAPI
GetRgnBox( HRGN hrgn, LPRECT rect )
{
MWRGNOBJ * obj = (MWRGNOBJ *) GDI_GetObjPtr( hrgn, OBJ_REGION );
if (obj)
return GdGetRegionBox(obj->rgn, rect);
return ERRORREGION;
}
 
 
HRGN WINAPI
CreateRectRgn(INT left, INT top, INT right, INT bottom)
{
HRGN hrgn;
 
if (!(hrgn = REGION_CreateRegion()))
return 0;
/*TRACE(region, "\n");*/
SetRectRgn(hrgn, left, top, right, bottom);
return hrgn;
}
 
 
HRGN WINAPI
CreateRectRgnIndirect( const RECT* rect )
{
return CreateRectRgn( rect->left, rect->top, rect->right, rect->bottom );
}
 
 
/*
* Allows either or both left and top to be greater than right or bottom.
*/
VOID WINAPI
SetRectRgn( HRGN hrgn, INT left, INT top, INT right, INT bottom )
{
MWRGNOBJ * obj;
MWCLIPREGION *rgn;
 
/*TRACE(region, " %04x %d,%d-%d,%d\n", hrgn, left, top, right, bottom );*/
if (!(obj = (MWRGNOBJ *) GDI_GetObjPtr( hrgn, OBJ_REGION ))) return;
 
if (left > right) { INT tmp = left; left = right; right = tmp; }
if (top > bottom) { INT tmp = top; top = bottom; bottom = tmp; }
 
rgn = obj->rgn;
GdSetRectRegion(rgn, left, top, right, bottom);
}
 
 
HRGN WINAPI
CreateRoundRectRgn( INT left, INT top, INT right, INT bottom,
INT ellipse_width, INT ellipse_height )
{
MWRGNOBJ * obj;
HRGN hrgn;
int asq, bsq, d, xd, yd;
RECT rect;
/* Check if we can do a normal rectangle instead */
if (ellipse_width == 0 || ellipse_height == 0)
return CreateRectRgn( left, top, right, bottom );
 
/* Make the dimensions sensible */
if (left > right) { INT tmp = left; left = right; right = tmp; }
if (top > bottom) { INT tmp = top; top = bottom; bottom = tmp; }
 
ellipse_width = abs(ellipse_width);
ellipse_height = abs(ellipse_height);
 
/* Create region */
 
if (!(hrgn = REGION_CreateRegion()))
return 0;
obj = (MWRGNOBJ *)hrgn;
/*TRACE(region,"(%d,%d-%d,%d %dx%d): ret=%04x\n",
left, top, right, bottom, ellipse_width, ellipse_height, hrgn);*/
 
/* Check parameters */
 
if (ellipse_width > right-left) ellipse_width = right-left;
if (ellipse_height > bottom-top) ellipse_height = bottom-top;
 
/* Ellipse algorithm, based on an article by K. Porter */
/* in DDJ Graphics Programming Column, 8/89 */
 
asq = ellipse_width * ellipse_width / 4; /* a^2 */
bsq = ellipse_height * ellipse_height / 4; /* b^2 */
if (asq == 0) asq = 1;
if (bsq == 0) bsq = 1;
d = bsq - asq * ellipse_height / 2 + asq / 4; /* b^2 - a^2b + a^2/4 */
xd = 0;
yd = asq * ellipse_height; /* 2a^2b */
 
rect.left = left + ellipse_width / 2;
rect.right = right - ellipse_width / 2;
 
/* Loop to draw first half of quadrant */
 
while (xd < yd)
{
if (d > 0) /* if nearest pixel is toward the center */
{
/* move toward center */
rect.top = top++;
rect.bottom = rect.top + 1;
GdUnionRectWithRegion( &rect, obj->rgn );
rect.top = --bottom;
rect.bottom = rect.top + 1;
GdUnionRectWithRegion( &rect, obj->rgn );
yd -= 2*asq;
d -= yd;
}
rect.left--; /* next horiz point */
rect.right++;
xd += 2*bsq;
d += bsq + xd;
}
 
/* Loop to draw second half of quadrant */
 
d += (3 * (asq-bsq) / 2 - (xd+yd)) / 2;
while (yd >= 0)
{
/* next vertical point */
rect.top = top++;
rect.bottom = rect.top + 1;
GdUnionRectWithRegion( &rect, obj->rgn );
rect.top = --bottom;
rect.bottom = rect.top + 1;
GdUnionRectWithRegion( &rect, obj->rgn );
if (d < 0) /* if nearest pixel is outside ellipse */
{
rect.left--; /* move away from center */
rect.right++;
xd += 2*bsq;
d += xd;
}
yd -= 2*asq;
d += asq - yd;
}
 
/* Add the inside rectangle */
 
if (top <= bottom)
{
rect.top = top;
rect.bottom = bottom;
GdUnionRectWithRegion( &rect, obj->rgn );
}
obj->rgn->type = SIMPLEREGION; /* FIXME? */
return hrgn;
}
 
 
HRGN WINAPI
CreateEllipticRgn( INT left, INT top, INT right, INT bottom )
{
return CreateRoundRectRgn(left, top, right, bottom, right-left, bottom-top);
}
 
 
HRGN WINAPI
CreateEllipticRgnIndirect( const RECT *rect )
{
return CreateRoundRectRgn( rect->left, rect->top, rect->right,
rect->bottom, rect->right - rect->left,
rect->bottom - rect->top );
}
 
HRGN WINAPI
CreatePolygonRgn(const POINT *points, INT count, INT mode)
{
#if POLYREGIONS
HRGN hrgn;
MWRGNOBJ * obj;
MWCLIPREGION * rgn;
 
if (!(hrgn = REGION_CreateRegion()))
return NULL;
obj = (MWRGNOBJ *)GDI_GetObjPtr(hrgn, OBJ_REGION);
if (!obj)
return NULL;
 
rgn = GdAllocPolygonRegion((POINT *)points, count, mode);
if (!rgn)
return hrgn;
GdDestroyRegion(obj->rgn);
obj->rgn = rgn;
return hrgn;
#endif
}
 
DWORD WINAPI
GetRegionData(HRGN hrgn, DWORD count, LPRGNDATA rgndata)
{
DWORD size;
MWRGNOBJ *obj = (MWRGNOBJ *) GDI_GetObjPtr( hrgn, OBJ_REGION );
MWCLIPREGION *rgn;
/*TRACE(region," %04x count = %ld, rgndata = %p\n", hrgn, count, rgndata);*/
 
if(!obj) return 0;
 
rgn = obj->rgn;
size = rgn->numRects * sizeof(RECT);
if(count < (size + sizeof(RGNDATAHEADER)) || rgndata == NULL)
return size + sizeof(RGNDATAHEADER);
 
rgndata->rdh.dwSize = sizeof(RGNDATAHEADER);
rgndata->rdh.iType = RDH_RECTANGLES;
rgndata->rdh.nCount = rgn->numRects;
rgndata->rdh.nRgnSize = size;
rgndata->rdh.rcBound.left = rgn->extents.left;
rgndata->rdh.rcBound.top = rgn->extents.top;
rgndata->rdh.rcBound.right = rgn->extents.right;
rgndata->rdh.rcBound.bottom = rgn->extents.bottom;
 
memcpy( rgndata->Buffer, rgn->rects, size );
 
return 1;
}
 
 
#if 0
HRGN WINAPI
ExtCreateRegion(const XFORM* lpXform, DWORD dwCount, const RGNDATA* rgndata)
{
HRGN hrgn = CreateRectRgn(0, 0, 0, 0);
MWRGNOBJ *obj = (MWRGNOBJ *) GDI_GetObjPtr( hrgn, OBJ_REGION );
RECT *pCurRect, *pEndRect;
 
/*TRACE(region, " %p %ld %p. Returning %04x\n",
lpXform, dwCount, rgndata, hrgn);*/
if(!hrgn)
{
WARN(region, "Can't create a region!\n");
return 0;
}
if(lpXform)
WARN(region, "Xform not implemented - ignoring\n");
if(rgndata->rdh.iType != RDH_RECTANGLES)
{
WARN(region, "Type not RDH_RECTANGLES\n");
DeleteObject( hrgn );
return 0;
}
 
pEndRect = (RECT *)rgndata->Buffer + rgndata->rdh.nCount;
for(pCurRect = (RECT *)rgndata->Buffer; pCurRect < pEndRect; pCurRect++)
GdUnionRectWithRegion( pCurRect, obj->rgn );
 
return hrgn;
}
#endif
 
 
BOOL WINAPI
PtInRegion( HRGN hrgn, INT x, INT y )
{
MWRGNOBJ * obj;
obj = (MWRGNOBJ *) GDI_GetObjPtr( hrgn, OBJ_REGION );
if(!obj)
return FALSE;
return GdPtInRegion(obj->rgn, x, y);
}
 
/*
* Returns TRUE if rect is at least partly inside hrgn
*/
BOOL WINAPI
RectInRegion( HRGN hrgn, const RECT *rect )
{
MWRGNOBJ * obj;
obj = (MWRGNOBJ *) GDI_GetObjPtr( hrgn, OBJ_REGION );
if(!obj)
return FALSE;
return (GdRectInRegion(obj->rgn, rect) == MWRECT_OUT? FALSE: TRUE);
}
 
BOOL WINAPI
EqualRgn( HRGN hrgn1, HRGN hrgn2 )
{
MWRGNOBJ *obj1, *obj2;
 
if ((obj1 = (MWRGNOBJ *) GDI_GetObjPtr( hrgn1, OBJ_REGION )))
if ((obj2 = (MWRGNOBJ *) GDI_GetObjPtr( hrgn2, OBJ_REGION )))
return GdEqualRegion(obj1->rgn, obj2->rgn);
return FALSE;
}
 
#if 0
/*
* REGION_UnionRectWithRgn
* Adds a rectangle to a HRGN
* A helper used by scroll.c
*/
BOOL
REGION_UnionRectWithRgn( HRGN hrgn, const RECT *lpRect )
{
MWRGNOBJ *obj = (MWRGNOBJ *)hrgn;
 
if(!obj) return FALSE;
GdUnionRectWithRegion( lpRect, obj->rgn );
return TRUE;
}
 
/*
* REGION_FrameRgn
* Create a region that is a frame around another region.
* Expand all rectangles by +/- x and y, then subtract original region.
*/
BOOL
REGION_FrameRgn( HRGN hDest, HRGN hSrc, INT x, INT y )
{
BOOL bRet;
MWRGNOBJ *srcObj = (MWRGNOBJ*) GDI_GetObjPtr( hSrc, OBJ_REGION );
 
if (srcObj->rgn->numRects != 0)
{
MWRGNOBJ* destObj = (MWRGNOBJ*) GDI_GetObjPtr( hDest, OBJ_REGION );
RECT *pRect, *pEndRect;
RECT tempRect;
 
EMPTY_REGION( destObj->rgn );
pEndRect = srcObj->rgn->rects + srcObj->rgn->numRects;
for(pRect = srcObj->rgn->rects; pRect < pEndRect; pRect++)
{
tempRect.left = pRect->left - x;
tempRect.top = pRect->top - y;
tempRect.right = pRect->right + x;
tempRect.bottom = pRect->bottom + y;
GdUnionRectWithRegion( &tempRect, destObj->rgn );
}
GdSubtractRegion( destObj->rgn, destObj->rgn, srcObj->rgn );
bRet = TRUE;
}
else
bRet = FALSE;
return bRet;
}
#endif
 
/*
* Note: The behavior is correct even if src and dest regions are the same.
*/
INT WINAPI
CombineRgn(HRGN hDest, HRGN hSrc1, HRGN hSrc2, INT mode)
{
MWRGNOBJ *destObj = (MWRGNOBJ *) GDI_GetObjPtr( hDest, OBJ_REGION);
INT result = ERRORREGION;
 
/*TRACE(region, " %04x,%04x -> %04x mode=%x\n", hSrc1, hSrc2, hDest,mode);*/
 
if (destObj)
{
MWRGNOBJ *src1Obj = (MWRGNOBJ *) GDI_GetObjPtr( hSrc1, OBJ_REGION);
 
if (src1Obj)
{
/*TRACE(region, "dump:\n");
if(TRACE_ON(region))
REGION_DumpRegion(src1Obj->rgn);*/
if (mode == RGN_COPY)
{
GdCopyRegion( destObj->rgn, src1Obj->rgn );
result = destObj->rgn->type;
}
else
{
MWRGNOBJ *src2Obj = (MWRGNOBJ *) GDI_GetObjPtr( hSrc2, OBJ_REGION);
 
if (src2Obj)
{
/*TRACE(region, "dump:\n");
if(TRACE_ON(region))
REGION_DumpRegion(src2Obj->rgn);*/
switch (mode)
{
case RGN_AND:
GdIntersectRegion( destObj->rgn, src1Obj->rgn, src2Obj->rgn);
break;
case RGN_OR:
GdUnionRegion( destObj->rgn, src1Obj->rgn, src2Obj->rgn );
break;
case RGN_XOR:
GdXorRegion( destObj->rgn, src1Obj->rgn, src2Obj->rgn );
break;
case RGN_DIFF:
GdSubtractRegion( destObj->rgn, src1Obj->rgn, src2Obj->rgn );
break;
}
result = destObj->rgn->type;
}
}
}
/*TRACE(region, "dump:\n");
if(TRACE_ON(region))
REGION_DumpRegion(destObj->rgn);*/
}
return result;
}
 
/*
* Rectangle-related functions
*
* Copyright 1993, 1996 Alexandre Julliard
*
*/
BOOL WINAPI
IntersectRect( LPRECT dest, const RECT *src1, const RECT *src2 )
{
if (IsRectEmpty(src1) || IsRectEmpty(src2) ||
(src1->left >= src2->right) || (src2->left >= src1->right) ||
(src1->top >= src2->bottom) || (src2->top >= src1->bottom))
{
SetRectEmpty( dest );
return FALSE;
}
dest->left = MWMAX( src1->left, src2->left );
dest->right = MWMIN( src1->right, src2->right );
dest->top = MWMAX( src1->top, src2->top );
dest->bottom = MWMIN( src1->bottom, src2->bottom );
return TRUE;
}
 
 
BOOL WINAPI
UnionRect( LPRECT dest, const RECT *src1, const RECT *src2 )
{
if (IsRectEmpty(src1))
{
if (IsRectEmpty(src2))
{
SetRectEmpty( dest );
return FALSE;
}
else *dest = *src2;
}
else
{
if (IsRectEmpty(src2)) *dest = *src1;
else
{
dest->left = MWMIN( src1->left, src2->left );
dest->right = MWMAX( src1->right, src2->right );
dest->top = MWMIN( src1->top, src2->top );
dest->bottom = MWMAX( src1->bottom, src2->bottom );
}
}
return TRUE;
}
 
 
BOOL WINAPI
EqualRect( const RECT* rect1, const RECT* rect2 )
{
return ((rect1->left == rect2->left) && (rect1->right == rect2->right) &&
(rect1->top == rect2->top) && (rect1->bottom == rect2->bottom));
}
 
 
BOOL WINAPI
SubtractRect( LPRECT dest, const RECT *src1, const RECT *src2 )
{
RECT tmp;
 
if (IsRectEmpty( src1 ))
{
SetRectEmpty( dest );
return FALSE;
}
*dest = *src1;
if (IntersectRect( &tmp, src1, src2 ))
{
if (EqualRect( &tmp, dest ))
{
SetRectEmpty( dest );
return FALSE;
}
if ((tmp.top == dest->top) && (tmp.bottom == dest->bottom))
{
if (tmp.left == dest->left) dest->left = tmp.right;
else if (tmp.right == dest->right) dest->right = tmp.left;
}
else if ((tmp.left == dest->left) && (tmp.right == dest->right))
{
if (tmp.top == dest->top) dest->top = tmp.bottom;
else if (tmp.bottom == dest->bottom) dest->bottom = tmp.top;
}
}
return TRUE;
}
/winsbar.c
0,0 → 1,921
/*
* Copyright (c) 2000 Greg Haerr <greg@censoft.com>
* Portions Copyright (c) 1999, 2000, Wei Yongming.
* jmt: scrollbar thumb ported
*
* Microwindows win32 NonClient Scrollbars
*/
#define MWINCLUDECOLORS
#include "windows.h"
#include "wintern.h"
#include "wintools.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
 
/* scrollbar status/positions*/
#define SBS_UNKNOWN 0x0000
#define SBS_LEFTARROW 0x0001
#define SBS_RIGHTARROW 0x0002
#define SBS_LEFTSPACE 0x0004
#define SBS_RIGHTSPACE 0x0008
#define SBS_HORZTHUMB 0x0010
#define SBS_UPARROW 0x0020
#define SBS_DOWNARROW 0x0040
#define SBS_UPSPACE 0x0080
#define SBS_DOWNSPACE 0x0100
#define SBS_VERTTHUMB 0x0200
#define SBS_MASK 0x03ff
#define SBS_DISABLED 0x4000
#define SBS_HIDE 0x8000
 
#define HSCROLLBARVISIBLE(hwnd) ((hwnd)->style & WS_HSCROLL)
#define VSCROLLBARVISIBLE(hwnd) ((hwnd)->style & WS_VSCROLL)
 
/*
* Adjust client area smaller if scrollbars visible.
* Also, compute the NC hittest regions for the scrollbars.
*/
void
MwAdjustNCScrollbars(HWND hwnd)
{
BOOL vertbar = VSCROLLBARVISIBLE(hwnd);
BOOL horzbar = HSCROLLBARVISIBLE(hwnd);
 
if (vertbar) {
hwnd->clirect.right -= mwSYSMETRICS_CXVSCROLL;
if (horzbar)
hwnd->clirect.bottom -= mwSYSMETRICS_CYHSCROLL;
hwnd->vscroll.rc.left = hwnd->clirect.right;
hwnd->vscroll.rc.right = hwnd->clirect.right +
mwSYSMETRICS_CXVSCROLL;
hwnd->vscroll.rc.top = hwnd->clirect.top;
hwnd->vscroll.rc.bottom = hwnd->clirect.bottom;
} else
SetRectEmpty(&hwnd->vscroll.rc);
if (horzbar) {
if (!vertbar)
hwnd->clirect.bottom -= mwSYSMETRICS_CYHSCROLL;
hwnd->hscroll.rc.top = hwnd->clirect.bottom;
hwnd->hscroll.rc.bottom = hwnd->clirect.bottom +
mwSYSMETRICS_CYHSCROLL;
hwnd->hscroll.rc.left = hwnd->clirect.left;
hwnd->hscroll.rc.right = hwnd->clirect.right;
} else
SetRectEmpty(&hwnd->hscroll.rc);
}
 
static int
wndGetBorder(HWND hwnd)
{
if (hwnd->style & WS_BORDER) {
if ((hwnd->style & WS_CAPTION) == WS_CAPTION)
return mwSYSMETRICS_CXFRAME;
return mwSYSMETRICS_CXBORDER;
}
return 0;
}
 
static BOOL
wndGetVScrollBarRect (HWND hwnd, RECT* rcVBar)
{
if (hwnd->style & WS_VSCROLL) {
rcVBar->left = hwnd->winrect.right - mwSYSMETRICS_CXVSCROLL
- wndGetBorder (hwnd);
rcVBar->right = hwnd->winrect.right - wndGetBorder (hwnd);
rcVBar->top = hwnd->clirect.top;
rcVBar->bottom = hwnd->winrect.bottom - wndGetBorder (hwnd);
 
if (hwnd->style & WS_HSCROLL && !(hwnd->hscroll.status & SBS_HIDE))
rcVBar->bottom -= mwSYSMETRICS_CYHSCROLL;
return TRUE;
}
return FALSE;
}
 
static BOOL
wndGetHScrollBarRect (HWND hwnd, RECT* rcHBar)
{
if (hwnd->style & WS_HSCROLL) {
rcHBar->top = hwnd->winrect.bottom - mwSYSMETRICS_CYHSCROLL
- wndGetBorder (hwnd);
rcHBar->bottom = hwnd->winrect.bottom - wndGetBorder (hwnd);
rcHBar->left = hwnd->clirect.left;
rcHBar->right = hwnd->winrect.right - wndGetBorder (hwnd);
 
if (hwnd->style & WS_VSCROLL && !(hwnd->vscroll.status & SBS_HIDE))
rcHBar->right -= mwSYSMETRICS_CXVSCROLL;
 
return TRUE;
}
return FALSE;
}
 
void
MwPaintNCScrollbars(HWND hwnd, HDC hdc)
{
BOOL vertbar = VSCROLLBARVISIBLE(hwnd);
BOOL horzbar = HSCROLLBARVISIBLE(hwnd);
BOOL fGotDC = FALSE;
RECT rc,rc2;
 
POINT p3[3];
int shrink=2;
 
int start = 0;
RECT rcHBar, rcVBar;
 
 
if (!hdc && (horzbar || vertbar)) {
hdc = GetWindowDC(hwnd);
fGotDC = TRUE;
}
 
if (horzbar && vertbar) {
rc.left = hwnd->clirect.right;
rc.top = hwnd->clirect.bottom;
rc.right = rc.left + mwSYSMETRICS_CXVSCROLL;
rc.bottom = rc.top + mwSYSMETRICS_CYHSCROLL;
FillRect(hdc, &rc, (HBRUSH)(COLOR_BTNFACE+1));
}
if (vertbar) {
rc = hwnd->vscroll.rc;
#if 1
/* bkgnd */
rc2.left=rc.left; rc2.right=rc2.left+ mwSYSMETRICS_CXVSCROLL;
rc2.top=rc.top;
rc2.bottom=rc2.top+ mwSYSMETRICS_CYHSCROLL;
FillRect(hdc, &rc2, (HBRUSH)(COLOR_BTNFACE+1));
rc2.top=rc.bottom- mwSYSMETRICS_CYHSCROLL;
rc2.bottom=rc2.top+ mwSYSMETRICS_CYHSCROLL;
FillRect(hdc, &rc2, (HBRUSH)(COLOR_BTNFACE+1));
#endif
/* up */
Draw3dUpDownState(hdc, rc.left, rc.top,
mwSYSMETRICS_CXVSCROLL, mwSYSMETRICS_CYHSCROLL,
hwnd->vscroll.status & SBS_UPARROW);
/* down */
Draw3dUpDownState(hdc, rc.left,rc.bottom-mwSYSMETRICS_CYHSCROLL,
mwSYSMETRICS_CXVSCROLL, mwSYSMETRICS_CYHSCROLL,
hwnd->vscroll.status & SBS_DOWNARROW);
/* jmt: draw arrows */
SelectObject(hdc,GetStockObject(BLACK_BRUSH));
/* up */
p3[0].x= rc.left + (mwSYSMETRICS_CXVSCROLL/2) - 1;
p3[0].y= rc.top + 2 + shrink;
p3[1].x= rc.left + 2 + shrink - 1;
p3[1].y= rc.top + (mwSYSMETRICS_CYHSCROLL-4) - shrink;
p3[2].x= rc.left + (mwSYSMETRICS_CXVSCROLL-4) - shrink;
p3[2].y= rc.top + (mwSYSMETRICS_CYHSCROLL-4) - shrink;
Polygon(hdc,p3,3);
/* down */
p3[0].x= rc.left + (mwSYSMETRICS_CXVSCROLL/2) - 1;
p3[0].y= rc.bottom - 4 - shrink;
p3[1].x= rc.left + 2 + shrink - 1;
p3[1].y= rc.bottom-mwSYSMETRICS_CYHSCROLL + 2 + shrink;
p3[2].x= rc.left + (mwSYSMETRICS_CXVSCROLL-4) - shrink;
p3[2].y= rc.bottom-mwSYSMETRICS_CYHSCROLL + 2 + shrink;
Polygon(hdc,p3,3);
 
/* draw moving bar */
 
wndGetVScrollBarRect (hwnd, &rcVBar);
rcVBar.left -- ;
rcVBar.right -- ;
 
start = rcVBar.top + mwSYSMETRICS_CYVSCROLL + hwnd->vscroll.barStart;
if (start + hwnd->vscroll.barLen > rcVBar.bottom)
start = rcVBar.bottom - hwnd->vscroll.barLen;
 
if (hwnd->vscroll.barLen == 0)
hwnd->vscroll.barLen=rc.bottom-rc.top-(mwSYSMETRICS_CYVSCROLL*2);
/* bkgnd */
rc2.left=rc.left; rc2.right=rc.right/*-1*/;
rc2.top=rc.top+mwSYSMETRICS_CYHSCROLL;
rc2.bottom=start;
if (rc2.bottom>rc2.top)
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH));
 
rc2.top=start+hwnd->vscroll.barLen;
rc2.bottom=rc.bottom-mwSYSMETRICS_CYHSCROLL;
if (rc2.bottom>rc2.top)
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH));
 
Draw3dUpFrame (hdc, rcVBar.left, start, rcVBar.right,
start + hwnd->vscroll.barLen);
/*printf("barv:(l,t,r,b):(%d,%d,%d,%d)\n",
rcVBar.left, start, rcVBar.right,
start + hwnd->vscroll.barLen);*/
}
if (horzbar) {
rc = hwnd->hscroll.rc;
 
#if 1
/* bkgnd */
rc2.top=rc.top; rc2.bottom=rc2.top+ mwSYSMETRICS_CYHSCROLL;
rc2.left=rc.left;
rc2.right=rc2.left+ mwSYSMETRICS_CXVSCROLL;
FillRect(hdc, &rc2, (HBRUSH)(COLOR_BTNFACE+1));
rc2.left=rc.right- mwSYSMETRICS_CXVSCROLL;
rc2.right=rc2.left+ mwSYSMETRICS_CXVSCROLL;
FillRect(hdc, &rc2, (HBRUSH)(COLOR_BTNFACE+1));
#endif
 
/* left */
Draw3dUpDownState(hdc, rc.left, rc.top,
mwSYSMETRICS_CXVSCROLL, mwSYSMETRICS_CYHSCROLL,
hwnd->hscroll.status & SBS_LEFTARROW);
/* right */
Draw3dUpDownState(hdc, rc.right-mwSYSMETRICS_CXVSCROLL, rc.top,
mwSYSMETRICS_CXVSCROLL, mwSYSMETRICS_CYHSCROLL,
hwnd->hscroll.status & SBS_RIGHTARROW);
/* jmt: draw arrows */
SelectObject(hdc,GetStockObject(BLACK_BRUSH));
/* left */
p3[0].x= rc.left + 2 + shrink;
p3[0].y= rc.top + (mwSYSMETRICS_CYHSCROLL/2) ;
p3[1].x= rc.left + (mwSYSMETRICS_CXVSCROLL-4) - shrink ;
p3[1].y= rc.top + 2 + shrink;
p3[2].x= rc.left + (mwSYSMETRICS_CXVSCROLL-4) - shrink;
p3[2].y= rc.bottom - 4 - shrink + 1;
Polygon(hdc,p3,3);
/* right */
p3[0].x= rc.right - 4 - shrink;
p3[0].y= rc.top + (mwSYSMETRICS_CYHSCROLL/2) ;
p3[1].x= rc.right-mwSYSMETRICS_CXVSCROLL + 2 + shrink ;
p3[1].y= rc.top + 2 + shrink;
p3[2].x= rc.right-mwSYSMETRICS_CXVSCROLL + 2 + shrink;
p3[2].y= rc.bottom - 4 - shrink + 1;
Polygon(hdc,p3,3);
 
/* draw moving bar. */
 
wndGetHScrollBarRect (hwnd, &rcHBar);
rcHBar.top -- ;
rcHBar.bottom -- ;
 
start = rcHBar.left + mwSYSMETRICS_CXHSCROLL + hwnd->hscroll.barStart;
 
if (start + hwnd->hscroll.barLen > rcHBar.right)
start = rcHBar.right - hwnd->hscroll.barLen;
 
if (hwnd->hscroll.barLen == 0)
hwnd->hscroll.barLen=rc.right-rc.left-(mwSYSMETRICS_CXHSCROLL*2);
 
/* bkgnd */
rc2.top=rc.top; rc2.bottom=rc.bottom/*-1*/;
rc2.left=rc.left+mwSYSMETRICS_CXVSCROLL;
rc2.right=start;
if (rc2.right>rc2.left)
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH));
 
rc2.left=start+hwnd->hscroll.barLen;
rc2.right=rc.right-mwSYSMETRICS_CXVSCROLL;
if (rc2.right>rc2.left)
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH));
 
Draw3dUpFrame (hdc, start, rcHBar.top, start + hwnd->hscroll.barLen,
rcHBar.bottom);
/*printf("barh:(l,t,r,b):(%d,%d,%d,%d)\n",
start, rcHBar.top, start + hwnd->hscroll.barLen,
rcHBar.bottom);*/
 
}
 
if (fGotDC)
ReleaseDC(hwnd, hdc);
}
 
/* handle a non-client message for a scrollbar*/
void
MwHandleNCMessageScrollbar(HWND hwnd, UINT msg, WPARAM hitcode, LPARAM lParam)
{
int pos = SBS_UNKNOWN;
BOOL vertbar = VSCROLLBARVISIBLE(hwnd);
BOOL horzbar = HSCROLLBARVISIBLE(hwnd);
int * pStat;
POINT pt;
RECT rc;
 
static BOOL bDraw;
 
static int downPos = SBS_UNKNOWN;
static int sbCode;
int newThumbPos;
 
int itemMoveable,itemCount,itemVisible,moveRange; /* jmt:2k0819 */
int moveTop,moveBottom,moveLeft,moveRight; /* jmt:2k0819 */
 
POINTSTOPOINT(pt, lParam);
for (;;) { /* use for() to allow break statement*/
if (hitcode == HTVSCROLL && vertbar)
{
pStat = &hwnd->vscroll.status;
rc = hwnd->vscroll.rc;
rc.bottom = rc.top + mwSYSMETRICS_CYVSCROLL;
if (PtInRect(&rc, pt))
{
pos = SBS_UPARROW;
break;
}
rc.bottom = hwnd->vscroll.rc.bottom;
rc.top = rc.bottom - mwSYSMETRICS_CYVSCROLL;
if (PtInRect(&rc, pt))
{
pos = SBS_DOWNARROW;
break;
}
pos = SBS_VERTTHUMB;
} else if (hitcode == HTHSCROLL && horzbar)
{
pStat = &hwnd->hscroll.status;
rc = hwnd->hscroll.rc;
rc.right = rc.left + mwSYSMETRICS_CXHSCROLL;
if (PtInRect(&rc, pt)) {
pos = SBS_LEFTARROW;
break;
}
rc.right = hwnd->hscroll.rc.right;
rc.left = rc.right - mwSYSMETRICS_CXHSCROLL;
if (PtInRect(&rc, pt)) {
pos = SBS_RIGHTARROW;
break;
}
pos = SBS_HORZTHUMB;
} else
return;
break;
}
 
if (pos == SBS_UNKNOWN)
return;
 
*pStat &= ~SBS_MASK; /* remove stray mouse states*/
 
if (msg == WM_NCLBUTTONDOWN || msg == WM_NCLBUTTONDBLCLK) /* jmt:2k0819 */
*pStat |= pos;
else *pStat &= ~pos;
 
if (msg == WM_NCLBUTTONDOWN || msg == WM_NCLBUTTONDBLCLK) /* jmt:2k0819 */
bDraw=TRUE;
 
if (bDraw)
MwPaintNCScrollbars(hwnd, NULL);
 
if (pos == SBS_UPARROW || pos == SBS_LEFTARROW) /* jmt:2k0820 */
{
if (hwnd->vscroll.curPos != hwnd->vscroll.minPos)
sbCode = SB_LINEUP;
}
else if (pos == SBS_DOWNARROW || pos == SBS_RIGHTARROW) /* jmt:2k0820 */
{
if (hwnd->vscroll.curPos != hwnd->vscroll.maxPos)
sbCode = SB_LINEDOWN;
}
else if (pos == SBS_VERTTHUMB || pos == SBS_HORZTHUMB)
{
sbCode = SB_THUMBTRACK;
}
 
switch(msg)
{
case WM_NCLBUTTONDOWN:
case WM_NCLBUTTONDBLCLK: /* jmt:2k0819 */
downPos = pos;
#if MWCLIENT
InvalidateRect(hwnd,NULL,TRUE);
#endif
break;
 
case WM_NCMOUSEMOVE: /* jmt:2k0819 */
if (hitcode == HTVSCROLL && vertbar)
{
if (sbCode == SB_THUMBTRACK && downPos == SBS_VERTTHUMB)
{
/* jmt(2k0819): new algorithm for SB_THUMBTRACK */
 
rc = hwnd->vscroll.rc;
moveTop = rc.top + mwSYSMETRICS_CYVSCROLL;
moveBottom = hwnd->vscroll.rc.bottom - mwSYSMETRICS_CYVSCROLL;
moveRange = moveBottom - moveTop;
 
itemCount = hwnd->vscroll.maxPos - hwnd->vscroll.minPos + 1;
itemVisible = hwnd->vscroll.pageStep;
itemMoveable = itemCount - itemVisible + 1;
 
newThumbPos = ((pt.y - moveTop) * itemMoveable) / moveRange;
printf("((%d-%d)*%d)/%d=%d\n",
pt.y,moveTop,itemMoveable,moveRange,newThumbPos);
 
if ( newThumbPos >= hwnd->vscroll.minPos &&
newThumbPos <= hwnd->vscroll.maxPos)
SendMessage (hwnd,
WM_VSCROLL, SB_THUMBTRACK, newThumbPos);
break;
}
}
 
if (hitcode == HTHSCROLL && horzbar)
{
if (sbCode == SB_THUMBTRACK && downPos == SBS_HORZTHUMB)
{
/* jmt(2k0819): new algorithm for SB_THUMBTRACK */
 
rc = hwnd->hscroll.rc;
moveLeft = rc.left + mwSYSMETRICS_CXHSCROLL;
moveRight = hwnd->hscroll.rc.right - mwSYSMETRICS_CXHSCROLL;
moveRange = moveRight - moveLeft;
 
itemCount = hwnd->hscroll.maxPos - hwnd->hscroll.minPos + 1;
itemVisible = hwnd->hscroll.pageStep;
itemMoveable = itemCount - itemVisible + 1;
 
newThumbPos = ((pt.x - moveLeft) * itemMoveable) / moveRange;
printf("((%d-%d)*%d)/%d=%d\n",
pt.y,moveLeft,itemMoveable,moveRange,newThumbPos);
if ( newThumbPos >= hwnd->hscroll.minPos &&
newThumbPos <= hwnd->hscroll.maxPos)
SendMessage (hwnd,
WM_HSCROLL, SB_THUMBTRACK, newThumbPos);
break;
}
}
 
break;
 
case WM_NCLBUTTONUP: /* jmt:2k0819 */
bDraw=FALSE;
downPos = SBS_UNKNOWN;
 
if (sbCode==SB_THUMBTRACK)
{
if (hitcode == HTVSCROLL && vertbar)
{
/* jmt(2k0819): new algorithm for SB_THUMBTRACK */
 
rc = hwnd->vscroll.rc;
moveTop = rc.top + mwSYSMETRICS_CYVSCROLL;
moveBottom = hwnd->vscroll.rc.bottom - mwSYSMETRICS_CYVSCROLL;
moveRange = moveBottom - moveTop;
 
itemCount = hwnd->vscroll.maxPos - hwnd->vscroll.minPos + 1;
itemVisible = hwnd->vscroll.pageStep;
itemMoveable = itemCount - itemVisible + 1;
 
newThumbPos = ((pt.y - moveTop) * itemMoveable) / moveRange;
printf("((%d-%d)*%d)/%d=%d\n",
pt.y,moveTop,itemMoveable,moveRange,newThumbPos);
 
if ( newThumbPos >= hwnd->vscroll.minPos &&
newThumbPos <= hwnd->vscroll.maxPos)
SendMessage (hwnd,
WM_VSCROLL, SB_THUMBTRACK, newThumbPos);
break;
}
 
if (hitcode == HTHSCROLL && horzbar)
{
/* jmt(2k0819): new algorithm for SB_THUMBTRACK */
 
rc = hwnd->hscroll.rc;
moveLeft = rc.left + mwSYSMETRICS_CXHSCROLL;
moveRight = hwnd->hscroll.rc.right - mwSYSMETRICS_CXHSCROLL;
moveRange = moveRight - moveLeft;
 
itemCount = hwnd->hscroll.maxPos - hwnd->hscroll.minPos + 1;
itemVisible = hwnd->hscroll.pageStep;
itemMoveable = itemCount - itemVisible + 1;
 
newThumbPos = ((pt.x - moveLeft) * itemMoveable) / moveRange;
printf("((%d-%d)*%d)/%d=%d\n",
pt.y,moveLeft,itemMoveable,moveRange,newThumbPos);
if ( newThumbPos >= hwnd->hscroll.minPos &&
newThumbPos <= hwnd->hscroll.maxPos)
SendMessage (hwnd,
WM_HSCROLL, SB_THUMBTRACK, newThumbPos);
break;
}
}
else /* jmt:2k0820 */
{
if (hitcode == HTVSCROLL && vertbar)
SendMessage (hwnd, WM_VSCROLL, sbCode, 0);
 
if (hitcode == HTHSCROLL && horzbar)
SendMessage (hwnd, WM_HSCROLL, sbCode, 0);
}
break;
}
 
}
 
 
static BOOL
PtInRect2(const RECT *lprc, int x, int y)
{
POINT p;
 
p.x = x;
p.y = y;
return PtInRect(lprc, p);
}
 
#if 1 /* 0000 */
 
 
static void
wndScrollBarPos (HWND hwnd, BOOL bIsHBar, RECT* rcBar)
{
UINT moveRange;
PMWSCROLLBARINFO pSBar;
 
if (bIsHBar)
pSBar = &hwnd->hscroll;
else
pSBar = &hwnd->vscroll;
 
if (pSBar->minPos == pSBar->maxPos) {
pSBar->status |= SBS_HIDE;
return;
}
 
if (bIsHBar)
moveRange = (rcBar->right - rcBar->left) - (mwSYSMETRICS_CXHSCROLL<<1);
else
moveRange = (rcBar->bottom - rcBar->top) - (mwSYSMETRICS_CYVSCROLL<<1);
 
#define MWM_DEFBARLEN 18
#define MWM_MINBARLEN 8
 
if (pSBar->pageStep == 0)
{
pSBar->barLen = MWM_DEFBARLEN;
 
if (pSBar->barLen > moveRange)
pSBar->barLen = MWM_MINBARLEN;
}
else
{
pSBar->barLen = moveRange * pSBar->pageStep /
(pSBar->maxPos - pSBar->minPos + 1);
if (pSBar->barLen < MWM_MINBARLEN)
pSBar->barLen = MWM_MINBARLEN;
}
 
pSBar->barStart = moveRange * (pSBar->curPos - pSBar->minPos) /
(pSBar->maxPos - pSBar->minPos + 1);
 
 
if (pSBar->barStart + pSBar->barLen > moveRange)
pSBar->barStart = moveRange - pSBar->barLen;
 
 
if (pSBar->barStart < 0)
pSBar->barStart = 0;
}
 
static PMWSCROLLBARINFO wndGetScrollBar (HWND pWin, int iSBar)
{
if (iSBar == SB_HORZ) {
if (pWin->style & WS_HSCROLL)
return &pWin->hscroll;
}
else if (iSBar == SB_VERT) {
if (pWin->style & WS_VSCROLL)
return &pWin->vscroll;
}
 
return NULL;
}
 
BOOL EnableScrollBar (HWND hWnd, int iSBar, BOOL bEnable)
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
BOOL bPrevState;
RECT rcBar;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )
return FALSE;
 
bPrevState = !(pSBar->status & SBS_DISABLED);
 
if (bEnable && !bPrevState)
pSBar->status &= ~SBS_DISABLED;
else if (!bEnable && bPrevState)
pSBar->status |= SBS_DISABLED;
else
return FALSE;
 
if (iSBar == SB_VERT)
{
wndGetVScrollBarRect (pWin, &rcBar);
rcBar.left --;
rcBar.right --;
}
else
{
wndGetHScrollBarRect (pWin, &rcBar);
rcBar.top --;
rcBar.bottom --;
}
#if 0
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar));
#else
MwPaintNCScrollbars(hWnd,NULL); /* a must */
#endif
 
return TRUE;
}
 
BOOL GetScrollPos (HWND hWnd, int iSBar, int* pPos)
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )
return FALSE;
 
*pPos = pSBar->curPos;
return TRUE;
}
 
BOOL GetScrollRange (HWND hWnd, int iSBar, int* pMinPos, int* pMaxPos)
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )
return FALSE;
 
*pMinPos = pSBar->minPos;
*pMaxPos = pSBar->maxPos;
return TRUE;
}
 
BOOL SetScrollPos (HWND hWnd, int iSBar, int iNewPos)
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
RECT rcBar;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )
return FALSE;
 
if (iNewPos < pSBar->minPos)
pSBar->curPos = pSBar->minPos;
else
pSBar->curPos = iNewPos;
 
{
int max = pSBar->maxPos;
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0;
 
if (pSBar->curPos > max)
pSBar->curPos = max;
}
if (iSBar == SB_VERT)
{
wndGetVScrollBarRect (pWin, &rcBar);
rcBar.left --;
rcBar.right --;
}
else
{
wndGetHScrollBarRect (pWin, &rcBar);
rcBar.top --;
rcBar.bottom --;
}
 
wndScrollBarPos (pWin, iSBar == SB_HORZ, &rcBar);
 
#if 0
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar));
#else
MwPaintNCScrollbars(hWnd,NULL); /* a must */
#endif
return TRUE;
}
 
BOOL SetScrollRange (HWND hWnd, int iSBar, int iMinPos, int iMaxPos)
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
RECT rcBar;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )
return FALSE;
 
pSBar->minPos = (iMinPos < iMaxPos)?iMinPos:iMaxPos;
pSBar->maxPos = (iMinPos > iMaxPos)?iMinPos:iMaxPos;
/* validate parameters. */
if (pSBar->curPos < pSBar->minPos)
pSBar->curPos = pSBar->minPos;
 
if (pSBar->pageStep <= 0)
pSBar->pageStep = 0;
else if (pSBar->pageStep > (pSBar->maxPos - pSBar->minPos + 1))
pSBar->pageStep = pSBar->maxPos - pSBar->minPos + 1;
{
int max = pSBar->maxPos;
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0;
 
if (pSBar->curPos > max)
pSBar->curPos = max;
}
 
if (iSBar == SB_VERT)
{
wndGetVScrollBarRect (pWin, &rcBar);
rcBar.left --;
rcBar.right --;
}
else
{
wndGetHScrollBarRect (pWin, &rcBar);
rcBar.top --;
rcBar.bottom --;
}
wndScrollBarPos (pWin, iSBar == SB_HORZ, &rcBar);
 
#if 0
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar));
#else
MwPaintNCScrollbars(hWnd,NULL); /* a must */
#endif
 
return TRUE;
}
 
BOOL SetScrollInfo (HWND hWnd, int iSBar,
LPCSCROLLINFO lpsi, BOOL fRedraw)
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
RECT rcBar;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )
return FALSE;
if( lpsi->fMask & SIF_RANGE )
{
pSBar->minPos = (lpsi->nMin < lpsi->nMax)?lpsi->nMin:lpsi->nMax;
pSBar->maxPos = (lpsi->nMin < lpsi->nMax)?lpsi->nMax:lpsi->nMin;
}
if( lpsi->fMask & SIF_POS )
pSBar->curPos = lpsi->nPos;
if( lpsi->fMask & SIF_PAGE )
pSBar->pageStep = lpsi->nPage;
 
/* validate parameters. */
if (pSBar->curPos < pSBar->minPos)
pSBar->curPos = pSBar->minPos;
 
if (pSBar->pageStep <= 0)
pSBar->pageStep = 0;
else if (pSBar->pageStep > (pSBar->maxPos - pSBar->minPos + 1))
pSBar->pageStep = pSBar->maxPos - pSBar->minPos + 1;
{
int max = pSBar->maxPos;
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0;
 
if (pSBar->curPos > max)
pSBar->curPos = max;
}
 
if(fRedraw)
{
if (iSBar == SB_VERT)
{
wndGetVScrollBarRect (pWin, &rcBar);
rcBar.left --;
rcBar.right --;
}
else
{
wndGetHScrollBarRect (pWin, &rcBar);
rcBar.top --;
rcBar.bottom --;
}
wndScrollBarPos (pWin, iSBar == SB_HORZ, &rcBar);
 
#if 0
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar));
#else
MwPaintNCScrollbars(hWnd,NULL); /* a must */
#endif
}
return TRUE;
}
 
BOOL GetScrollInfo(HWND hWnd, int iSBar, LPSCROLLINFO lpsi)
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )
return FALSE;
if( lpsi->fMask & SIF_RANGE )
{
lpsi->nMin = pSBar->minPos;
lpsi->nMax = pSBar->maxPos;
}
if( lpsi->fMask & SIF_POS )
{
lpsi->nPos = pSBar->curPos;
}
if( lpsi->fMask & SIF_PAGE )
lpsi->nPage = pSBar->pageStep;
return TRUE;
}
 
BOOL ShowScrollBar (HWND hWnd, int iSBar, BOOL bShow)
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
BOOL bPrevState;
RECT rcBar;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )
return FALSE;
 
bPrevState = !(pSBar->status & SBS_HIDE);
 
if (bShow && !bPrevState)
pSBar->status &= ~SBS_HIDE;
else if (!bShow && bPrevState)
pSBar->status |= SBS_HIDE;
else
return FALSE;
#if 0 /* fix: no WM_CHANGESIZE */
SendMessage (hWnd, WM_CHANGESIZE, 0, 0);
#endif
if (iSBar == SB_VERT)
wndGetVScrollBarRect (pWin, &rcBar);
else
wndGetHScrollBarRect (pWin, &rcBar);
 
{
RECT rcWin, rcClient;
memcpy (&rcWin, &pWin->winrect.left, sizeof (RECT));
rcClient.left = 0;
rcClient.top = 0;
rcClient.right = pWin->clirect.right - pWin->clirect.left;
rcClient.bottom = pWin->clirect.bottom - pWin->clirect.top;
#if 0 /* fix: no WM_SIZECHANGED */
SendMessage/*SendAsyncMessage*/ (hWnd, WM_SIZECHANGED,
(WPARAM)&rcWin, (LPARAM)&rcClient);
#endif
}
if (bShow) {
SendMessage (hWnd, WM_NCPAINT, 0, 0);
}
else {
rcBar.left -= pWin->clirect.left;
rcBar.top -= pWin->clirect.top;
rcBar.right -= pWin->clirect.left;
rcBar.bottom -= pWin->clirect.top;
SendMessage (hWnd, WM_NCPAINT, 0, 0);
InvalidateRect (hWnd, &rcBar, TRUE);
}
 
return TRUE;
}
#endif
/winclip.c
0,0 → 1,7
#include "device.h"
 
#if DYNAMICREGIONS
#include "winclip2.c"
#else
#include "winclip1.c"
#endif
/mwobjects/mwobjects.cc
0,0 → 1,551
/*
Copyright (C) Chris Johns (ccj@acm.org)
 
Microwindows C++ Wrappers.
 
*/
 
#include <algorithm>
#include <stdarg.h>
#include <stdio.h>
#include <mwobjects.h>
 
namespace MicroWindowsObjects
{
 
static Application *the_application = 0;
 
WindowClass::WindowClass ()
{
wclass.style = CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW;
wclass.lpfnWndProc = 0;
wclass.lpfnWndProc = 0;
wclass.cbClsExtra = 0;
wclass.cbWndExtra = 0;
wclass.hInstance = 0;
wclass.hIcon = 0;
wclass.hCursor = 0;
wclass.hbrBackground = 0;
wclass.lpszMenuName = 0;
wclass.lpszClassName = 0;
}
 
WindowClass::WindowClass (LPCSTR lpszClassName,
UINT style,
int cbClsExtra,
int cbWndExtra,
HINSTANCE hInstance,
HICON hIcon,
HCURSOR hCursor,
HBRUSH hbrBackground,
LPCSTR lpszMenuName)
{
wclass.style = style;
wclass.lpfnWndProc = (WNDPROC) Window::WndProc;
wclass.cbClsExtra = cbClsExtra;
wclass.cbWndExtra = cbWndExtra + sizeof (Window *);
wclass.hInstance = hInstance;
wclass.hIcon = hIcon;
wclass.hCursor = hCursor;
wclass.hbrBackground = hbrBackground;
wclass.lpszMenuName = lpszMenuName;
wclass.lpszClassName = lpszClassName;
}
 
ATOM WindowClass::register_class ()
{
return RegisterClass (&wclass);
}
 
Window::Window ()
: hwnd (0)
{
}
 
Window::Window (DWORD dwExStyle,
LPCSTR lpClassName,
LPCSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hwndParent,
HMENU hMenu,
HINSTANCE hInstance,
LPVOID lpParam)
: hwnd (0)
{
create (dwExStyle,
lpClassName,
lpWindowName,
dwStyle,
x, y, nWidth, nHeight,
hwndParent,
hMenu,
hInstance,
lpParam);
}
 
Window::~Window ()
{
destory ();
}
 
HWND
Window::create (DWORD dwExStyle,
LPCSTR lpClassName,
LPCSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hwndParent,
HMENU hMenu,
HINSTANCE hInstance,
LPVOID lpParam)
{
lpCreateParams = lpParam;
lpParam = (LPVOID) this;
hwnd = ::CreateWindowEx (dwExStyle,
lpClassName,
lpWindowName,
dwStyle,
x, y, nWidth, nHeight,
hwndParent,
hMenu,
hInstance,
lpParam);
return hwnd;
}
 
BOOL
Window::destory ()
{
if (hwnd)
{
HWND old_hwnd = hwnd;
hwnd = 0;
return ::DestroyWindow (old_hwnd);
}
return 0;
}
 
bool
Window::attach (const int fd, FileDescriptor& file_descriptor)
{
//
// The user must set the fd before being added to the set.
//
 
if ((fd < 0) || (fd >= FD_SETSIZE) || (file_descriptor.file_desc != -1))
return false;
//
// If this fd is already taken do not add another.
//
 
file_descriptor.file_desc = fd;
file_descriptor.window = this;
 
if (file_descriptors.find (&file_descriptor) != file_descriptors.end ())
{
file_descriptor.file_desc = -1;
file_descriptor.window = 0;
return false;
}
file_descriptors.insert (&file_descriptor);
return true;
}
 
bool
Window::detach (FileDescriptor& file_descriptor)
{
//
// The user must set the fd before being added to the set.
//
 
if ((file_descriptor.fd () < 0) || (file_descriptor.fd () >= FD_SETSIZE))
return false;
//
// If this fd is already taken do not add another.
//
 
if (file_descriptors.find (&file_descriptor) == file_descriptors.end ())
return false;
file_descriptor.disable_read ();
file_descriptor.disable_write ();
file_descriptor.disable_except ();
file_descriptors.erase (&file_descriptor);
 
file_descriptor.file_desc = -1;
file_descriptor.window = 0;
 
return true;
}
 
struct eq_fd
{
const int fd;
eq_fd (const int fd) : fd (fd) {}
bool operator() (const FileDescriptor* f1) const
{ return (f1->fd () == fd); }
};
LRESULT
Window::message_handler (UINT msg,
WPARAM wp,
LPARAM lp)
{
switch (msg)
{
case WM_FDINPUT:
case WM_FDOUTPUT:
case WM_FDEXCEPT:
{
//
// The iterator provides a reference to the object pointer
// as the set contains pointers.
//
 
set<FileDescriptor*>::iterator file_descriptor;
file_descriptor = find_if (file_descriptors.begin (),
file_descriptors.end (),
eq_fd ((int) wp));
 
if (file_descriptor != file_descriptors.end ())
{
switch (msg)
{
case WM_FDINPUT:
return (*file_descriptor)->read ();
case WM_FDOUTPUT:
return (*file_descriptor)->write ();
case WM_FDEXCEPT:
return (*file_descriptor)->except ();
}
}
}
break;
default:
break;
}
return ::DefWindowProc (hwnd, msg, wp, lp);
}
 
bool
Window::ltint::operator () (const FileDescriptor* f1,
const FileDescriptor* f2) const
{
return f1->fd () < f2->fd ();
}
 
LRESULT CALLBACK
Window::WndProc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
int offset = GetClassLong (hwnd, GCL_CBWNDEXTRA) - sizeof (Window *);
Window *window = 0;
if (msg == WM_CREATE)
{
LPCREATESTRUCT cs = (LPCREATESTRUCT) lp;
window = dynamic_cast<Window*>((Window*) cs->lpCreateParams);
 
if (window)
{
window->hwnd = hwnd;
SetWindowLong (hwnd, offset, (DWORD) window);
cs->lpCreateParams = window->lpCreateParams;
}
}
else
{
window = dynamic_cast<Window*>((Window*) GetWindowLong (hwnd, offset));
}
if (window)
return window->message_handler (msg, wp, lp);
return ::DefWindowProc (hwnd, msg, wp, lp);
}
 
Paint::Paint (HWND hwnd)
: hwnd (hwnd),
draw_3d (false),
drawing (false),
r (0, 0, 0, 0),
text_format (0)
{
}
 
Paint::Paint (HWND hwnd, LPARAM lpParam)
: hwnd (hwnd),
draw_3d (false),
drawing (false),
r (0, 0, 0, 0),
text_format (0)
{
POINTSTOPOINT (pt, lpParam);
}
 
Paint::~Paint ()
{
end ();
}
 
void
Paint::begin (bool init_3d, bool draw_3d_in_mem)
{
if (!drawing && hwnd)
{
hdc = ::BeginPaint (hwnd, &ps);
r.get_client (hwnd);
if (init_3d)
initialise_3d (draw_3d_in_mem);
drawing = true;
}
}
 
void
Paint::end ()
{
if (drawing)
{
paint_3d ();
 
::EndPaint (hwnd, &ps);
 
drawing = false;
}
}
 
int
Paint::text_out (int x, int y, const char *format, ...)
{
Rect rect (x, y, x + 100, y + 100);
va_list arg;
va_start (arg, format);
vsnprintf (format_buf, TEXT_BUF_SIZE, format, arg);
format_buf[TEXT_BUF_SIZE - 1] = '\0';
 
return ::DrawText (hdc, format_buf, -1, rect, text_format);
}
 
FileDescriptor::FileDescriptor ()
: file_desc (-1),
window (0)
{
}
 
FileDescriptor::~FileDescriptor ()
{
if (window)
window->detach (*this);
}
 
bool
FileDescriptor::enable_read ()
{
if (!read_is_enabled && window && (file_desc != -1))
{
::MwRegisterFdInput (*window, file_desc);
read_is_enabled = true;
return true;
}
return false;
}
 
bool
FileDescriptor::disable_read ()
{
if (read_is_enabled && window && (file_desc != -1))
{
::MwUnregisterFdInput (*window, file_desc);
read_is_enabled = false;
return true;
}
return false;
}
 
 
bool
FileDescriptor::enable_write ()
{
if (!write_is_enabled && window && (file_desc != -1))
{
::MwRegisterFdOutput (*window, file_desc);
write_is_enabled = true;
return true;
}
return false;
}
 
bool
FileDescriptor::disable_write ()
{
if (write_is_enabled && window && (file_desc != -1))
{
::MwUnregisterFdOutput (*window, file_desc);
write_is_enabled = false;
return true;
}
return false;
}
 
bool
FileDescriptor::enable_except ()
{
if (!except_is_enabled && window && (file_desc != -1))
{
::MwRegisterFdExcept (*window, file_desc);
except_is_enabled = true;
return true;
}
return false;
}
 
bool
FileDescriptor::disable_except ()
{
if (except_is_enabled && window && (file_desc != -1))
{
::MwUnregisterFdExcept (*window, file_desc);
except_is_enabled = false;
return true;
}
return false;
}
 
LRESULT
FileDescriptor::read ()
{
return 0;
}
 
LRESULT
FileDescriptor::write ()
{
return 0;
}
 
LRESULT
FileDescriptor::except ()
{
return 0;
}
 
Application::Application ()
: background (0)
{
if (!the_application)
the_application = this;
}
 
Application::Application (MWIMAGEHDR& background)
: background (&background)
{
if (!the_application)
the_application = this;
}
 
Application::~Application ()
{
}
 
int
Application::initialise ()
{
return 0;
}
 
int
Application::shutdown ()
{
return 0;
}
 
int WINAPI
Application::WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
if (the_application)
{
int result;
MwRegisterButtonControl (0);
result = the_application->initialise ();
if (result)
return result;
//
// Set background wallpaper
//
if (the_application->background)
MwSetDesktopWallpaper (the_application->background);
 
MSG msg;
//
// type ESC to quit...
//
while (GetMessage (&msg, 0, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
 
result = the_application->shutdown ();
if (result)
return result;
return 0;
}
return 1;
}
 
};
 
//
// Global Microwindows WinMain () routine with "C" linkage
//
 
extern "C"
{
int WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
return MicroWindowsObjects::Application::WinMain (hInstance,
hPrevInstance,
lpCmdLine,
nShowCmd);
}
};
/mwobjects/Makefile
0,0 → 1,20
#
# Copyright (C) Chris Johns (ccj@acm.org)
#
# Microwindows C++ Wrappers.
#
 
include $(CONFIG)
 
LIBNAME = libmwobjects.a
LIBNAMESO = libmwobjects.so
 
ifeq ($(OBJFRAMEWORK), Y)
CXXOBJS += mwobjects.o
endif
 
######################### Makefile.rules section #############################
 
include $(TOP)/Makefile.rules
 
######################## Tools targets section ###############################
/winexpos.c
0,0 → 1,369
/*
* Copyright (c) 1999 Greg Haerr <greg@censoft.com>
* Portions Copyright (c) 1991 David I. Bell
*
* Non-Win32 API helper routines for window showing/hiding/exposing
*/
#include "windows.h"
#include "wintern.h"
#include <stdlib.h>
 
/* Redraw all windows*/
void
MwRedrawScreen(void)
{
/* redraw all windows except desktop window*/
MwExposeArea(rootwp, 0, 0, rootwp->winrect.right,
rootwp->winrect.bottom);
 
/* redraw desktop window*/
PostMessage(rootwp, WM_PAINT, 0, 0L);
}
 
/*
* Hide the window to make it and its children invisible on the screen.
* This is a recursive routine which increments the unmapcount values for
* this window and all of its children, and causes exposure events for
* windows which are newly uncovered.
*/
void
MwHideWindow(HWND hwnd,BOOL bChangeFocus, BOOL bSendMsg)
{
HWND wp = hwnd;
HWND pwp; /* parent window */
HWND sibwp; /* sibling window */
HWND childwp; /* child window */
 
if (wp == rootwp)
return;
 
++mwpaintNC; /* experimental NC paint handling*/
 
/* send hide message if currently visible*/
if(bSendMsg && wp->unmapcount == 0)
SendMessage(wp, WM_SHOWWINDOW, FALSE, 0L);
 
wp->unmapcount++;
 
for (childwp = wp->children; childwp; childwp = childwp->siblings)
MwHideWindow(childwp, bChangeFocus, bSendMsg);
 
if (wp == mousewp) {
MwCheckMouseWindow();
MwCheckCursor();
}
 
if (bChangeFocus && wp == focuswp)
SetFocus(rootwp->children? rootwp->children: rootwp);
 
/*
* If the parent window is still unmapped, then we are all done.
*/
if (wp->parent->unmapcount)
return;
 
/*
* Clear the area in the parent for this window, causing an
* exposure event for it.
*/
pwp = wp->parent;
MwClearWindow(pwp, wp->winrect.left - pwp->winrect.left,
wp->winrect.top - pwp->winrect.top,
wp->winrect.right - wp->winrect.left,
wp->winrect.bottom - wp->winrect.top, TRUE);
 
/*
* Finally clear and redraw all parts of our lower sibling
* windows that were covered by this window.
*/
sibwp = wp;
while (sibwp->siblings) {
sibwp = sibwp->siblings;
MwExposeArea(sibwp, wp->winrect.left, wp->winrect.top,
wp->winrect.right - wp->winrect.left,
wp->winrect.bottom - wp->winrect.top);
}
}
 
/*
* Map the window to possibly make it and its children visible on the screen.
* This is a recursive routine which decrements the unmapcount values for
* this window and all of its children, and causes exposure events for
* those windows which become visible.
*/
void
MwShowWindow(HWND hwnd, BOOL bSendMsg)
{
HWND wp = hwnd;
 
if (wp == rootwp)
return;
 
++mwpaintNC; /* experimental NC paint handling*/
 
if (wp->unmapcount)
wp->unmapcount--;
 
if (wp->unmapcount == 0) {
SendMessage(wp, WM_SHOWWINDOW, TRUE, 0L);
MwCheckMouseWindow();
MwCheckCursor();
}
 
/*
* If the window just became visible,
* then draw its border, clear it to the background color, and
* generate an exposure event.
*/
if (wp->unmapcount == 0) {
/*MwDrawBorder(wp);*/
MwClearWindow(wp, 0, 0, wp->winrect.right - wp->winrect.left,
wp->winrect.bottom - wp->winrect.top, TRUE);
}
 
/*
* Do the same thing for the children.
*/
for (wp = wp->children; wp; wp = wp->siblings)
MwShowWindow(wp, bSendMsg);
}
 
/*
* Raise a window to the highest level among its siblings.
*/
void
MwRaiseWindow(HWND hwnd)
{
HWND wp = hwnd;
HWND prevwp;
BOOL overlap;
 
if (!wp || wp == rootwp)
return;
 
++mwpaintNC; /* experimental NC paint handling*/
 
/*
* If this is already the highest window then we are done.
*/
prevwp = wp->parent->children;
if (prevwp == wp)
return;
 
/*
* Find the sibling just before this window so we can unlink it.
* Also, determine if any sibling ahead of us overlaps the window.
* Remember that for exposure events.
*/
overlap = FALSE;
while (prevwp->siblings != wp) {
overlap |= MwCheckOverlap(prevwp, wp);
prevwp = prevwp->siblings;
}
overlap |= MwCheckOverlap(prevwp, wp);
 
/*
* Now unlink the window and relink it in at the front of the
* sibling chain.
*/
prevwp->siblings = wp->siblings;
wp->siblings = wp->parent->children;
wp->parent->children = wp;
 
/*
* Finally redraw the window if necessary.
*/
if (overlap) {
/*MwDrawBorder(wp);*/
MwExposeArea(wp, wp->winrect.left, wp->winrect.top,
wp->winrect.right - wp->winrect.left,
wp->winrect.bottom - wp->winrect.top);
}
}
 
/*
* Lower a window to the lowest level among its siblings.
*/
void
MwLowerWindow(HWND hwnd)
{
HWND wp = hwnd;
HWND prevwp;
HWND sibwp; /* sibling window */
HWND expwp; /* siblings being exposed */
 
if (!wp || wp == rootwp || !wp->siblings)
return;
 
++mwpaintNC; /* experimental NC paint handling*/
 
/*
* Find the sibling just before this window so we can unlink us.
*/
prevwp = wp->parent->children;
if (prevwp != wp) {
while (prevwp->siblings != wp)
prevwp = prevwp->siblings;
}
 
/*
* Remember the first sibling that is after us, so we can
* generate exposure events for the remaining siblings. Then
* walk down the sibling chain looking for the last sibling.
*/
expwp = wp->siblings;
sibwp = wp;
while (sibwp->siblings)
sibwp = sibwp->siblings;
 
/*
* Now unlink the window and relink it in at the end of the
* sibling chain.
*/
if (prevwp == wp)
wp->parent->children = wp->siblings;
else
prevwp->siblings = wp->siblings;
sibwp->siblings = wp;
 
wp->siblings = NULL;
 
/*
* Finally redraw the sibling windows which this window covered
* if they overlapped our window.
*/
while (expwp && (expwp != wp)) {
if (MwCheckOverlap(wp, expwp))
MwExposeArea(expwp, wp->winrect.left, wp->winrect.top,
wp->winrect.right - wp->winrect.left,
wp->winrect.bottom - wp->winrect.top);
expwp = expwp->siblings;
}
}
 
/*
* Check to see if the first window overlaps the second window.
*/
BOOL
MwCheckOverlap(HWND topwp, HWND botwp)
{
MWCOORD minx1;
MWCOORD miny1;
MWCOORD maxx1;
MWCOORD maxy1;
MWCOORD minx2;
MWCOORD miny2;
MWCOORD maxx2;
MWCOORD maxy2;
 
if (topwp->unmapcount || botwp->unmapcount)
return FALSE;
 
minx1 = topwp->winrect.left;
miny1 = topwp->winrect.top;
maxx1 = topwp->winrect.right - 1;
maxy1 = topwp->winrect.bottom - 1;
 
minx2 = botwp->winrect.left;
miny2 = botwp->winrect.top;
maxx2 = botwp->winrect.right - 1;
maxy2 = botwp->winrect.bottom - 1;
 
if (minx1 > maxx2 || minx2 > maxx1 || miny1 > maxy2 || miny2 > maxy1)
return FALSE;
 
return TRUE;
}
 
/*
* Clear the specified area of a window and possibly make an exposure event.
* This sets the area window to its background color. If the exposeflag is
* nonzero, then this also creates an exposure event for the window.
*/
void
MwClearWindow(HWND wp, MWCOORD x, MWCOORD y, MWCOORD width, MWCOORD height,
BOOL exposeflag)
{
if (wp->unmapcount)
return;
 
/*
* Reduce the arguments so that they actually lie within the window.
*/
if (x < 0) {
width += x;
x = 0;
}
if (y < 0) {
height += y;
y = 0;
}
if (x + width > wp->winrect.right - wp->winrect.left)
width = (wp->winrect.right - wp->winrect.left) - x;
if (y + height > wp->winrect.bottom - wp->winrect.top)
height = (wp->winrect.bottom - wp->winrect.top) - y;
 
/*
* Now see if the region is really in the window. If not, then
* do nothing.
*/
if (x >= (wp->winrect.right - wp->winrect.left) ||
y >= (wp->winrect.bottom - wp->winrect.top) ||
width <= 0 || height <= 0)
return;
 
/*
* Now do the exposure if required.
*/
if (exposeflag)
MwDeliverExposureEvent(wp, x, y, width, height);
}
 
/*
* Handle the exposing of the specified absolute region of the screen,
* starting with the specified window. That window and all of its
* children will be redrawn and/or exposure events generated if they
* overlap the specified area. This is a recursive routine.
*/
void
MwExposeArea(HWND wp, MWCOORD rootx, MWCOORD rooty, MWCOORD width,
MWCOORD height)
{
if (wp->unmapcount)
return;
 
++mwpaintNC; /* experimental NC paint handling*/
 
/*
* First see if the area overlaps the window including the border.
* If not, then there is nothing more to do.
*/
if (rootx >= wp->winrect.right || rooty >= wp->winrect.bottom ||
(rootx + width) <= wp->winrect.left ||
(rooty + height) <= wp->winrect.top)
return;
 
#if 0
/*
* The area does overlap the window. See if the area overlaps
* the border, and if so, then redraw it.
*/
if (rootx < wp->winrect.left || rooty < wp->winrect.top ||
(rootx + width) > wp->winrect.right ||
(rooty + height) > wp->winrect.bottom)
MwDrawBorder(wp);
#endif
 
/*
* Now clear the window itself in the specified area,
* which might cause an exposure event.
*/
MwClearWindow(wp, rootx - wp->winrect.left, rooty - wp->winrect.top,
width, height, TRUE);
 
/*
* Now do the same for all the children.
*/
for (wp = wp->children; wp; wp = wp->siblings)
MwExposeArea(wp, rootx, rooty, width, height);
}
/wingdi.c
0,0 → 1,1438
/*
* Copyright (c) 1999, 2000, 2001 Greg Haerr <greg@censoft.com>
*
* Win32 API upper level graphics drawing routines
*/
#include "windows.h"
#include "wintern.h"
#include "device.h"
#include <stdlib.h>
#include <string.h>
 
#define MAXSYSCOLORS 29 /* # of COLOR_* system colors*/
#define MAXSTOCKOBJECTS 18 /* # of stock objects*/
 
#if ERASEMOVE
BOOL mwERASEMOVE = TRUE; /* default XORMOVE repaint algorithm*/
#else
BOOL mwERASEMOVE = FALSE; /* default ERASEMOVE repaint algorithm*/
#endif
 
/* cast a pointer to an integer*/
#if DOS_TURBOC
#define PTRTOINT unsigned long
#else
#define PTRTOINT unsigned int
#endif
 
static HDC cliphdc; /* current window cliprects*/
 
/* default bitmap for new DCs*/
static MWBITMAPOBJ default_bitmap = {
{OBJ_BITMAP, TRUE}, 1, 1, 1, 1, 1, 1
};
 
static BOOL MwExtTextOut(HDC hdc, int x, int y, UINT fuOptions,
CONST RECT *lprc, LPCVOID lpszString, UINT cbCount,
CONST INT *lpDx, int flags);
static int MwDrawText(HDC hdc, LPCVOID lpString, int nCount, LPRECT lpRect,
UINT uFormat, int flags);
 
HDC WINAPI
GetDCEx(HWND hwnd,HRGN hrgnClip,DWORD flags)
{
HDC hdc;
 
if(!hwnd) /* handle NULL hwnd => desktop*/
hwnd = rootwp;
 
/* handle private DC's*/
if(hwnd->owndc && !(flags & DCX_WINDOW))
return hwnd->owndc;
 
/* add caching?*/
hdc = GdItemNew(struct hdc);
if(!hdc)
return NULL;
 
hdc->psd = &scrdev;
hdc->hwnd = hwnd;
if(flags & DCX_DEFAULTCLIP) {
flags &= ~DCX_DEFAULTCLIP;
if(hwnd->style & WS_CLIPSIBLINGS)
flags |= DCX_CLIPSIBLINGS;
if(hwnd->style & WS_CLIPCHILDREN)
flags |= DCX_CLIPCHILDREN;
}
hdc->flags = flags;
hdc->bkmode = OPAQUE;
hdc->textalign = TA_LEFT | TA_TOP | TA_NOUPDATECP;
hdc->bkcolor = RGB(255, 255, 255); /* WHITE*/
hdc->textcolor = RGB(0, 0, 0); /* BLACK*/
hdc->brush = (MWBRUSHOBJ *)GetStockObject(WHITE_BRUSH);
hdc->pen = (MWPENOBJ *)GetStockObject(BLACK_PEN);
hdc->font = (MWFONTOBJ *)GetStockObject(SYSTEM_FONT);
#if UPDATEREGIONS
if(hrgnClip) {
/* make a copy of passed region*/
hdc->region = (MWRGNOBJ *)CreateRectRgn(0, 0, 0, 0);
CombineRgn((HRGN)hdc->region, hrgnClip, NULL, RGN_COPY);
}
#endif
 
/* make default bitmap compatible with scrdev
* otherwise problems occur later because selecting
* in the default bitmap overwrite planes and bpp
* in a memory dc, and thus it becomes incompatible
* with scrdev.
*/
default_bitmap.planes = scrdev.planes;
default_bitmap.bpp = scrdev.bpp;
hdc->bitmap = &default_bitmap;
 
hdc->drawmode = R2_COPYPEN;
hdc->pt.x = 0;
hdc->pt.y = 0;
 
/* assign private DC if CS_OWNDC and not WindowDC*/
if((hwnd->pClass->style & CS_OWNDC) && !(flags & DCX_WINDOW)) {
/* must exclude update region due to BeginPaint GetDCEx call*/
hdc->flags |= DCX_EXCLUDEUPDATE;
hwnd->owndc = hdc;
}
 
return hdc;
}
 
HDC WINAPI
GetDC(HWND hwnd)
{
/*
* Exclude update regions when drawing with GetDC.
* This is required because some programs use GetDC
* when painting outside of BeginPaint/EndPaint, and
* the update region is empty then.
*/
return GetDCEx(hwnd, NULL, DCX_DEFAULTCLIP|DCX_EXCLUDEUPDATE);
}
 
HDC WINAPI
GetWindowDC(HWND hwnd)
{
/*
* Exclude update region for now, since we
* don't keep track of non-client update regions yet
*/
return GetDCEx(hwnd, NULL,DCX_WINDOW|DCX_DEFAULTCLIP|DCX_EXCLUDEUPDATE);
}
 
/* free a DC allocated from GetDC*/
int WINAPI
ReleaseDC(HWND hwnd, HDC hdc)
{
/* don't delete a memory dc on release*/
if(!hdc || (hdc->psd->flags&PSF_MEMORY))
return 0;
 
if(hdc == cliphdc)
cliphdc = NULL;
 
/* handle private DC's*/
if(hdc->hwnd->owndc && !(hdc->flags & DCX_WINDOW))
return 1;
 
DeleteObject((HBRUSH)hdc->brush);
DeleteObject((HPEN)hdc->pen);
#if 0 /* don't delete font resources on ReleaseDC... use DeleteObject instead*/
DeleteObject((HFONT)hdc->font);
#endif
DeleteObject((HRGN)hdc->region);
/*
* We can only select a bitmap in a memory DC,
* so bitmaps aren't released except through DeleteDC.
*/
DeleteObject((HBITMAP)hdc->bitmap);
GdItemFree(hdc);
return 1;
}
 
/* free a dc allocated from CreateCompatibleDC*/
BOOL WINAPI
DeleteDC(HDC hdc)
{
/* don't delete a normal dc, only memory dc's*/
if(!hdc || !(hdc->psd->flags&PSF_MEMORY))
return 0;
 
/* free allocated memory screen device*/
hdc->psd->FreeMemGC(hdc->psd);
 
/* make it look like a GetDC dc, and free it*/
hdc->psd = &scrdev;
return ReleaseDC(NULL, hdc);
}
 
void
MwPaintNCArea(HWND hwnd)
{
SendMessage(hwnd, WM_NCPAINT, 0, 0L);
 
/* for now, we always paint NC scrollbar areas*/
MwPaintNCScrollbars(hwnd, NULL);
}
 
HDC WINAPI
BeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint)
{
HDC hdc;
 
/* first update non-client area*/
if(mwforceNCpaint || hwnd->paintNC != mwpaintNC) {
MwPaintNCArea(hwnd);
hwnd->paintNC = mwpaintNC;
}
 
/* If ERASEMOVE:
* Don't allow windows to repaint while user is moving
* a window. Instead, just erase backgrounds
* and indicate delayed painting required, which
* will occur after user completes window move.
*/
if(mwERASEMOVE && dragwp) {
hdc = NULL;
lpPaint->fErase = !DefWindowProc(hwnd, WM_ERASEBKGND, 0, 0L);
hwnd->gotPaintMsg = PAINT_DELAYPAINT;
} else {
HideCaret(hwnd);
 
/* FIXME: mdemo requires update excluded or draw errors occur*/
hdc = GetDCEx(hwnd, NULL, DCX_DEFAULTCLIP
|DCX_EXCLUDEUPDATE); /* FIXME - bug*/
 
/* erase client background*/
lpPaint->fErase = !SendMessage(hwnd, WM_ERASEBKGND, (WPARAM)hdc,
0L);
}
lpPaint->hdc = hdc;
 
GetUpdateRect(hwnd, &lpPaint->rcPaint, FALSE);
return hdc;
}
 
BOOL WINAPI
EndPaint(HWND hwnd, CONST PAINTSTRUCT *lpPaint)
{
ReleaseDC(hwnd, lpPaint->hdc);
#if UPDATEREGIONS
/* don't clear update region until done dragging*/
if(mwERASEMOVE && !dragwp)
GdSetRectRegion(hwnd->update, 0, 0, 0, 0);
#endif
ShowCaret(hwnd);
return TRUE;
}
 
COLORREF WINAPI
SetTextColor(HDC hdc, COLORREF crColor)
{
COLORREF oldtextcolor;
 
if (!hdc)
return CLR_INVALID;
oldtextcolor = hdc->textcolor;
hdc->textcolor = (MWCOLORVAL)crColor;
return oldtextcolor;
}
 
COLORREF WINAPI
SetBkColor(HDC hdc, COLORREF crColor)
{
COLORREF oldbkcolor;
 
if (!hdc)
return CLR_INVALID;
oldbkcolor = hdc->bkcolor;
hdc->bkcolor = crColor;
return oldbkcolor;
}
 
int WINAPI
SetBkMode(HDC hdc, int iBkMode)
{
int oldbkmode;
 
if(!hdc)
return 0;
oldbkmode = hdc->bkmode;
hdc->bkmode = iBkMode;
return oldbkmode;
}
 
UINT WINAPI
SetTextAlign(HDC hdc, UINT fMode)
{
UINT oldfMode;
 
if(!hdc)
return GDI_ERROR;
oldfMode = hdc->textalign;
hdc->textalign = fMode;
return oldfMode;
}
 
/* FIXME: releasing a DC does NOT change back the drawing mode!*/
int WINAPI
SetROP2(HDC hdc, int fnDrawMode)
{
int newmode, oldmode;
 
if(!hdc || (fnDrawMode <= 0 || fnDrawMode > R2_LAST))
return 0;
 
oldmode = hdc->drawmode;
newmode = fnDrawMode - 1; /* map to MWMODE_xxx*/
hdc->drawmode = newmode;
GdSetMode(newmode);
return oldmode;
}
 
/*
* Setup clip region from device context's associated window or bitmap.
* Memory DC's are always associated with the desktop window, and are
* always visible. Return the DC's hwnd if window is visible.
*/
HWND
MwPrepareDC(HDC hdc)
{
HWND hwnd;
 
if(!hdc || !hdc->hwnd)
return NULL;
 
hwnd = hdc->hwnd;
if (hwnd->unmapcount)
return NULL;
 
/*
* If the window is not the currently clipped one, then
* make it the current one and define its clip rectangles.
*/
if(hdc != cliphdc) {
/* clip memory dc's to the bitmap size*/
if(hdc->psd->flags&PSF_MEMORY) {
#if DYNAMICREGIONS
GdSetClipRegion(hdc->psd,
GdAllocRectRegion(0, 0, hdc->psd->xvirtres,
hdc->psd->yvirtres));
#else
static MWCLIPRECT crc = {0, 0, 0, 0};
 
crc.width = hdc->psd->xvirtres;
crc.height = hdc->psd->yvirtres;
GdSetClipRects(hdc->psd, 1, &crc);
#endif
} else MwSetClipWindow(hdc);
cliphdc = hdc;
}
 
return hwnd;
}
 
/* return RGB value at specified coordinates*/
COLORREF WINAPI
GetPixel(HDC hdc, int x, int y)
{
HWND hwnd;
POINT pt;
MWPIXELVAL pixel;
MWPALENTRY rgb;
 
hwnd = MwPrepareDC(hdc);
if(!hwnd)
return CLR_INVALID;
pt.x = x;
pt.y = y;
if(MwIsClientDC(hdc))
ClientToScreen(hwnd, &pt);
 
/* read pixel value*/
GdReadArea(hdc->psd, pt.x, pt.y, 1, 1, &pixel);
 
switch(hdc->psd->pixtype) {
case MWPF_TRUECOLOR0888:
case MWPF_TRUECOLOR888:
/* create RGB colorval from 8/8/8 pixel*/
return PIXEL888TOCOLORVAL(pixel);
 
case MWPF_TRUECOLOR565:
/* create RGB colorval from 5/6/5 pixel*/
return PIXEL565TOCOLORVAL(pixel);
 
case MWPF_TRUECOLOR555:
/* create RGB colorval from 5/5/5 pixel*/
return PIXEL555TOCOLORVAL(pixel);
 
case MWPF_TRUECOLOR332:
/* create RGB colorval from 3/3/2 pixel*/
return PIXEL332TOCOLORVAL(pixel);
 
case MWPF_PALETTE:
if(GdGetPalette(hdc->psd, pixel, 1, &rgb))
return RGB(rgb.r, rgb.g, rgb.b);
}
return CLR_INVALID;
}
 
COLORREF WINAPI
SetPixel(HDC hdc, int x, int y, COLORREF crColor)
{
HWND hwnd;
POINT pt;
 
hwnd = MwPrepareDC(hdc);
if(!hwnd)
return 0; /* doesn't return previous color*/
pt.x = x;
pt.y = y;
if(MwIsClientDC(hdc))
ClientToScreen(hwnd, &pt);
 
/* draw point in passed color*/
GdSetForeground(GdFindColor(crColor));
GdPoint(hdc->psd, pt.x, pt.y);
return 0; /* doesn't return previous color*/
}
 
BOOL WINAPI
MoveToEx(HDC hdc, int x, int y, LPPOINT lpPoint)
{
if(!hdc)
return FALSE;
if(lpPoint)
*lpPoint = hdc->pt;
hdc->pt.x = x;
hdc->pt.y = y;
return TRUE;
}
 
BOOL WINAPI
LineTo(HDC hdc, int x, int y)
{
HWND hwnd;
POINT beg, end;
 
hwnd = MwPrepareDC(hdc);
if(!hwnd)
return FALSE;
 
beg.x = hdc->pt.x;
beg.y = hdc->pt.y;
end.x = x;
end.y = y;
if(MwIsClientDC(hdc)) {
ClientToScreen(hwnd, &beg);
ClientToScreen(hwnd, &end);
}
 
/* draw line in current pen color*/
if(hdc->pen->style != PS_NULL) {
GdSetForeground(GdFindColor(hdc->pen->color));
/* don't draw last point*/
GdLine(hdc->psd, beg.x, beg.y, end.x, end.y, FALSE);
}
hdc->pt.x = x;
hdc->pt.y = y;
return TRUE;
}
 
/* draw line segments by connecting passed points*/
BOOL WINAPI
Polyline(HDC hdc, CONST POINT *lppt, int cPoints)
{
HWND hwnd;
POINT beg, end;
 
if(cPoints <= 1)
return FALSE;
 
hwnd = MwPrepareDC(hdc);
if(!hwnd)
return FALSE;
 
if(hdc->pen->style == PS_NULL)
return TRUE;
 
/* draw line in current pen color*/
GdSetForeground(GdFindColor(hdc->pen->color));
 
beg = *lppt++;
if(MwIsClientDC(hdc))
ClientToScreen(hwnd, &beg);
while(--cPoints > 0) {
end = *lppt++;
if(MwIsClientDC(hdc))
ClientToScreen(hwnd, &end);
 
/* don't draw last point*/
GdLine(hdc->psd, beg.x, beg.y, end.x, end.y, FALSE);
 
beg = end;
}
return TRUE;
}
 
BOOL WINAPI
Rectangle(HDC hdc, int nLeft, int nTop, int nRight, int nBottom)
{
HWND hwnd;
RECT rc;
 
hwnd = MwPrepareDC(hdc);
if(!hwnd)
return FALSE;
 
SetRect(&rc, nLeft, nTop, nRight, nBottom);
if(MwIsClientDC(hdc))
MapWindowPoints(hwnd, NULL, (LPPOINT)&rc, 2);
 
/* draw rectangle in current pen color*/
if(hdc->pen->style != PS_NULL) {
GdSetForeground(GdFindColor(hdc->pen->color));
GdRect(hdc->psd, rc.left, rc.top,
rc.right - rc.left, rc.bottom - rc.top);
}
 
/* fill rectangle in current brush color*/
if(hdc->brush->style != BS_NULL) {
InflateRect(&rc, -1, -1);
GdSetForeground(GdFindColor(hdc->brush->color));
GdFillRect(hdc->psd, rc.left, rc.top, rc.right - rc.left,
rc.bottom - rc.top);
}
 
return TRUE;
}
 
BOOL WINAPI
Ellipse(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect)
{
HWND hwnd;
int rx, ry;
RECT rc;
 
hwnd = MwPrepareDC(hdc);
if(!hwnd)
return FALSE;
 
SetRect(&rc, nLeftRect, nTopRect, nRightRect, nBottomRect);
if(MwIsClientDC(hdc))
MapWindowPoints(hwnd, NULL, (LPPOINT)&rc, 2);
 
rx = (rc.right - rc.left)/2 - 1;
ry = (rc.bottom - rc.top)/2 - 1;
rc.left += rx;
rc.top += ry;
 
/* fill ellipse in current brush color*/
if(hdc->brush->style != BS_NULL) {
InflateRect(&rc, -1, -1);
GdSetForeground(GdFindColor(hdc->brush->color));
GdEllipse(hdc->psd, rc.left, rc.top, rx, ry, TRUE);
}
 
/* draw ellipse outline in current pen color*/
if(hdc->pen->style != PS_NULL) {
GdSetForeground(GdFindColor(hdc->pen->color));
GdEllipse(hdc->psd, rc.left, rc.top, rx, ry, FALSE);
}
 
return TRUE;
}
 
static void
dopiearc(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect,
int ax, int ay, int bx, int by, int type)
{
HWND hwnd;
int rx, ry;
RECT rc, rc2;
 
hwnd = MwPrepareDC(hdc);
if(!hwnd)
return;
 
SetRect(&rc, nLeftRect, nTopRect, nRightRect, nBottomRect);
SetRect(&rc2, ax, ay, bx, by);
if(MwIsClientDC(hdc)) {
MapWindowPoints(hwnd, NULL, (LPPOINT)&rc, 2);
MapWindowPoints(hwnd, NULL, (LPPOINT)&rc2, 2);
}
 
rx = (rc.right - rc.left)/2 - 1;
ry = (rc.bottom - rc.top)/2 - 1;
rc.left += rx;
rc.top += ry;
 
/* fill ellipse in current brush color*/
if(hdc->brush->style != BS_NULL && type == MWPIE) {
GdSetForeground(GdFindColor(hdc->brush->color));
GdArc(hdc->psd, rc.left, rc.top, rx, ry,
rc2.left, rc2.top, rc2.right, rc2.bottom, MWPIE);
}
 
/* draw ellipse outline in current pen color*/
if(hdc->pen->style != PS_NULL) {
GdSetForeground(GdFindColor(hdc->pen->color));
if(type == MWPIE)
type = MWARC; /* MWARCOUTLINE?*/
GdArc(hdc->psd, rc.left, rc.top, rx, ry,
rc2.left, rc2.top, rc2.right, rc2.bottom, type);
}
}
 
BOOL WINAPI
Arc(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect,
int nXStartArc, int nYStartArc, int nXEndArc, int nYEndArc)
{
dopiearc(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect,
nXStartArc, nYStartArc, nXEndArc, nYEndArc, MWARC);
return TRUE;
}
 
BOOL WINAPI
Pie(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect,
int nXRadial1, int nYRadial1, int nXRadial2, int nYRadial2)
{
dopiearc(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect,
nXRadial1, nYRadial1, nXRadial2, nYRadial2, MWPIE);
return TRUE;
}
 
BOOL WINAPI
Polygon(HDC hdc, CONST POINT *lpPoints, int nCount)
{
HWND hwnd;
int i;
LPPOINT pp, ppAlloc = NULL;
 
hwnd = MwPrepareDC(hdc);
if(!hwnd)
return FALSE;
 
if(MwIsClientDC(hdc)) {
/* convert points to client coords*/
ppAlloc = (LPPOINT)malloc(nCount * sizeof(POINT));
if(!ppAlloc)
return FALSE;
memcpy(ppAlloc, lpPoints, nCount*sizeof(POINT));
pp = ppAlloc;
for(i=0; i<nCount; ++i)
ClientToScreen(hwnd, pp++);
pp = ppAlloc;
} else pp = (LPPOINT)lpPoints;
 
/* fill polygon in current brush color*/
if(hdc->brush->style != BS_NULL) {
GdSetForeground(GdFindColor(hdc->brush->color));
GdFillPoly(hdc->psd, nCount, pp);
}
 
/* draw polygon outline in current pen color*/
if(hdc->pen->style != PS_NULL) {
GdSetForeground(GdFindColor(hdc->pen->color));
GdPoly(hdc->psd, nCount, pp);
}
 
if(ppAlloc)
free(ppAlloc);
return TRUE;
}
 
/* draw nCount polygons*/
BOOL WINAPI
PolyPolygon(HDC hdc, CONST POINT *lpPoints, LPINT lpPolyCounts, int nCount)
{
while(--nCount >= 0) {
if (!Polygon(hdc, lpPoints, *lpPolyCounts))
return FALSE;
lpPoints += *lpPolyCounts++;
}
return TRUE;
}
 
int WINAPI
FillRect(HDC hdc, CONST RECT *lprc, HBRUSH hbr)
{
HWND hwnd;
RECT rc;
MWBRUSHOBJ * obr = (MWBRUSHOBJ *)hbr;
COLORREF crFill;
 
hwnd = MwPrepareDC(hdc);
if(!hwnd || !obr)
return FALSE;
 
if(!lprc) {
if(MwIsClientDC(hdc))
GetClientRect(hwnd, &rc);
else
GetWindowRect(hwnd, &rc);
lprc = &rc;
} else
rc = *lprc;
if(MwIsClientDC(hdc))
MapWindowPoints(hwnd, NULL, (LPPOINT)&rc, 2);
 
/* handle COLOR_xxx + 1 passed as HBRUSH*/
if((PTRTOINT)obr <= MAXSYSCOLORS)
crFill = GetSysColor((int)obr-1);
else {
/* get color from passed HBRUSH*/
if(obr->style == BS_NULL)
return TRUE;
crFill = obr->color;
}
 
/* fill rectangle in passed brush color*/
GdSetForeground(GdFindColor(crFill));
GdFillRect(hdc->psd, rc.left, rc.top,
rc.right - rc.left, rc.bottom - rc.top);
return TRUE;
}
 
/* ascii*/
BOOL WINAPI
TextOut(HDC hdc, int x, int y, LPCSTR lpszString, int cbString)
{
/* kaffe port wants MWTF_UTF8 here...*/
return MwExtTextOut(hdc, x, y, 0, NULL, lpszString, cbString, NULL,
MWTF_ASCII);
}
 
/* ascii*/
BOOL WINAPI
ExtTextOut(HDC hdc, int x, int y, UINT fuOptions, CONST RECT *lprc,
LPCSTR lpszString, UINT cbCount, CONST INT *lpDx)
{
return MwExtTextOut(hdc, x, y, fuOptions, lprc, lpszString,
cbCount, lpDx, MWTF_ASCII);
}
 
/* unicode*/
BOOL WINAPI
ExtTextOutW(HDC hdc, int x, int y, UINT fuOptions, CONST RECT *lprc,
LPCWSTR lpszString, UINT cbCount, CONST INT *lpDx)
{
return MwExtTextOut(hdc, x, y, fuOptions, lprc, lpszString,
cbCount, lpDx, MWTF_UC16);
}
 
/* internal version of ExtTextOut, passed flags for text data type*/
static BOOL
MwExtTextOut(HDC hdc, int x, int y, UINT fuOptions, CONST RECT *lprc,
LPCVOID lpszString, UINT cbCount, CONST INT *lpDx, int flags)
{
HWND hwnd;
POINT pt;
RECT rc;
 
hwnd = MwPrepareDC(hdc);
if(!hwnd)
return FALSE;
 
pt.x = x;
pt.y = y;
if(MwIsClientDC(hdc))
ClientToScreen(hwnd, &pt);
 
/* optionally fill passed rectangle*/
if(lprc && (fuOptions&ETO_OPAQUE)) {
rc = *lprc;
if(MwIsClientDC(hdc))
MapWindowPoints(hwnd, NULL, (LPPOINT)&rc, 2);
 
/* fill rectangle with current background color*/
GdSetForeground(GdFindColor(hdc->bkcolor));
GdFillRect(hdc->psd, rc.left, rc.top, rc.right - rc.left,
rc.bottom - rc.top);
GdSetUseBackground(FALSE);
} else {
/* use current background mode for text background draw*/
GdSetUseBackground(hdc->bkmode == OPAQUE? TRUE: FALSE);
/* always set background color in case GdArea is
* used to draw, which compares gr_foreground != gr_background
* if gr_usebg is false...
*/
/*if(hdc->bkmode == OPAQUE)*/
GdSetBackground(GdFindColor(hdc->bkcolor));
}
 
/* nyi: lpDx*/
 
/* draw text in current text foreground and background color*/
GdSetForeground(GdFindColor(hdc->textcolor));
GdSetFont(hdc->font->pfont);
 
/* this whole text alignment thing needs rewriting*/
if((hdc->textalign & TA_BASELINE) == TA_BASELINE) {
/* this is not right... changed for kaffe port
flags |= MWTF_TOP;
*/
flags |= MWTF_BASELINE;
} else if(hdc->textalign & TA_BOTTOM) {
MWCOORD ph, pw, pb;
 
if(lprc)
pt.y += lprc->bottom - lprc->top;
else {
GdGetTextSize(hdc->font->pfont, lpszString, cbCount,
&pw, &ph, &pb, flags);
pt.y += ph;
}
flags |= MWTF_BOTTOM;
} else
flags |= MWTF_TOP;
GdText(hdc->psd, pt.x, pt.y, lpszString, cbCount, flags);
 
return TRUE;
}
 
/* ascii*/
int WINAPI
DrawTextA(HDC hdc, LPCSTR lpString, int nCount, LPRECT lpRect, UINT uFormat)
{
return MwDrawText(hdc, lpString, nCount, lpRect, uFormat, MWTF_ASCII);
}
 
/* unicode*/
int WINAPI
DrawTextW(HDC hdc, LPCWSTR lpString, int nCount, LPRECT lpRect, UINT uFormat)
{
return MwDrawText(hdc, lpString, nCount, lpRect, uFormat, MWTF_UC16);
}
 
/* note: many DT_x aren't implemented in this function*/
/* internal version of DrawText, passed flags for text data type*/
static int
MwDrawText(HDC hdc, LPCVOID lpString, int nCount, LPRECT lpRect, UINT uFormat,
int flags)
{
MWCOORD x, y, width, height, baseline;
 
if(nCount == -1)
nCount = strlen(lpString);
 
if(uFormat & (DT_CALCRECT|DT_CENTER|DT_RIGHT)) {
if(!hdc)
return 0;
GdGetTextSize(hdc->font->pfont, lpString, nCount,
&width, &height, &baseline, MWTF_ASCII);
}
x = lpRect->left;
y = lpRect->top;
 
if(uFormat & DT_CALCRECT) {
lpRect->right = x + width;
lpRect->bottom = y + height;
return height;
}
 
if(uFormat & DT_CENTER)
x = (lpRect->left + lpRect->right - width) / 2;
else if(uFormat & DT_RIGHT)
x += lpRect->right - width;
 
/* draw text at DT_TOP using current fg, bg and bkmode*/
MwExtTextOut(hdc, x, y, 0, NULL, lpString, nCount, NULL, flags);
return height;
}
 
/* Microwindows only*/
BOOL WINAPI
DrawDIB(HDC hdc,int x,int y,PMWIMAGEHDR pimage)
{
HWND hwnd;
POINT pt;
 
hwnd = MwPrepareDC(hdc);
if(!hwnd || !pimage)
return FALSE;
pt.x = x;
pt.y = y;
if(MwIsClientDC(hdc))
ClientToScreen(hwnd, &pt);
 
GdDrawImage(hdc->psd, pt.x, pt.y, pimage);
return TRUE;
}
 
/* define color scheme: A (tan), B (winstd) or C (old)*/
#if ELKS
#define B
#else
#define A
#endif
 
#define A_RGB(r,g,b)
#define B_RGB(r,g,b)
#define C_RGB(r,g,b)
 
#ifdef A
#undef A_RGB
#define A_RGB(r,g,b) RGB(r,g,b),
#endif
#ifdef B
#undef B_RGB
#define B_RGB(r,g,b) RGB(r,g,b),
#endif
#ifdef C
#undef C_RGB
#define C_RGB(r,g,b) RGB(r,g,b),
#endif
 
static COLORREF sysColors[MAXSYSCOLORS] = {
RGB(192, 192, 192), /* COLOR_SCROLLBAR 0*/
RGB( 0, 128, 128), /* COLOR_BACKGROUND */
A_RGB(128, 0, 0) /* COLOR_ACTIVECAPTION */
B_RGB(128, 0, 128) /* COLOR_ACTIVECAPTION */
C_RGB(128, 0, 128) /* COLOR_ACTIVECAPTION */
A_RGB(162, 141, 104) /* COLOR_INACTIVECAPTION */
B_RGB(128, 128, 128) /* COLOR_INACTIVECAPTION */
C_RGB( 0, 64, 128) /* COLOR_INACTIVECAPTION */
RGB(192, 192, 192), /* COLOR_MENU */
RGB(255, 255, 255), /* COLOR_WINDOW 5*/
RGB( 0, 0, 0), /* COLOR_WINDOWFRAME */
RGB( 0, 0, 0), /* COLOR_MENUTEXT */
RGB( 0, 0, 0), /* COLOR_WINDOWTEXT */
RGB(255, 255, 255), /* COLOR_CAPTIONTEXT */
RGB(192, 192, 192), /* COLOR_ACTIVEBORDER 10*/
RGB(192, 192, 192), /* COLOR_INACTIVEBORDER */
RGB(128, 128, 128), /* COLOR_APPWORKSPACE */
RGB(128, 0, 0), /* COLOR_HIGHLIGHT */
RGB(255, 255, 255), /* COLOR_HIGHLIGHTTEXT */
A_RGB(213, 204, 187) /* COLOR_BTNFACE 15*/
B_RGB(192, 192, 192) /* COLOR_BTNFACE 15*/
C_RGB(160, 160, 160) /* COLOR_BTNFACE 15*/
A_RGB(162, 141, 104) /* COLOR_BTNSHADOW */
B_RGB(128, 128, 128) /* COLOR_BTNSHADOW */
C_RGB(128, 128, 128) /* COLOR_BTNSHADOW */
RGB( 64, 64, 64), /* COLOR_GRAYTEXT */
RGB( 0, 0, 0), /* COLOR_BTNTEXT */
RGB(192, 192, 192), /* COLOR_INACTIVECAPTIONTEXT */
A_RGB(234, 230, 221) /* COLOR_BTNHIGHLIGHT 20*/
B_RGB(255, 255, 255) /* COLOR_BTNHIGHLIGHT 20*/
C_RGB(223, 223, 223) /* COLOR_BTNHIGHLIGHT 20*/
RGB( 0, 0, 0), /* COLOR_3DDKSHADOW */
A_RGB(213, 204, 187) /* COLOR_3DLIGHT */
B_RGB(223, 223, 223) /* COLOR_3DLIGHT */
C_RGB(192, 192, 192) /* COLOR_3DLIGHT */
RGB( 0, 0, 0), /* COLOR_INFOTEXT */
RGB(225, 255, 255), /* COLOR_INFOBK */
RGB(184, 180, 184), /* COLOR_ALTERNATEBTNFACE 25*/
RGB( 0, 0, 255), /* COLOR_HOTLIGHT */
RGB( 16, 132, 208), /* COLOR_GRADIENTACTIVECAPTION */
RGB(184, 180, 184) /* COLOR_GRADIENTINACTIVECAPTION 28*/
};
 
DWORD WINAPI
GetSysColor(int nIndex)
{
if(nIndex >= 0 && nIndex < MAXSYSCOLORS)
return sysColors[nIndex];
return 0;
}
 
COLORREF WINAPI
SetSysColor(int nIndex, COLORREF crColor) /* Microwindows only*/
{
COLORREF oldColor;
 
if(nIndex >= 0 && nIndex < MAXSYSCOLORS) {
oldColor = sysColors[nIndex];
sysColors[nIndex] = crColor;
return oldColor;
}
return 0;
}
 
static MWBRUSHOBJ OBJ_WHITE_BRUSH = {
{OBJ_BRUSH, TRUE}, BS_SOLID, RGB(255, 255, 255)
};
 
static MWBRUSHOBJ OBJ_LTGRAY_BRUSH = {
{OBJ_BRUSH, TRUE}, BS_SOLID, RGB(192, 192, 192)
};
 
static MWBRUSHOBJ OBJ_GRAY_BRUSH = {
{OBJ_BRUSH, TRUE}, BS_SOLID, RGB(128, 128, 128)
};
 
static MWBRUSHOBJ OBJ_DKGRAY_BRUSH = {
{OBJ_BRUSH, TRUE}, BS_SOLID, RGB(32, 32, 32)
};
 
static MWBRUSHOBJ OBJ_BLACK_BRUSH = {
{OBJ_BRUSH, TRUE}, BS_SOLID, RGB(0, 0, 0)
};
 
static MWBRUSHOBJ OBJ_NULL_BRUSH = {
{OBJ_BRUSH, TRUE}, BS_NULL, RGB(0, 0, 0)
};
 
static MWPENOBJ OBJ_WHITE_PEN = {
{OBJ_PEN, TRUE}, PS_SOLID, RGB(255, 255, 255)
};
 
static MWPENOBJ OBJ_BLACK_PEN = {
{OBJ_PEN, TRUE}, PS_SOLID, RGB(0, 0, 0)
};
 
static MWPENOBJ OBJ_NULL_PEN = {
{OBJ_PEN, TRUE}, PS_NULL, RGB(0, 0, 0)
};
 
static MWFONTOBJ OBJ_OEM_FIXED_FONT = {
{OBJ_FONT, TRUE}, NULL, MWFONT_OEM_FIXED
};
 
static MWFONTOBJ OBJ_ANSI_FIXED_FONT = {
{OBJ_FONT, TRUE}, NULL, MWFONT_SYSTEM_FIXED
};
 
static MWFONTOBJ OBJ_ANSI_VAR_FONT = {
{OBJ_FONT, TRUE}, NULL, MWFONT_SYSTEM_VAR
};
 
static MWFONTOBJ OBJ_SYSTEM_FONT = {
{OBJ_FONT, TRUE}, NULL, MWFONT_SYSTEM_VAR
};
 
static MWFONTOBJ OBJ_DEVICE_DEFAULT_FONT = {
{OBJ_FONT, TRUE}, NULL, MWFONT_OEM_FIXED
};
 
static MWFONTOBJ OBJ_SYSTEM_FIXED_FONT = {
{OBJ_FONT, TRUE}, NULL, MWFONT_SYSTEM_FIXED
};
 
static MWFONTOBJ OBJ_DEFAULT_GUI_FONT = {
{OBJ_FONT, TRUE}, NULL, MWFONT_GUI_VAR
};
 
static struct hgdiobj *stockObjects[MAXSTOCKOBJECTS] = {
(struct hgdiobj *)&OBJ_WHITE_BRUSH, /* WHITE_BRUSH*/
(struct hgdiobj *)&OBJ_LTGRAY_BRUSH, /* LTGRAY_BRUSH*/
(struct hgdiobj *)&OBJ_GRAY_BRUSH, /* GRAY_BRUSH*/
(struct hgdiobj *)&OBJ_DKGRAY_BRUSH, /* DKGRAY_BRUSH*/
(struct hgdiobj *)&OBJ_BLACK_BRUSH, /* BLACK_BRUSH*/
(struct hgdiobj *)&OBJ_NULL_BRUSH, /* NULL_BRUSH*/
(struct hgdiobj *)&OBJ_WHITE_PEN, /* WHITE_PEN*/
(struct hgdiobj *)&OBJ_BLACK_PEN, /* BLACK_PEN*/
(struct hgdiobj *)&OBJ_NULL_PEN, /* NULL_PEN*/
(struct hgdiobj *)NULL,
(struct hgdiobj *)&OBJ_OEM_FIXED_FONT, /* OEM_FIXED_FONT*/
(struct hgdiobj *)&OBJ_ANSI_FIXED_FONT, /* ANSI_FIXED_FONT*/
(struct hgdiobj *)&OBJ_ANSI_VAR_FONT, /* ANSI_VAR_FONT*/
(struct hgdiobj *)&OBJ_SYSTEM_FONT, /* SYSTEM_FONT*/
(struct hgdiobj *)&OBJ_DEVICE_DEFAULT_FONT, /* DEVICE_DEFAULT_FONT*/
(struct hgdiobj *)NULL, /* DEFAULT_PALETTE*/
(struct hgdiobj *)&OBJ_SYSTEM_FIXED_FONT, /* SYSTEM_FIXED_FONT*/
(struct hgdiobj *)&OBJ_DEFAULT_GUI_FONT /* DEFAULT_GUI_FONT*/
};
 
HGDIOBJ WINAPI
GetStockObject(int nObject)
{
HGDIOBJ pObj;
MWFONTOBJ * pFont;
 
if(nObject >= 0 && nObject < MAXSTOCKOBJECTS) {
pObj = stockObjects[nObject];
 
/* create stock fonts on first access*/
if(pObj->hdr.type == OBJ_FONT) {
pFont = (MWFONTOBJ *)pObj;
if(pFont->pfont == NULL) {
pFont->pfont = GdCreateFont(&scrdev,
pFont->name, 0, NULL);
}
return pObj;
}
 
/* implement multiple color schemes with
* standard background brushes...
*/
switch(nObject) {
case LTGRAY_BRUSH:
case GRAY_BRUSH:
((MWBRUSHOBJ *)pObj)->color =GetSysColor(COLOR_BTNFACE);
break;
case DKGRAY_BRUSH:
((MWBRUSHOBJ *)pObj)->color =
GetSysColor(COLOR_BTNSHADOW);
break;
}
return pObj;
}
return NULL;
}
 
HGDIOBJ WINAPI
SelectObject(HDC hdc, HGDIOBJ hObject)
{
HGDIOBJ objOrg;
MWBITMAPOBJ * pb;
 
if(!hdc || !hObject)
return NULL;
 
switch(hObject->hdr.type) {
case OBJ_PEN:
objOrg = (HGDIOBJ)hdc->pen;
hdc->pen = (MWPENOBJ *)hObject;
break;
case OBJ_BRUSH:
objOrg = (HGDIOBJ)hdc->brush;
hdc->brush = (MWBRUSHOBJ *)hObject;
break;
case OBJ_FONT:
objOrg = (HGDIOBJ)hdc->font;
hdc->font = (MWFONTOBJ *)hObject;
break;
case OBJ_BITMAP:
/* must be memory dc to select bitmap*/
if(!(hdc->psd->flags&PSF_MEMORY))
return NULL;
objOrg = (HGDIOBJ)hdc->bitmap;
 
/* setup mem dc for drawing into bitmap*/
pb = (MWBITMAPOBJ *)hObject;
 
/* init memory context*/
if (!hdc->psd->MapMemGC(hdc->psd, pb->width, pb->height,
pb->planes, pb->bpp, pb->linelen, pb->size,
&pb->bits[0]))
return NULL;
 
hdc->bitmap = (MWBITMAPOBJ *)hObject;
break;
#if UPDATEREGIONS
case OBJ_REGION:
/*objOrg = (HGDIOBJ)hdc->region;*/
objOrg = NULL; /* FIXME? hdc->region is destroyed below*/
SelectClipRgn(hdc, (HRGN)hObject);
break;
#endif
default:
return NULL;
}
 
return objOrg;
}
 
BOOL WINAPI
DeleteObject(HGDIOBJ hObject)
{
if(!hObject || hObject->hdr.stockobj)
return FALSE;
if(hObject->hdr.type == OBJ_FONT)
GdDestroyFont(((MWFONTOBJ *)hObject)->pfont);
if(hObject->hdr.type == OBJ_REGION)
GdDestroyRegion(((MWRGNOBJ *)hObject)->rgn);
GdItemFree(hObject);
return TRUE;
}
 
#if UPDATEREGIONS
/* region is passed in client coords (win32 api doc bug)*/
int WINAPI
SelectClipRgn(HDC hdc, HRGN hrgn)
{
return ExtSelectClipRgn(hdc, hrgn, RGN_COPY);
}
 
/*
* Select a user clip region into DC, recalculate final clipregion.
* Only a copy of the passed region is used.
*/
/* region is passed in client coords (win32 api doc bug)*/
int WINAPI
ExtSelectClipRgn(HDC hdc, HRGN hrgn, int fnMode)
{
HRGN newrgn;
 
if(!hdc)
return ERROR;
if(hdc->region != (MWRGNOBJ *)hrgn) {
/* combine region if not null*/
if(hrgn) {
newrgn = CreateRectRgn(0, 0, 0, 0);
 
/*
* Temporarily convert region from
* client coords to screen coords, since
* hwnd->update is kept in screen coords.
*/
OffsetRgn(hrgn, hdc->hwnd->clirect.left,
hdc->hwnd->clirect.top);
 
if(fnMode == RGN_COPY)
CombineRgn(newrgn, hrgn, NULL, fnMode);
else CombineRgn(newrgn, (HRGN)hdc->region, hrgn,fnMode);
 
/* convert passed region back to client coords*/
OffsetRgn(hrgn, -hdc->hwnd->clirect.left,
-hdc->hwnd->clirect.top);
 
 
hrgn = newrgn;
}
DeleteObject((HRGN)hdc->region);
hdc->region = (MWRGNOBJ *)hrgn;
 
/* force recalc of clipregion*/
cliphdc = NULL;
MwPrepareDC(hdc);
}
if(hrgn)
return ((MWRGNOBJ *)hrgn)->rgn->type;
return NULLREGION;
}
 
/* update region is returned in client coordinates*/
int WINAPI
GetUpdateRgn(HWND hwnd, HRGN hrgn, BOOL bErase)
{
/* FIXME bErase*/
if(!hwnd)
return ERROR;
 
/* convert internal update region to client coords*/
GdOffsetRegion(hwnd->update, -hwnd->clirect.left, -hwnd->clirect.top);
GdCopyRegion(((MWRGNOBJ *)hrgn)->rgn, hwnd->update);
GdOffsetRegion(hwnd->update, hwnd->clirect.left, hwnd->clirect.top);
return hwnd->update->type;
}
#endif /* UPDATEREGIONS*/
 
/* update rectangle is returned in client coords*/
BOOL WINAPI
GetUpdateRect(HWND hwnd, LPRECT lpRect, BOOL bErase)
{
/* FIXME bErase*/
if(!hwnd)
return FALSE;
#if UPDATEREGIONS
if(lpRect) {
*lpRect = hwnd->update->extents;
/* convert to client coords*/
ScreenToClient(hwnd, (LPPOINT)&lpRect->left);
ScreenToClient(hwnd, (LPPOINT)&lpRect->right);
}
 
/* return TRUE if update region is non-empty*/
return hwnd->update->type != NULLREGION;
#else
GetClientRect(hwnd, lpRect);
return TRUE;
#endif
}
 
HBRUSH WINAPI
CreateSolidBrush(COLORREF crColor)
{
MWBRUSHOBJ *hbr;
 
hbr = GdItemNew(MWBRUSHOBJ);
if(!hbr)
return NULL;
hbr->hdr.type = OBJ_BRUSH;
hbr->hdr.stockobj = FALSE;
hbr->style = BS_SOLID;
hbr->color = crColor;
return (HBRUSH)hbr;
}
 
HPEN WINAPI
CreatePen(int nPenStyle, int nWidth, COLORREF crColor)
{
MWPENOBJ *hpen;
 
/* fix: nWidth > 1*/
hpen = GdItemNew(MWPENOBJ);
if(!hpen)
return NULL;
hpen->hdr.type = OBJ_PEN;
hpen->hdr.stockobj = FALSE;
hpen->style = nPenStyle;
hpen->color = crColor;
return (HPEN)hpen;
}
 
HBITMAP WINAPI
CreateCompatibleBitmap(HDC hdc, int nWidth, int nHeight)
{
MWBITMAPOBJ * hbitmap;
int size;
int linelen;
 
if(!hdc)
return NULL;
 
nWidth = MWMAX(nWidth, 1);
nHeight = MWMAX(nHeight, 1);
 
/* calc memory allocation size and linelen from width and height*/
if(!GdCalcMemGCAlloc(hdc->psd, nWidth, nHeight, 0, 0, &size, &linelen))
return NULL;
 
/* allocate gdi object*/
hbitmap = (MWBITMAPOBJ *)GdItemAlloc(sizeof(MWBITMAPOBJ)-1+size);
if(!hbitmap)
return NULL;
hbitmap->hdr.type = OBJ_BITMAP;
hbitmap->hdr.stockobj = FALSE;
hbitmap->width = nWidth;
hbitmap->height = nHeight;
 
/* create compatible with hdc*/
hbitmap->planes = hdc->psd->planes;
hbitmap->bpp = hdc->psd->bpp;
hbitmap->linelen = linelen;
hbitmap->size = size;
 
return (HBRUSH)hbitmap;
}
 
/* return NULL if no driver bitblit available*/
HDC WINAPI
CreateCompatibleDC(HDC hdc)
{
HDC hdcmem;
PSD psd;
PSD mempsd;
 
/* allow NULL hdc to mean screen*/
psd = hdc? hdc->psd: &scrdev;
 
/* allocate memory device, if driver doesn't blit will fail*/
mempsd = psd->AllocateMemGC(psd);
if(!mempsd)
return NULL;
 
/* allocate a DC for DesktopWindow*/
hdcmem = GetDCEx(NULL, NULL, DCX_DEFAULTCLIP);
if(!hdcmem) {
mempsd->FreeMemGC(mempsd);
return NULL;
}
hdcmem->psd = mempsd;
 
/* select in default bitmap to setup mem device parms*/
SelectObject(hdcmem, (HGDIOBJ)&default_bitmap);
return hdcmem;
}
 
BOOL WINAPI
BitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight,
HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop)
{
/* use stretch blit with equal src and dest width/height*/
return StretchBlt(hdcDest, nXDest, nYDest, nWidth, nHeight,
hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);
}
 
BOOL WINAPI
StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest,
int nHeightDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc,
int nWidthSrc, int nHeightSrc, DWORD dwRop)
{
 
HWND hwnd;
POINT dst, src;
 
if(!hdcDest || !hdcSrc)
return FALSE;
dst.x = nXOriginDest;
dst.y = nYOriginDest;
src.x = nXOriginSrc;
src.y = nYOriginSrc;
 
/* if src screen DC, convert coords*/
/* FIXME: src clipping isn't checked, only one set of cliprects also*/
if(!MwIsMemDC(hdcSrc) && MwIsClientDC(hdcSrc)) {
if(!(hwnd = MwPrepareDC(hdcSrc)))
return FALSE;
ClientToScreen(hwnd, &src);
}
/* if dst screen DC, convert coords and set clipping*/
/* FIXME: if dest is also screen, src clipping will be overwritten*/
if(!MwIsMemDC(hdcDest) && MwIsClientDC(hdcDest)) {
if(!(hwnd = MwPrepareDC(hdcDest)))
return FALSE;
ClientToScreen(hwnd, &dst);
}
 
if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc) {
GdBlit(hdcDest->psd, dst.x, dst.y, nWidthDest, nHeightDest,
hdcSrc->psd, src.x, src.y, dwRop);
} else {
GdStretchBlit(hdcDest->psd, dst.x, dst.y,
nWidthDest, nHeightDest, hdcSrc->psd, src.x, src.y,
nWidthSrc, nHeightSrc, dwRop);
}
return TRUE;
}
 
UINT WINAPI
GetSystemPaletteEntries(HDC hdc,UINT iStartIndex,UINT nEntries,
LPPALETTEENTRY lppe)
{
UINT i;
MWPALENTRY rgb;
 
/* currently, we only work for screen device*/
if(!hdc || hdc->psd != &scrdev)
return 0;
 
for(i=0; i<nEntries; ++i) {
if(!GdGetPalette(hdc->psd, i+iStartIndex, 1, &rgb))
break;
lppe->peRed = rgb.r;
lppe->peGreen = rgb.g;
lppe->peBlue = rgb.b;
lppe->peFlags = 0;
++lppe;
}
return i;
}
 
/* allow NULL hdc for scrdev*/
int WINAPI
GetDeviceCaps(HDC hdc, int nIndex)
{
PSD psd;
 
if (!hdc)
psd = &scrdev;
else psd = hdc->psd;
 
switch(nIndex) {
case HORZRES:
return psd->xvirtres;
case VERTRES:
return psd->yvirtres;
case BITSPIXEL:
return psd->bpp;
case PLANES:
return psd->planes;
case LOGPIXELSX:
case LOGPIXELSY:
return 96;
case SIZEPALETTE:
if (psd->bpp <= 8)
return psd->ncolors;
break;
}
return 0;
}
/winsbar.2
0,0 → 1,940
/*
* Copyright (c) 2000 Greg Haerr <greg@censoft.com>
* Portions Copyright (c) 1999, 2000, Wei Yongming.
* jmt: scrollbar thumb ported
*
* Microwindows win32 NonClient Scrollbars
*/
#define MWINCLUDECOLORS//jmt: for color macros
#include "windows.h"
#include "wintern.h"
#include "wintools.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>//printf
/* scrollbar status/positions*/
#define SBS_UNKNOWN 0x0000
#define SBS_LEFTARROW 0x0001
#define SBS_RIGHTARROW 0x0002
#define SBS_LEFTSPACE 0x0004
#define SBS_RIGHTSPACE 0x0008
#define SBS_HORZTHUMB 0x0010
#define SBS_UPARROW 0x0020
#define SBS_DOWNARROW 0x0040
#define SBS_UPSPACE 0x0080
#define SBS_DOWNSPACE 0x0100
#define SBS_VERTTHUMB 0x0200
#define SBS_MASK 0x03ff
#define SBS_DISABLED 0x4000
#define SBS_HIDE 0x8000
 
#define HSCROLLBARVISIBLE(hwnd) ((hwnd)->style & WS_HSCROLL)
#define VSCROLLBARVISIBLE(hwnd) ((hwnd)->style & WS_VSCROLL)
 
//#
 
/****************************** Drawing Helpers *******************************/
static void
Draw3DUpFrame(HDC hDC, int l, int t, int r, int b)
{
RECT rc;
HBRUSH hbr;
 
SetRect(&rc, l, t, r, b);
Draw3dBox(hDC, rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top,
GetSysColor(COLOR_3DLIGHT),
GetSysColor(COLOR_WINDOWFRAME));
InflateRect(&rc, -1, -1);
Draw3dBox(hDC, rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top,
GetSysColor(COLOR_BTNHIGHLIGHT),
GetSysColor(COLOR_BTNSHADOW));
InflateRect(&rc, -1, -1);
 
hbr = CreateSolidBrush(LTGRAY);
FillRect(hDC, &rc, hbr);
DeleteObject(hbr);
}
 
 
/*
* Adjust client area smaller if scrollbars visible.
* Also, compute the NC hittest regions for the scrollbars.
*/
void
MwAdjustNCScrollbars(HWND hwnd)
{
BOOL vertbar = VSCROLLBARVISIBLE(hwnd);
BOOL horzbar = HSCROLLBARVISIBLE(hwnd);
 
if (vertbar) {
hwnd->clirect.right -= mwSYSMETRICS_CXVSCROLL;
if (horzbar)
hwnd->clirect.bottom -= mwSYSMETRICS_CYHSCROLL;
hwnd->vscroll.rc.left = hwnd->clirect.right;
hwnd->vscroll.rc.right = hwnd->clirect.right +
mwSYSMETRICS_CXVSCROLL;
hwnd->vscroll.rc.top = hwnd->clirect.top;
hwnd->vscroll.rc.bottom = hwnd->clirect.bottom;
} else
SetRectEmpty(&hwnd->vscroll.rc);
if (horzbar) {
if (!vertbar)
hwnd->clirect.bottom -= mwSYSMETRICS_CYHSCROLL;
hwnd->hscroll.rc.top = hwnd->clirect.bottom;
hwnd->hscroll.rc.bottom = hwnd->clirect.bottom +
mwSYSMETRICS_CYHSCROLL;
hwnd->hscroll.rc.left = hwnd->clirect.left;
hwnd->hscroll.rc.right = hwnd->clirect.right;
} else
SetRectEmpty(&hwnd->hscroll.rc);
}
 
static int
wndGetBorder(HWND hwnd)
{
if (hwnd->style & WS_BORDER) {
if ((hwnd->style & WS_CAPTION) == WS_CAPTION)
return mwSYSMETRICS_CXFRAME;
return mwSYSMETRICS_CXBORDER;
}
return 0;
}
 
static BOOL
wndGetVScrollBarRect (HWND hwnd, RECT* rcVBar)
{
if (hwnd->style & WS_VSCROLL) {
rcVBar->left = hwnd->winrect.right - mwSYSMETRICS_CXVSCROLL
- wndGetBorder (hwnd);
rcVBar->right = hwnd->winrect.right - wndGetBorder (hwnd);
rcVBar->top = hwnd->clirect.top;
rcVBar->bottom = hwnd->winrect.bottom - wndGetBorder (hwnd);
 
if (hwnd->style & WS_HSCROLL && !(hwnd->hscroll.status & SBS_HIDE))
rcVBar->bottom -= mwSYSMETRICS_CYHSCROLL;
return TRUE;
}
return FALSE;
}
 
static BOOL
wndGetHScrollBarRect (HWND hwnd, RECT* rcHBar)
{
if (hwnd->style & WS_HSCROLL) {
rcHBar->top = hwnd->winrect.bottom - mwSYSMETRICS_CYHSCROLL
- wndGetBorder (hwnd);
rcHBar->bottom = hwnd->winrect.bottom - wndGetBorder (hwnd);
rcHBar->left = hwnd->clirect.left;
rcHBar->right = hwnd->winrect.right - wndGetBorder (hwnd);
 
if (hwnd->style & WS_VSCROLL && !(hwnd->vscroll.status & SBS_HIDE))
rcHBar->right -= mwSYSMETRICS_CXVSCROLL;
 
return TRUE;
}
return FALSE;
}
 
void
MwPaintNCScrollbars(HWND hwnd, HDC hdc)
{
BOOL vertbar = VSCROLLBARVISIBLE(hwnd);
BOOL horzbar = HSCROLLBARVISIBLE(hwnd);
BOOL fGotDC = FALSE;
RECT rc,rc2;
 
POINT p3[3];
int shrink=2;
 
int start = 0;
RECT rcHBar, rcVBar;
 
 
if (!hdc && (horzbar || vertbar)) {
hdc = GetWindowDC(hwnd);
fGotDC = TRUE;
}
 
if (horzbar && vertbar) {
rc.left = hwnd->clirect.right;
rc.top = hwnd->clirect.bottom;
rc.right = rc.left + mwSYSMETRICS_CXVSCROLL;
rc.bottom = rc.top + mwSYSMETRICS_CYHSCROLL;
FillRect(hdc, &rc, (HBRUSH)(COLOR_BTNFACE+1));
}
if (vertbar) {
rc = hwnd->vscroll.rc;
 
/* bkgnd */
FillRect(hdc, &rc, (HBRUSH)(COLOR_BTNFACE+1));
 
/* up */
Draw3dUpDownState(hdc, rc.left, rc.top,
mwSYSMETRICS_CXVSCROLL, mwSYSMETRICS_CYHSCROLL,
hwnd->vscroll.status & SBS_UPARROW);
/* down */
Draw3dUpDownState(hdc, rc.left,rc.bottom-mwSYSMETRICS_CYHSCROLL,
mwSYSMETRICS_CXVSCROLL, mwSYSMETRICS_CYHSCROLL,
hwnd->vscroll.status & SBS_DOWNARROW);
#if 1//jmt: draw arrows
SelectObject(hdc,GetStockObject(BLACK_BRUSH));
/* up */
p3[0].x= rc.left + (mwSYSMETRICS_CXVSCROLL/2) - 1;
p3[0].y= rc.top + 2 + shrink;
p3[1].x= rc.left + 2 + shrink - 1;
p3[1].y= rc.top + (mwSYSMETRICS_CYHSCROLL-4) - shrink;
p3[2].x= rc.left + (mwSYSMETRICS_CXVSCROLL-4) - shrink;
p3[2].y= rc.top + (mwSYSMETRICS_CYHSCROLL-4) - shrink;
Polygon(hdc,p3,3);
/* down */
p3[0].x= rc.left + (mwSYSMETRICS_CXVSCROLL/2) - 1;
p3[0].y= rc.bottom - 4 - shrink;
p3[1].x= rc.left + 2 + shrink - 1;
p3[1].y= rc.bottom-mwSYSMETRICS_CYHSCROLL + 2 + shrink;
p3[2].x= rc.left + (mwSYSMETRICS_CXVSCROLL-4) - shrink;
p3[2].y= rc.bottom-mwSYSMETRICS_CYHSCROLL + 2 + shrink;
Polygon(hdc,p3,3);
#endif
#if 1
// draw moving bar
 
wndGetVScrollBarRect (hwnd, &rcVBar);
rcVBar.left -- ;
rcVBar.right -- ;
 
start = rcVBar.top + mwSYSMETRICS_CYVSCROLL + hwnd->vscroll.barStart;
if (start + hwnd->vscroll.barLen > rcVBar.bottom)
start = rcVBar.bottom - hwnd->vscroll.barLen;
 
if (hwnd->vscroll.barLen == 0)
hwnd->vscroll.barLen=rc.bottom-rc.top-(mwSYSMETRICS_CYVSCROLL*2);
/* bkgnd */
rc2.left=rc.left; rc2.right=rc.right/*-1*/;
rc2.top=rc.top+mwSYSMETRICS_CYHSCROLL;
rc2.bottom=start;
if (rc2.bottom>rc2.top)
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH));
 
rc2.top=start+hwnd->vscroll.barLen;
rc2.bottom=rc.bottom-mwSYSMETRICS_CYHSCROLL;
if (rc2.bottom>rc2.top)
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH));
 
Draw3DUpFrame (hdc, rcVBar.left, start, rcVBar.right,
start + hwnd->vscroll.barLen);
#if 0
printf("barv:(l,t,r,b):(%d,%d,%d,%d)\n",
rcVBar.left, start, rcVBar.right,
start + hwnd->vscroll.barLen);
#endif
#endif
}
if (horzbar) {
rc = hwnd->hscroll.rc;
 
/* bkgnd */
FillRect(hdc, &rc, (HBRUSH)(COLOR_BTNFACE+1));
 
/* left */
Draw3dUpDownState(hdc, rc.left, rc.top,
mwSYSMETRICS_CXVSCROLL, mwSYSMETRICS_CYHSCROLL,
hwnd->hscroll.status & SBS_LEFTARROW);
/* right */
Draw3dUpDownState(hdc, rc.right-mwSYSMETRICS_CXVSCROLL, rc.top,
mwSYSMETRICS_CXVSCROLL, mwSYSMETRICS_CYHSCROLL,
hwnd->hscroll.status & SBS_RIGHTARROW);
#if 1//jmt: draw arrows
SelectObject(hdc,GetStockObject(BLACK_BRUSH));
/* left */
p3[0].x= rc.left + 2 + shrink;
p3[0].y= rc.top + (mwSYSMETRICS_CYHSCROLL/2) ;
p3[1].x= rc.left + (mwSYSMETRICS_CXVSCROLL-4) - shrink ;
p3[1].y= rc.top + 2 + shrink;
p3[2].x= rc.left + (mwSYSMETRICS_CXVSCROLL-4) - shrink;
p3[2].y= rc.bottom - 4 - shrink + 1;
Polygon(hdc,p3,3);
/* right */
p3[0].x= rc.right - 4 - shrink;
p3[0].y= rc.top + (mwSYSMETRICS_CYHSCROLL/2) ;
p3[1].x= rc.right-mwSYSMETRICS_CXVSCROLL + 2 + shrink ;
p3[1].y= rc.top + 2 + shrink;
p3[2].x= rc.right-mwSYSMETRICS_CXVSCROLL + 2 + shrink;
p3[2].y= rc.bottom - 4 - shrink + 1;
Polygon(hdc,p3,3);
#endif
#if 1
// draw moving bar.
 
wndGetHScrollBarRect (hwnd, &rcHBar);
rcHBar.top -- ;
rcHBar.bottom -- ;
 
start = rcHBar.left + mwSYSMETRICS_CXHSCROLL + hwnd->hscroll.barStart;
 
if (start + hwnd->hscroll.barLen > rcHBar.right)
start = rcHBar.right - hwnd->hscroll.barLen;
 
if (hwnd->hscroll.barLen == 0)
hwnd->hscroll.barLen=rc.right-rc.left-(mwSYSMETRICS_CXHSCROLL*2);
 
/* bkgnd */
rc2.top=rc.top; rc2.bottom=rc.bottom/*-1*/;
rc2.left=rc.left+mwSYSMETRICS_CXVSCROLL;
rc2.right=start;
if (rc2.right>rc2.left)
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH));
 
rc2.left=start+hwnd->hscroll.barLen;
rc2.right=rc.right-mwSYSMETRICS_CXVSCROLL;
if (rc2.right>rc2.left)
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH));
 
Draw3DUpFrame (hdc, start, rcHBar.top, start + hwnd->hscroll.barLen,
rcHBar.bottom);
#if 0
printf("barh:(l,t,r,b):(%d,%d,%d,%d)\n",
start, rcHBar.top, start + hwnd->hscroll.barLen,
rcHBar.bottom);
#endif
#endif
}
 
if (fGotDC)
ReleaseDC(hwnd, hdc);
}
 
/* handle a non-client message for a scrollbar*/
void
MwHandleNCMessageScrollbar(HWND hwnd, WPARAM hitcode, LPARAM lParam, UINT msg/*BOOL fDown*/)
{
int pos = SBS_UNKNOWN;
BOOL vertbar = VSCROLLBARVISIBLE(hwnd);
BOOL horzbar = HSCROLLBARVISIBLE(hwnd);
int * pStat;
POINT pt;
RECT rc;
 
static BOOL bDraw;
 
static int downPos = SBS_UNKNOWN;//
static int sbCode;
int newThumbPos;
 
int itemMoveable,itemCount,itemVisible,moveRange;//jmt:2k0819
int moveTop,moveBottom,moveLeft,moveRight;//jmt:2k0819
 
POINTSTOPOINT(pt, lParam);
for (;;) { /* use for() to allow break statement*/
if (hitcode == HTVSCROLL && vertbar)
{
pStat = &hwnd->vscroll.status;
rc = hwnd->vscroll.rc;
rc.bottom = rc.top + mwSYSMETRICS_CYVSCROLL;
if (PtInRect(&rc, pt))
{
pos = SBS_UPARROW;
break;
}
rc.bottom = hwnd->vscroll.rc.bottom;
rc.top = rc.bottom - mwSYSMETRICS_CYVSCROLL;
if (PtInRect(&rc, pt))
{
pos = SBS_DOWNARROW;
break;
}
pos = SBS_VERTTHUMB;
} else if (hitcode == HTHSCROLL && horzbar)
{
pStat = &hwnd->hscroll.status;
rc = hwnd->hscroll.rc;
rc.right = rc.left + mwSYSMETRICS_CXHSCROLL;
if (PtInRect(&rc, pt)) {
pos = SBS_LEFTARROW;
break;
}
rc.right = hwnd->hscroll.rc.right;
rc.left = rc.right - mwSYSMETRICS_CXHSCROLL;
if (PtInRect(&rc, pt)) {
pos = SBS_RIGHTARROW;
break;
}
pos = SBS_HORZTHUMB;
} else
return;
break;
}
 
if (pos == SBS_UNKNOWN)
return;
 
*pStat &= ~SBS_MASK; /* remove stray mouse states*/
 
if (msg == WM_NCLBUTTONDOWN || msg == WM_NCLBUTTONDBLCLK)//jmt:2k0819
*pStat |= pos;
else *pStat &= ~pos;
 
if (msg == WM_NCLBUTTONDOWN || msg == WM_NCLBUTTONDBLCLK)//jmt:2k0819
bDraw=TRUE;
 
if (bDraw)
MwPaintNCScrollbars(hwnd, NULL);
 
if (pos == SBS_UPARROW || pos == SBS_LEFTARROW)//jmt:2k0820
{
if (hwnd->vscroll.curPos != hwnd->vscroll.minPos)
sbCode = SB_LINEUP;
}
else if (pos == SBS_DOWNARROW || pos == SBS_RIGHTARROW)//jmt:2k0820
{
if (hwnd->vscroll.curPos != hwnd->vscroll.maxPos)
sbCode = SB_LINEDOWN;
}
else if (pos == SBS_VERTTHUMB || pos == SBS_HORZTHUMB)//
{
sbCode = SB_THUMBTRACK;//
}
 
switch(msg)
{
case WM_NCLBUTTONDOWN:
case WM_NCLBUTTONDBLCLK://jmt:2k0819
downPos = pos;
break;
 
case WM_NCMOUSEMOVE://jmt:2k0819
if (hitcode == HTVSCROLL && vertbar)
{
if (sbCode == SB_THUMBTRACK && downPos == SBS_VERTTHUMB)//
{
//jmt(2k0819): new algorithm for SB_THUMBTRACK
 
rc = hwnd->vscroll.rc;
moveTop = rc.top + mwSYSMETRICS_CYVSCROLL;
moveBottom = hwnd->vscroll.rc.bottom - mwSYSMETRICS_CYVSCROLL;
moveRange = moveBottom - moveTop;
 
itemCount = hwnd->vscroll.maxPos - hwnd->vscroll.minPos + 1;
itemVisible = hwnd->vscroll.pageStep;
itemMoveable = itemCount - itemVisible + 1;
 
newThumbPos = ((pt.y - moveTop) * itemMoveable) / moveRange;
printf("((%d-%d)*%d)/%d=%d\n",
pt.y,moveTop,itemMoveable,moveRange,newThumbPos);
//#
 
if ( newThumbPos >= hwnd->vscroll.minPos &&
newThumbPos <= hwnd->vscroll.maxPos)
SendMessage (hwnd,
WM_VSCROLL, SB_THUMBTRACK, newThumbPos);
break;
}
}
 
if (hitcode == HTHSCROLL && horzbar)
{
if (sbCode == SB_THUMBTRACK && downPos == SBS_HORZTHUMB)//
{
//jmt(2k0819): new algorithm for SB_THUMBTRACK
 
rc = hwnd->hscroll.rc;
moveLeft = rc.left + mwSYSMETRICS_CXHSCROLL;
moveRight = hwnd->hscroll.rc.right - mwSYSMETRICS_CXHSCROLL;
moveRange = moveRight - moveLeft;
 
itemCount = hwnd->hscroll.maxPos - hwnd->hscroll.minPos + 1;
itemVisible = hwnd->hscroll.pageStep;
itemMoveable = itemCount - itemVisible + 1;
 
newThumbPos = ((pt.x - moveLeft) * itemMoveable) / moveRange;
printf("((%d-%d)*%d)/%d=%d\n",
pt.y,moveLeft,itemMoveable,moveRange,newThumbPos);
//#
if ( newThumbPos >= hwnd->hscroll.minPos &&
newThumbPos <= hwnd->hscroll.maxPos)
SendMessage (hwnd,
WM_HSCROLL, SB_THUMBTRACK, newThumbPos);
break;
}
}
 
break;
 
case WM_NCLBUTTONUP://jmt:2k0819
bDraw=FALSE;
downPos = SBS_UNKNOWN;//
 
if (sbCode==SB_THUMBTRACK)
{
if (hitcode == HTVSCROLL && vertbar)
{
//jmt(2k0819): new algorithm for SB_THUMBTRACK
 
rc = hwnd->vscroll.rc;
moveTop = rc.top + mwSYSMETRICS_CYVSCROLL;
moveBottom = hwnd->vscroll.rc.bottom - mwSYSMETRICS_CYVSCROLL;
moveRange = moveBottom - moveTop;
 
itemCount = hwnd->vscroll.maxPos - hwnd->vscroll.minPos + 1;
itemVisible = hwnd->vscroll.pageStep;
itemMoveable = itemCount - itemVisible + 1;
 
newThumbPos = ((pt.y - moveTop) * itemMoveable) / moveRange;
printf("((%d-%d)*%d)/%d=%d\n",
pt.y,moveTop,itemMoveable,moveRange,newThumbPos);
//#
if ( newThumbPos >= hwnd->vscroll.minPos &&
newThumbPos <= hwnd->vscroll.maxPos)
SendMessage (hwnd,
WM_VSCROLL, SB_THUMBTRACK, newThumbPos);
break;
}
 
if (hitcode == HTHSCROLL && horzbar)
{
//jmt(2k0819): new algorithm for SB_THUMBTRACK
 
rc = hwnd->hscroll.rc;
moveLeft = rc.left + mwSYSMETRICS_CXHSCROLL;
moveRight = hwnd->hscroll.rc.right - mwSYSMETRICS_CXHSCROLL;
moveRange = moveRight - moveLeft;
 
itemCount = hwnd->hscroll.maxPos - hwnd->hscroll.minPos + 1;
itemVisible = hwnd->hscroll.pageStep;
itemMoveable = itemCount - itemVisible + 1;
 
newThumbPos = ((pt.x - moveLeft) * itemMoveable) / moveRange;
printf("((%d-%d)*%d)/%d=%d\n",
pt.y,moveLeft,itemMoveable,moveRange,newThumbPos);
//#
if ( newThumbPos >= hwnd->hscroll.minPos &&
newThumbPos <= hwnd->hscroll.maxPos)
SendMessage (hwnd,
WM_HSCROLL, SB_THUMBTRACK, newThumbPos);
break;
}
}
else//jmt:2k0820
{
if (hitcode == HTVSCROLL && vertbar)
SendMessage (hwnd, WM_VSCROLL, sbCode, 0);
 
if (hitcode == HTHSCROLL && horzbar)
SendMessage (hwnd, WM_HSCROLL, sbCode, 0);
}
break;
}
 
}
 
 
static BOOL
PtInRect2(const RECT *lprc, int x, int y)
{
POINT p;
 
p.x = x;
p.y = y;
return PtInRect(lprc, p);
}
 
#if 1//0000
 
 
static void
wndScrollBarPos (HWND hwnd, BOOL bIsHBar, RECT* rcBar)
{
UINT moveRange;
PMWSCROLLBARINFO pSBar;
 
if (bIsHBar)
pSBar = &hwnd->hscroll;
else
pSBar = &hwnd->vscroll;
 
if (pSBar->minPos == pSBar->maxPos) {
pSBar->status |= SBS_HIDE;
return;
}
 
if (bIsHBar)
moveRange = (rcBar->right - rcBar->left) - (mwSYSMETRICS_CXHSCROLL<<1);
else
moveRange = (rcBar->bottom - rcBar->top) - (mwSYSMETRICS_CYVSCROLL<<1);
 
#define MWM_DEFBARLEN 18//
#define MWM_MINBARLEN 8//
 
if (pSBar->pageStep == 0)
{
pSBar->barLen = MWM_DEFBARLEN;
 
if (pSBar->barLen > moveRange)
pSBar->barLen = MWM_MINBARLEN;
}
else
{
pSBar->barLen = moveRange * pSBar->pageStep /
(pSBar->maxPos - pSBar->minPos + 1);
if (pSBar->barLen < MWM_MINBARLEN)
pSBar->barLen = MWM_MINBARLEN;
}
 
pSBar->barStart = moveRange * (pSBar->curPos - pSBar->minPos) /
(pSBar->maxPos - pSBar->minPos + 1);
 
 
if (pSBar->barStart + pSBar->barLen > moveRange)
pSBar->barStart = moveRange - pSBar->barLen;
 
 
if (pSBar->barStart < 0)
pSBar->barStart = 0;
}
 
static PMWSCROLLBARINFO wndGetScrollBar (HWND pWin, int iSBar)
{
if (iSBar == SB_HORZ) {
if (pWin->style & WS_HSCROLL)
return &pWin->hscroll;
}
else if (iSBar == SB_VERT) {
if (pWin->style & WS_VSCROLL)
return &pWin->vscroll;
}
 
return NULL;
}
 
BOOL EnableScrollBar (HWND hWnd, int iSBar, BOOL bEnable)
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
BOOL bPrevState;
RECT rcBar;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )//ok
return FALSE;
 
bPrevState = !(pSBar->status & SBS_DISABLED);
 
if (bEnable && !bPrevState)
pSBar->status &= ~SBS_DISABLED;
else if (!bEnable && bPrevState)
pSBar->status |= SBS_DISABLED;
else
return FALSE;
 
if (iSBar == SB_VERT)
{
wndGetVScrollBarRect (pWin, &rcBar);
rcBar.left --;
rcBar.right --;
}
else
{
wndGetHScrollBarRect (pWin, &rcBar);
rcBar.top --;
rcBar.bottom --;
}
#if 0
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar));
#else
MwPaintNCScrollbars(hWnd,NULL);//a must
#endif
 
return TRUE;
}
 
BOOL GetScrollPos (HWND hWnd, int iSBar, int* pPos)
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )
return FALSE;
 
*pPos = pSBar->curPos;
return TRUE;
}
 
BOOL GetScrollRange (HWND hWnd, int iSBar, int* pMinPos, int* pMaxPos)
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )
return FALSE;
 
*pMinPos = pSBar->minPos;
*pMaxPos = pSBar->maxPos;
return TRUE;
}
 
BOOL SetScrollPos (HWND hWnd, int iSBar, int iNewPos)//ok
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
RECT rcBar;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )
return FALSE;
 
if (iNewPos < pSBar->minPos)
pSBar->curPos = pSBar->minPos;
else
pSBar->curPos = iNewPos;
 
{
int max = pSBar->maxPos;
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0;
 
if (pSBar->curPos > max)
pSBar->curPos = max;
}
if (iSBar == SB_VERT)
{
wndGetVScrollBarRect (pWin, &rcBar);
rcBar.left --;
rcBar.right --;
}
else
{
wndGetHScrollBarRect (pWin, &rcBar);
rcBar.top --;
rcBar.bottom --;
}
 
wndScrollBarPos (pWin, iSBar == SB_HORZ, &rcBar);
 
#if 0
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar));
#else
MwPaintNCScrollbars(hWnd,NULL);//a must
#endif
return TRUE;
}
 
BOOL SetScrollRange (HWND hWnd, int iSBar, int iMinPos, int iMaxPos)
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
RECT rcBar;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )
return FALSE;
 
pSBar->minPos = (iMinPos < iMaxPos)?iMinPos:iMaxPos;
pSBar->maxPos = (iMinPos > iMaxPos)?iMinPos:iMaxPos;
// validate parameters.
if (pSBar->curPos < pSBar->minPos)
pSBar->curPos = pSBar->minPos;
 
if (pSBar->pageStep <= 0)
pSBar->pageStep = 0;
else if (pSBar->pageStep > (pSBar->maxPos - pSBar->minPos + 1))
pSBar->pageStep = pSBar->maxPos - pSBar->minPos + 1;
{
int max = pSBar->maxPos;
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0;
 
if (pSBar->curPos > max)
pSBar->curPos = max;
}
 
if (iSBar == SB_VERT)
{
wndGetVScrollBarRect (pWin, &rcBar);
rcBar.left --;
rcBar.right --;
}
else
{
wndGetHScrollBarRect (pWin, &rcBar);
rcBar.top --;
rcBar.bottom --;
}
wndScrollBarPos (pWin, iSBar == SB_HORZ, &rcBar);
 
#if 0
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar));
#else
MwPaintNCScrollbars(hWnd,NULL);//a must
#endif
 
return TRUE;
}
 
BOOL SetScrollInfo (HWND hWnd, int iSBar,
LPCSCROLLINFO lpsi, BOOL fRedraw)//ok
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
RECT rcBar;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )
return FALSE;
if( lpsi->fMask & SIF_RANGE )
{
pSBar->minPos = (lpsi->nMin < lpsi->nMax)?lpsi->nMin:lpsi->nMax;
pSBar->maxPos = (lpsi->nMin < lpsi->nMax)?lpsi->nMax:lpsi->nMin;
}
if( lpsi->fMask & SIF_POS )
pSBar->curPos = lpsi->nPos;
if( lpsi->fMask & SIF_PAGE )
pSBar->pageStep = lpsi->nPage;
 
// validate parameters.
if (pSBar->curPos < pSBar->minPos)
pSBar->curPos = pSBar->minPos;
 
if (pSBar->pageStep <= 0)
pSBar->pageStep = 0;
else if (pSBar->pageStep > (pSBar->maxPos - pSBar->minPos + 1))
pSBar->pageStep = pSBar->maxPos - pSBar->minPos + 1;
{
int max = pSBar->maxPos;
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0;
 
if (pSBar->curPos > max)
pSBar->curPos = max;
}
 
if(fRedraw)
{
if (iSBar == SB_VERT)
{
wndGetVScrollBarRect (pWin, &rcBar);
rcBar.left --;
rcBar.right --;
}
else
{
wndGetHScrollBarRect (pWin, &rcBar);
rcBar.top --;
rcBar.bottom --;
}
wndScrollBarPos (pWin, iSBar == SB_HORZ, &rcBar);
 
#if 0
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar));
#else
MwPaintNCScrollbars(hWnd,NULL);//a must
#endif
}
return TRUE;
}
 
BOOL GetScrollInfo(HWND hWnd, int iSBar, LPSCROLLINFO lpsi)
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )
return FALSE;
if( lpsi->fMask & SIF_RANGE )
{
lpsi->nMin = pSBar->minPos;
lpsi->nMax = pSBar->maxPos;
}
if( lpsi->fMask & SIF_POS )
{
lpsi->nPos = pSBar->curPos;
}
if( lpsi->fMask & SIF_PAGE )
lpsi->nPage = pSBar->pageStep;
return TRUE;
}
 
BOOL ShowScrollBar (HWND hWnd, int iSBar, BOOL bShow)
{
PMWSCROLLBARINFO pSBar;
HWND pWin;
BOOL bPrevState;
RECT rcBar;
pWin = (HWND)hWnd;
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )
return FALSE;
 
bPrevState = !(pSBar->status & SBS_HIDE);
 
if (bShow && !bPrevState)
pSBar->status &= ~SBS_HIDE;
else if (!bShow && bPrevState)
pSBar->status |= SBS_HIDE;
else
return FALSE;
#if 0//fix: no WM_CHANGESIZE
SendMessage (hWnd, WM_CHANGESIZE, 0, 0);
#endif
if (iSBar == SB_VERT)
wndGetVScrollBarRect (pWin, &rcBar);
else
wndGetHScrollBarRect (pWin, &rcBar);
 
{
RECT rcWin, rcClient;
memcpy (&rcWin, &pWin->winrect.left, sizeof (RECT));
rcClient.left = 0;
rcClient.top = 0;
rcClient.right = pWin->clirect.right - pWin->clirect.left;
rcClient.bottom = pWin->clirect.bottom - pWin->clirect.top;
#if 0//fix: no WM_SIZECHANGED
SendMessage/*SendAsyncMessage*/ (hWnd, WM_SIZECHANGED,
(WPARAM)&rcWin, (LPARAM)&rcClient);
#endif
}
if (bShow) {
SendMessage (hWnd, WM_NCPAINT, 0, 0);
}
else {
rcBar.left -= pWin->clirect.left;
rcBar.top -= pWin->clirect.top;
rcBar.right -= pWin->clirect.left;
rcBar.bottom -= pWin->clirect.top;
SendMessage (hWnd, WM_NCPAINT, 0, 0);
InvalidateRect (hWnd, &rcBar, TRUE);
}
 
return TRUE;
}
#endif
/winfont.c
0,0 → 1,250
/*
* Copyright (c) 2000 Greg Haerr <greg@censoft.com>
* GetTextExtent*Point by Roman Guseynov
* Original contributions by Shane Nay
*
* Win32 API upper level font selection routines
*/
#include "windows.h"
#include "wintern.h"
#include "device.h"
#include <stdlib.h>
#include <string.h>
 
HFONT WINAPI
CreateFont(int nHeight, int nWidth, int nEscapement, int nOrientation,
int fnWeight, DWORD fdwItalic, DWORD fdwUnderline, DWORD fdwStrikeOut,
DWORD fdwCharSet,DWORD fdwOutputPrecision,DWORD fdwClipPrecision,
DWORD fdwQuality, DWORD fdwPitchAndFamily, LPCSTR lpszFace)
{
LOGFONT lf;
 
lf.lfHeight = nHeight;
lf.lfWidth = nWidth;
lf.lfEscapement = nEscapement;
lf.lfOrientation = nOrientation;
lf.lfWeight = fnWeight;
lf.lfItalic = fdwItalic;
lf.lfUnderline = fdwUnderline;
lf.lfStrikeOut = fdwStrikeOut;
lf.lfCharSet = fdwCharSet;
lf.lfOutPrecision = fdwOutputPrecision;
lf.lfClipPrecision = fdwClipPrecision;
lf.lfQuality = fdwQuality;
lf.lfPitchAndFamily = fdwPitchAndFamily;
strncpy(lf.lfFaceName, lpszFace, sizeof(lf.lfFaceName));
 
return CreateFontIndirect(&lf);
}
 
HFONT WINAPI
CreateFontIndirect(CONST LOGFONT *lplf)
{
MWFONTOBJ * hfont;
int family, pitch;
MWLOGFONT mwlf;
char szFacename[32];
 
/* create a gdi font object*/
hfont = GdItemNew(MWFONTOBJ);
if(!hfont)
return NULL;
hfont->hdr.type = OBJ_FONT;
hfont->hdr.stockobj = FALSE;
 
/* convert LOGFONT to MWLOGFONT*/
memset(&mwlf, 0, sizeof(mwlf));
mwlf.lfHeight = lplf->lfHeight;
mwlf.lfWidth = lplf->lfWidth;
mwlf.lfEscapement = lplf->lfEscapement;
mwlf.lfOrientation = lplf->lfOrientation;
mwlf.lfWeight = lplf->lfWeight;
mwlf.lfItalic = lplf->lfItalic;
mwlf.lfUnderline = lplf->lfUnderline;
mwlf.lfStrikeOut = lplf->lfStrikeOut;
mwlf.lfCharSet = lplf->lfCharSet;
mwlf.lfOutPrecision = lplf->lfOutPrecision;
mwlf.lfClipPrecision = lplf->lfClipPrecision;
mwlf.lfQuality = lplf->lfQuality;
strncpy(mwlf.lfFaceName, lplf->lfFaceName, sizeof(mwlf.lfFaceName));
 
family = lplf->lfPitchAndFamily & 0xf0;
switch(family) {
case FF_DONTCARE:
break;
case FF_ROMAN:
mwlf.lfRoman = 1;
mwlf.lfSerif = 1;
break;
case FF_SWISS:
mwlf.lfSansSerif = 1;
break;
case FF_MODERN:
mwlf.lfModern = 1;
break;
}
 
pitch = lplf->lfPitchAndFamily & 0x0f;
switch(pitch) {
case DEFAULT_PITCH:
break;
case FIXED_PITCH:
case MONO_FONT:
mwlf.lfMonospace = 1;
break;
case VARIABLE_PITCH:
mwlf.lfProportional = 1;
break;
}
/*mwlf.lfOblique = 0;*/
/*mwlf.lfSmallCaps = 0;*/
/*mwlf.lfPitch = 0;*/
 
/* select a font based on facename, bold/italic and height*/
strncpy(szFacename, lplf->lfFaceName, sizeof(szFacename));
if (lplf->lfWeight==FW_BOLD)
strcat(szFacename, "B");
if (lplf->lfItalic)
strcat(szFacename, "I");
hfont->pfont = GdCreateFont(&scrdev, szFacename, lplf->lfHeight, &mwlf);
 
return (HFONT)hfont;
}
 
BOOL WINAPI
GetTextMetrics(HDC hdc, LPTEXTMETRIC lptm)
{
MWFONTINFO fi;
 
if(!hdc)
return FALSE;
 
GdGetFontInfo(hdc->font->pfont, &fi);
 
/* FIXME many items are guessed for the time being*/
lptm->tmHeight = fi.height;
 
/* reversed for kaffe port
lptm->tmAscent = fi.height - fi.baseline;
lptm->tmDescent= fi.baseline;
*/
 
lptm->tmDescent = fi.height - fi.baseline;
lptm->tmAscent= fi.baseline;
lptm->tmInternalLeading = 0;
lptm->tmExternalLeading = 0;
lptm->tmAveCharWidth = fi.widths['x'];
lptm->tmMaxCharWidth = fi.maxwidth;
lptm->tmWeight = FW_NORMAL;
lptm->tmOverhang = 0;
lptm->tmDigitizedAspectX = fi.maxwidth;
lptm->tmDigitizedAspectY = fi.height;
lptm->tmFirstChar = 32;
lptm->tmLastChar = 255;
lptm->tmDefaultChar = '?';
lptm->tmBreakChar = 0;
lptm->tmItalic = 0;
lptm->tmUnderlined = 0;
lptm->tmStruckOut = 0;
/* note that win32 has the TMPF_FIXED_PITCH flags REVERSED...*/
lptm->tmPitchAndFamily = fi.fixed?
FF_DONTCARE: (FF_DONTCARE | TMPF_FIXED_PITCH);
lptm->tmCharSet = OEM_CHARSET;
return TRUE;
}
 
BOOL WINAPI
GetCharWidth(HDC hdc, UINT iFirstChar, UINT iLastChar, LPINT lpBuffer)
{
int i;
int j = 0;
MWFONTINFO fi;
 
if(!hdc || iLastChar < iFirstChar)
return FALSE;
 
GdGetFontInfo(hdc->font->pfont, &fi);
for(i=iFirstChar; i <= iLastChar; ++i)
if(i < fi.firstchar || i > fi.lastchar || i > 255)
lpBuffer[j++] = 0;
else lpBuffer[j++] = fi.widths[i];
lpBuffer[j++] = fi.widths[i];
 
return TRUE;
}
 
BOOL WINAPI
GetTextExtentPoint(
HDC hdc, /* handle to DC*/
LPCTSTR lpszStr, /* character string*/
int cchString, /* number of characters*/
LPSIZE lpSize) /* string dimensions*/
{
int width = 1, height = 1, baseline = 0;
 
if (lpSize) {
lpSize->cx = 0;
lpSize->cy = 0;
}
if (!hdc || !lpszStr || !cchString || !lpSize)
return FALSE;
GdGetTextSize(hdc->font->pfont, lpszStr, cchString, &width, &height,
&baseline, MWTF_UTF8);
lpSize->cx = width;
lpSize->cy = height;
 
/*printf("<MWIN>: lpszStr=\"%s\", cchString=%d, lpsize->cx=%d, lpSize->cy=%d\n", lpszStr, cchString, lpSize->cx, lpSize->cy);*/
return TRUE;
}
 
BOOL WINAPI
GetTextExtentExPoint(HDC hdc, /* handle to DC*/
LPCTSTR lpszStr, /* character string*/
int cchString, /* number of characters*/
int nMaxExtent, /* maximum width of formatted string*/
LPINT lpnFit, /* maximum number of characters*/
LPINT alpDx, /* array of partial string widths*/
LPSIZE lpSize) /* string dimensions*/
 
{
int attr,width=0,height=0;
 
if(!hdc || !lpszStr)
return FALSE;
if (cchString<0)
cchString = strlen((char *)lpszStr);
attr=hdc->font->pfont->fontattr;
if (attr&FS_FREETYPE)
{
if (GdGetTextSizeEx(hdc->font->pfont,lpszStr,cchString,
nMaxExtent,lpnFit,alpDx,&width,&height,NULL,MWTF_UTF8))
{
lpSize->cx=width;
lpSize->cy=height;
return TRUE;
}
return FALSE;
}
else
{
SIZE sz;
int i;
 
if (!GetTextExtentPoint(hdc, lpszStr, cchString, lpSize))
return FALSE;
if ((!nMaxExtent)||(!lpnFit)||(!alpDx))
return TRUE;
for (i=0; i<cchString; i++) {
if (!GetTextExtentPoint(hdc, lpszStr, i+1, &sz))
return FALSE;
if (sz.cx <= nMaxExtent)
alpDx[i] = sz.cx;
else {
(*lpnFit) = i;
return TRUE;
}
}
(*lpnFit) = cchString;
return TRUE;
}
}
/winclip1.c
0,0 → 1,398
/*
* Copyright (c) 1999 Greg Haerr <greg@censoft.com>
* Copyright (c) 1991 David I. Bell
* Permission is granted to use, distribute, or modify this source,
* provided that this copyright notice remains intact.
*/
#include "windows.h"
#include "wintern.h"
 
/*
* Macro to distinguish cases of clipping.
*/
#define GAPVAL(leftgap, rightgap, topgap, bottomgap) \
(((leftgap) << 3) + ((rightgap) << 2) + ((topgap) << 1) + (bottomgap))
 
static BOOL MwExcludeClipRect(int minx,int miny,int maxx,int maxy,int *count,
MWCLIPRECT *cliprects);
static int MwSplitClipRect(MWCLIPRECT *srcrect, MWCLIPRECT *destrect,
MWCOORD minx, MWCOORD miny, MWCOORD maxx, MWCOORD maxy);
 
/*
* Set the clip rectangles for a window taking into account other
* windows that may be obscuring it. The windows that may be obscuring
* this one are the siblings of each direct ancestor which are higher
* in priority than those ancestors. Also, each parent limits the visible
* area of the window.
*/
void
MwSetClipWindow(HDC hdc)
{
HWND wp = hdc->hwnd;
HWND pwp; /* parent window */
HWND sibwp; /* sibling windows */
MWCLIPRECT *clip; /* first clip rectangle */
int count; /* number of clip rectangles */
MWCOORD diff; /* difference in coordinates */
BOOL toomany; /* TRUE if too many clip rects */
PRECT prc; /* client or window rectangle*/
MWCLIPRECT cliprects[MAX_CLIPRECTS]; /* clip rectangles */
 
if (wp->unmapcount)
return;
 
/*
* Start with the rectangle for the complete window.
* We will then cut pieces out of it as needed.
*/
prc = MwIsClientDC(hdc)? &wp->clirect: &wp->winrect;
count = 1;
clip = cliprects;
clip->x = prc->left;
clip->y = prc->top;
clip->width = prc->right - prc->left;
clip->height = prc->bottom - prc->top;
 
/*
* First walk upwards through all parent windows,
* and restrict the visible part of this window to the part
* that shows through all of those parent windows client areas.
*/
pwp = wp;
while (pwp != rootwp) {
pwp = pwp->parent;
 
diff = pwp->clirect.left - clip->x;
if (diff > 0) {
clip->width -= diff;
clip->x = pwp->clirect.left;
}
 
diff = pwp->clirect.right - (clip->x + clip->width);
if (diff < 0)
clip->width += diff;
 
diff = pwp->clirect.top - clip->y;
if (diff > 0) {
clip->height -= diff;
clip->y = pwp->clirect.top;
}
 
diff = pwp->clirect.bottom - (clip->y + clip->height);
if (diff < 0)
clip->height += diff;
}
 
/*
* If the window is completely clipped out of view, then
* set the clipping region to indicate that.
*/
if (clip->width <= 0 || clip->height <= 0) {
GdSetClipRects(hdc->psd, 1, cliprects);
return;
}
 
/*
* Now examine all windows that obscure this window, and
* for each obscuration, break up the clip rectangles into
* the smaller pieces that are still visible. The windows
* that can obscure us are the earlier siblings of all of
* our parents. When clipping the root window, search all children.
*/
toomany = FALSE;
pwp = wp;
while (pwp != NULL) {
wp = pwp;
pwp = wp->parent;
if(!pwp) {
/* We're clipping the root window*/
if(hdc->flags & DCX_CLIPCHILDREN)
/* start with root's children*/
sibwp = rootwp->children;
else sibwp = NULL; /* no search*/
wp = NULL; /* search all root's children*/
} else {
if(hdc->flags & DCX_CLIPSIBLINGS)
sibwp = pwp->children;
else sibwp = wp; /* no search*/
}
for (; sibwp != wp; sibwp = sibwp->siblings) {
if (sibwp->unmapcount)
continue;
 
toomany |= MwExcludeClipRect(sibwp->winrect.left,
sibwp->winrect.top, sibwp->winrect.right-1,
sibwp->winrect.bottom-1, &count, cliprects);
 
}
 
/* if not clipping the root window, stop when you reach it*/
if(pwp == rootwp)
break;
}
 
/*
* If not the root window and we're going to be drawing
* in the client area, clip all children. This is
* required for non-special paint handling for child windows.
* Non-client dc's don't clip children in order to get
* proper border clipping in the case of border-clipped children.
*/
wp = hdc->hwnd;
if(wp != rootwp && MwIsClientDC(hdc)) {
for (sibwp=wp->children; sibwp; sibwp = sibwp->siblings) {
if (sibwp->unmapcount)
continue;
 
toomany |= MwExcludeClipRect(sibwp->winrect.left,
sibwp->winrect.top, sibwp->winrect.right-1,
sibwp->winrect.bottom-1, &count, cliprects);
}
}
 
if (toomany) {
/*GsError(GR_ERROR_TOO_MUCH_CLIPPING, wp->id);*/
clip->x = 0;
clip->y = 0;
clip->width = -1;
clip->height = -1;
count = 1;
}
 
/*
* Set the clip rectangles.
*/
GdSetClipRects(hdc->psd, count, cliprects);
}
 
static BOOL
MwExcludeClipRect(int minx,int miny,int maxx,int maxy,int *count,
MWCLIPRECT *cliprects)
{
int i; /* current index */
int newcount; /* number of new rectangles */
BOOL toomany = FALSE;/* TRUE if too many clip rects */
 
newcount = *count;
for (i = 0; i < *count; i++) {
if (newcount > MAX_CLIPRECTS - 3) {
toomany = TRUE;
break;
}
newcount += MwSplitClipRect(&cliprects[i],
&cliprects[newcount],
minx, miny, maxx, maxy);
}
*count = newcount;
return toomany;
}
 
/*
* Check the specified clip rectangle against the specified rectangular
* region, and reduce it or split it up into multiple clip rectangles
* such that the specified region is not contained in any of the clip
* rectangles. The source clip rectangle can be modified in place, and
* in addition more clip rectangles can be generated, which are placed in
* the indicated destination location. The maximum number of new clip
* rectangles needed is 3. Returns the number of clip rectangles added.
* If the source clip rectangle is totally obliterated, it is set to an
* impossible region and 0 is returned. When splits are done, we prefer
* to create wide regions instead of high regions.
*/
static int
MwSplitClipRect(MWCLIPRECT *srcrect, MWCLIPRECT *destrect, MWCOORD minx,
MWCOORD miny, MWCOORD maxx, MWCOORD maxy)
{
MWCOORD x;
MWCOORD y;
MWCOORD width;
MWCOORD height;
MWCOORD dx;
MWCOORD dy;
int gaps;
 
/*
* First see if there is any overlap at all.
* If not, then nothing to do.
*/
x = srcrect->x;
y = srcrect->y;
width = srcrect->width;
height = srcrect->height;
 
if ((minx > maxx) || (miny > maxy) || (maxx < x) || (maxy < y) ||
(x + width <= minx) || (y + height <= miny))
return 0;
 
/*
* There is an overlap. Calculate a value to differentiate
* various cases, and then handle each case separately. The
* cases are classified on whether there are gaps on the left,
* right, top, and bottom sides of the clip rectangle.
*/
gaps = 0;
if (x < minx)
gaps |= GAPVAL(1, 0, 0, 0);
if (x + width - 1 > maxx)
gaps |= GAPVAL(0, 1, 0, 0);
if (y < miny)
gaps |= GAPVAL(0, 0, 1, 0);
if (y + height - 1 > maxy)
gaps |= GAPVAL(0, 0, 0, 1);
 
switch (gaps) {
case GAPVAL(0, 0, 0, 0): /* no gaps at all */
srcrect->x = 0;
srcrect->y = 0;
srcrect->width = 0;
srcrect->height = 0;
return 0;
 
case GAPVAL(0, 0, 0, 1): /* gap on bottom */
dy = maxy - y + 1;
srcrect->y += dy;
srcrect->height -= dy;
return 0;
 
case GAPVAL(0, 0, 1, 0): /* gap on top */
srcrect->height = miny - y;
return 0;
 
case GAPVAL(0, 0, 1, 1): /* gap on top, bottom */
srcrect->height = miny - y;
destrect->x = x;
destrect->width = width;
destrect->y = maxy + 1;
destrect->height = y + height - maxy - 1;
return 1;
 
case GAPVAL(0, 1, 0, 0): /* gap on right */
dx = maxx - x + 1;
srcrect->x += dx;
srcrect->width -= dx;
return 0;
 
case GAPVAL(0, 1, 0, 1): /* gap on right, bottom */
dx = maxx - x + 1;
srcrect->x += dx;
srcrect->width -= dx;
srcrect->height = maxy - y + 1;
destrect->x = x;
destrect->width = width;
destrect->y = maxy + 1;
destrect->height = y + height - maxy - 1;
return 1;
 
case GAPVAL(0, 1, 1, 0): /* gap on right, top */
dx = maxx - x + 1;
srcrect->height = miny - y;
destrect->x = x + dx;
destrect->width = width - dx;
destrect->y = miny;
destrect->height = y + height - miny;
return 1;
 
case GAPVAL(0, 1, 1, 1): /* gap on right, top, bottom */
dx = maxx - x + 1;
srcrect->height = miny - y;
destrect->x = x;
destrect->width = width;
destrect->y = maxy + 1;
destrect->height = y + height - maxy - 1;
destrect++;
destrect->x = x + dx;
destrect->width = width - dx;
destrect->y = miny;
destrect->height = maxy - miny + 1;
return 2;
 
case GAPVAL(1, 0, 0, 0): /* gap on left */
srcrect->width = minx - x;
return 0;
 
case GAPVAL(1, 0, 0, 1): /* gap on left, bottom */
srcrect->width = minx - x;
srcrect->height = maxy - y + 1;
destrect->x = x;
destrect->width = width;
destrect->y = maxy + 1;
destrect->height = y + height - maxy - 1;
return 1;
 
case GAPVAL(1, 0, 1, 0): /* gap on left, top */
srcrect->height = miny - y;
destrect->x = x;
destrect->width = minx - x;
destrect->y = miny;
destrect->height = y + height - miny;
return 1;
 
case GAPVAL(1, 0, 1, 1): /* gap on left, top, bottom */
srcrect->height = miny - y;
destrect->x = x;
destrect->width = minx - x;
destrect->y = miny;
destrect->height = maxy - miny + 1;
destrect++;
destrect->x = x;
destrect->width = width;
destrect->y = maxy + 1;
destrect->height = y + height - maxy - 1;
return 2;
 
case GAPVAL(1, 1, 0, 0): /* gap on left, right */
destrect->x = maxx + 1;
destrect->width = x + width - maxx - 1;
destrect->y = y;
destrect->height = height;
srcrect->width = minx - x;
return 1;
 
case GAPVAL(1, 1, 0, 1): /* gap on left, right, bottom */
dy = maxy - y + 1;
srcrect->y += dy;
srcrect->height -= dy;
destrect->x = x;
destrect->width = minx - x;
destrect->y = y;
destrect->height = dy;
destrect++;
destrect->x = maxx + 1;
destrect->width = x + width - maxx - 1;
destrect->y = y;
destrect->height = dy;
return 2;
 
case GAPVAL(1, 1, 1, 0): /* gap on left, right, top */
srcrect->height = miny - y;
destrect->x = x;
destrect->width = minx - x;
destrect->y = miny;
destrect->height = y + height - miny;
destrect++;
destrect->x = maxx + 1;
destrect->width = x + width - maxx - 1;
destrect->y = miny;
destrect->height = y + height - miny;
return 2;
 
case GAPVAL(1, 1, 1, 1): /* gap on all sides */
srcrect->height = miny - y;
destrect->x = x;
destrect->width = minx - x;
destrect->y = miny;
destrect->height = maxy - miny + 1;
destrect++;
destrect->x = maxx + 1;
destrect->width = x + width - maxx - 1;
destrect->y = miny;
destrect->height = maxy - miny + 1;
destrect++;
destrect->x = x;
destrect->width = width;
destrect->y = maxy + 1;
destrect->height = y + height - maxy - 1;
return 3;
}
return 0; /* NOTREACHED */
}
/winclip2.c
0,0 → 1,164
/*
* Copyright (c) 2000 Greg Haerr <greg@censoft.com>
* Portions Copyright (c) 1991 David I. Bell
* Permission is granted to use, distribute, or modify this source,
* provided that this copyright notice remains intact.
*
* DYNAMICREGIONS MwSetClipWindow
*/
#include "windows.h"
#include "wintern.h"
 
/*
* Set the clip rectangles for a window taking into account other
* windows that may be obscuring it. The windows that may be obscuring
* this one are the siblings of each direct ancestor which are higher
* in priority than those ancestors. Also, each parent limits the visible
* area of the window.
*/
void
MwSetClipWindow(HDC hdc)
{
HWND wp = hdc->hwnd;
HWND pwp; /* parent window */
HWND sibwp; /* sibling windows */
MWCOORD diff; /* difference in coordinates */
PRECT prc; /* client or window rectangle*/
MWCLIPREGION *vis, *r;
MWCOORD x, y, width, height;
 
/*
* Start with the rectangle for the complete window.
* We will then cut pieces out of it as needed.
*/
prc = MwIsClientDC(hdc)? &wp->clirect: &wp->winrect;
x = prc->left;
y = prc->top;
width = prc->right - prc->left;
height = prc->bottom - prc->top;
 
/*
* First walk upwards through all parent windows,
* and restrict the visible part of this window to the part
* that shows through all of those parent windows client areas.
*/
pwp = wp;
while (pwp != rootwp) {
pwp = pwp->parent;
 
diff = pwp->clirect.left - x;
if (diff > 0) {
width -= diff;
x = pwp->clirect.left;
}
 
diff = pwp->clirect.right - (x + width);
if (diff < 0)
width += diff;
 
diff = pwp->clirect.top - y;
if (diff > 0) {
height -= diff;
y = pwp->clirect.top;
}
 
diff = pwp->clirect.bottom - (y + height);
if (diff < 0)
height += diff;
}
 
/*
* If the window is completely clipped out of view, then
* set the clipping region to indicate that.
*/
if (width <= 0 || height <= 0) {
GdSetClipRegion(hdc->psd, NULL);
return;
}
 
/*
* Allocate initial vis region to parent-clipped size of window
*/
vis = GdAllocRectRegion(x, y, x+width, y+height);
 
/*
* Allocate temp region
*/
r = GdAllocRegion();
 
/*
* Now examine all windows that obscure this window, and
* for each obscuration, break up the clip rectangles into
* the smaller pieces that are still visible. The windows
* that can obscure us are the earlier siblings of all of
* our parents. When clipping the root window, search all children.
*/
pwp = wp;
while (pwp != NULL) {
wp = pwp;
pwp = wp->parent;
if(!pwp) {
/* We're clipping the root window*/
if(hdc->flags & DCX_CLIPCHILDREN)
/* start with root's children*/
sibwp = rootwp->children;
else sibwp = NULL; /* no search*/
wp = NULL; /* search all root's children*/
} else {
if(hdc->flags & DCX_CLIPSIBLINGS)
sibwp = pwp->children;
else sibwp = wp; /* no search*/
}
for (; sibwp != wp; sibwp = sibwp->siblings) {
if (sibwp->unmapcount)
continue;
 
GdSetRectRegionIndirect(r, &sibwp->winrect);
GdSubtractRegion(vis, vis, r);
}
 
/* if not clipping the root window, stop when you reach it*/
if(pwp == rootwp)
break;
}
 
/*
* If not the root window and we're going to be drawing
* in the client area, clip all children. This is
* required for non-special paint handling for child windows.
* Non-client dc's don't clip children in order to get
* proper border clipping in the case of border-clipped children.
*/
wp = hdc->hwnd;
if(wp != rootwp && MwIsClientDC(hdc)) {
for (sibwp=wp->children; sibwp; sibwp = sibwp->siblings) {
if (sibwp->unmapcount)
continue;
 
GdSetRectRegionIndirect(r, &sibwp->winrect);
GdSubtractRegion(vis, vis, r);
}
}
 
#if UPDATEREGIONS
/*
* Intersect with update region, unless requested not to.
*/
if(!(hdc->flags & DCX_EXCLUDEUPDATE))
GdIntersectRegion(vis, vis, wp->update);
#endif
/*
* Intersect with user region, if set.
*/
if (hdc->region)
GdIntersectRegion(vis, vis, hdc->region->rgn);
/*
* Set the clip region (later destroy handled by GdSetClipRegion)
*/
GdSetClipRegion(hdc->psd, vis);
 
/*
* Destroy temp region
*/
GdDestroyRegion(r);
}
/Makefile
0,0 → 1,55
##############################################################################
# Microwindows template Makefile
# Copyright (c) 2000, 2002 Martin Jolicoeur, Greg Haerr
##############################################################################
 
ifndef TOP
TOP = ..
CONFIG = $(TOP)/config
endif
 
include $(CONFIG)
 
VPATH := $(TOP)/mwin
 
######################## Additional Flags section ############################
 
# Directories list for header files
INCLUDEDIRS +=
 
# Defines for preprocessor
ifeq ($(ERASEMOVE), Y)
DEFINES += -DERASEMOVE=1
endif
 
ifeq ($(UPDATEREGIONS), Y)
DEFINES += -DUPDATEREGIONS=1
endif
 
# Compilation flags for C files OTHER than include directories
CFLAGS +=
# Preprocessor flags OTHER than defines
CPPFLAGS +=
# Linking flags
LDFLAGS +=
 
############################# targets section ################################
 
ifeq ($(MICROWIN), Y)
 
# If you want to create a library with the objects files, define the name here
LIBNAME = libmwin.a
LIBNAMESO = libmwin.so
 
# List of objects to compile
OBJS = winmain.o winuser.o wingdi.o winexpos.o winclip.o winevent.o\
windefw.o winrgn.o winfont.o winsbar.o
 
endif
 
######################### Makefile.rules section #############################
 
include $(TOP)/Makefile.rules
 
######################## Tools targets section ###############################
 
/winuser.c
0,0 → 1,1420
/*
* Copyright (c) 1999 Greg Haerr <greg@censoft.com>
*
* Win32 API upper level window creation, management and msg routines
*/
#include "windows.h"
#include "wintern.h"
#include "device.h"
#include <stdlib.h>
#include <string.h>
 
#define PAINTONCE 1 /* =1 to queue paint msgs only once*/
#define MOUSETEST 1
 
MWLISTHEAD mwMsgHead; /* application msg queue*/
MWLISTHEAD mwClassHead; /* register class list*/
 
int mwSYSMETRICS_CYCAPTION = 12; /* Y caption height*/
int mwSYSMETRICS_CXFRAME = 3; /* width of frame border*/
int mwSYSMETRICS_CYFRAME = 3; /* height of frame border*/
int mwSYSMETRICS_CXBORDER = 1; /* width of single border*/
int mwSYSMETRICS_CYBORDER = 1; /* width of single border*/
int mwSYSMETRICS_CXVSCROLL = 13; /* width of vertical scrollbar*/
int mwSYSMETRICS_CYHSCROLL = 13; /* height of horizontal scrollbar*/
int mwSYSMETRICS_CXHSCROLL = 13; /* width of arrow on horz scrollbar*/
int mwSYSMETRICS_CYVSCROLL = 13; /* height of arrow on vert scrollbar*/
int mwSYSMETRICS_CXDOUBLECLK = 2; /* +/- X double click position*/
int mwSYSMETRICS_CYDOUBLECLK = 2; /* +/- Y double click position*/
int mwpaintSerial = 1; /* experimental alphablend sequencing*/
int mwpaintNC = 1; /* experimental NC paint handling*/
BOOL mwforceNCpaint = FALSE; /* force NC paint when alpha blending*/
 
static void MwOffsetChildren(HWND hwnd, int offx, int offy);
 
LRESULT WINAPI
CallWindowProc(WNDPROC lpPrevWndFunc, HWND hwnd, UINT Msg, WPARAM wParam,
LPARAM lParam)
{
return (*lpPrevWndFunc)(hwnd, Msg, wParam, lParam);
}
 
LRESULT WINAPI
SendMessage(HWND hwnd, UINT Msg,WPARAM wParam,LPARAM lParam)
{
if(hwnd && hwnd->pClass) {
hwnd->paintSerial = mwpaintSerial; /* assign msg sequence #*/
return (*hwnd->pClass->lpfnWndProc)(hwnd, Msg, wParam, lParam);
}
return 0;
}
 
BOOL WINAPI
PostMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
MSG * pMsg;
 
#if PAINTONCE
/* don't queue paint msgs, set window paint status instead*/
if(Msg == WM_PAINT) {
hwnd->gotPaintMsg = PAINT_NEEDSPAINT;
return TRUE;
}
#endif
#if MOUSETEST
/* replace multiple mouse messages with one for better mouse handling*/
if(Msg == WM_MOUSEMOVE) {
PMWLIST p;
for(p=mwMsgHead.head; p; p=p->next) {
pMsg = GdItemAddr(p, MSG, link);
if(pMsg->hwnd == hwnd && pMsg->message == Msg) {
pMsg->wParam = wParam;
pMsg->lParam = lParam;
pMsg->time = GetTickCount();
pMsg->pt.x = cursorx;
pMsg->pt.y = cursory;
return TRUE;
}
}
}
#endif
pMsg = GdItemNew(MSG);
if(!pMsg)
return FALSE;
pMsg->hwnd = hwnd;
pMsg->message = Msg;
pMsg->wParam = wParam;
pMsg->lParam = lParam;
pMsg->time = GetTickCount();
pMsg->pt.x = cursorx;
pMsg->pt.y = cursory;
GdListAdd(&mwMsgHead, &pMsg->link);
return TRUE;
}
 
/* currently, we post to the single message queue, regardless of thread*/
BOOL WINAPI
PostThreadMessage(DWORD dwThreadId, UINT Msg, WPARAM wParam, LPARAM lParam)
{
return PostMessage(NULL, Msg, wParam, lParam);
}
 
VOID WINAPI
PostQuitMessage(int nExitCode)
{
PostMessage(NULL, WM_QUIT, nExitCode, 0L);
}
 
static BOOL
chkPaintMsg(HWND wp, LPMSG lpMsg)
{
/*
* Tricky: only repaint window if there
* isn't a mouse capture (window move) in progress,
* or the window is the moving window.
*/
if(wp->gotPaintMsg == PAINT_NEEDSPAINT &&
(!dragwp || dragwp == wp)) {
paint:
wp->gotPaintMsg = PAINT_PAINTED;
lpMsg->hwnd = wp;
lpMsg->message = WM_PAINT;
lpMsg->wParam = 0;
lpMsg->lParam = 0;
lpMsg->time = 0;
lpMsg->pt.x = cursorx;
lpMsg->pt.y = cursory;
return TRUE;
} else if(dragwp && wp->gotPaintMsg == PAINT_NEEDSPAINT) {
/* All other windows we'll check for
* event input first, then allow repaint.
*/
MwSelect();
if(mwMsgHead.head == NULL)
goto paint;
}
return FALSE;
}
 
BOOL WINAPI
PeekMessage(LPMSG lpMsg, HWND hwnd, UINT uMsgFilterMin, UINT uMsgFilterMax,
UINT wRemoveMsg)
{
HWND wp;
PMSG pNxtMsg;
 
/* check if no messages in queue*/
if(mwMsgHead.head == NULL) {
#if PAINTONCE
/* check all windows for pending paint messages*/
for(wp=listwp; wp; wp=wp->next) {
if(!(wp->style & WS_CHILD)) {
if(chkPaintMsg(wp, lpMsg))
return TRUE;
}
}
for(wp=listwp; wp; wp=wp->next) {
if(wp->style & WS_CHILD) {
if(chkPaintMsg(wp, lpMsg))
return TRUE;
}
}
#endif
MwSelect();
}
 
if(mwMsgHead.head == NULL)
return FALSE;
 
pNxtMsg = (PMSG)mwMsgHead.head;
if(wRemoveMsg & PM_REMOVE)
GdListRemove(&mwMsgHead, &pNxtMsg->link);
*lpMsg = *pNxtMsg;
if(wRemoveMsg & PM_REMOVE)
GdItemFree(pNxtMsg);
return TRUE;
}
 
BOOL WINAPI
GetMessage(LPMSG lpMsg,HWND hwnd,UINT wMsgFilterMin,UINT wMsgFilterMax)
{
/*
* currently MwSelect() must poll for VT switch reasons,
* so this code will work
*/
while(!PeekMessage(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax,PM_REMOVE))
continue;
return lpMsg->message != WM_QUIT;
}
 
BOOL WINAPI
TranslateMessage(CONST MSG *lpMsg)
{
return FALSE;
}
 
LONG WINAPI
DispatchMessage(CONST MSG *lpMsg)
{
return SendMessage(lpMsg->hwnd, lpMsg->message, lpMsg->wParam,
lpMsg->lParam);
}
 
/* find the registered window class struct by name*/
PWNDCLASS
MwFindClassByName(LPCSTR lpClassName)
{
PMWLIST p;
PWNDCLASS pClass;
 
for(p=mwClassHead.head; p; p=p->next) {
pClass = GdItemAddr(p, WNDCLASS, link);
if(strcmpi(pClass->szClassName, lpClassName) == 0)
return pClass;
}
return NULL;
}
 
ATOM WINAPI
RegisterClass(CONST WNDCLASS *lpWndClass)
{
PWNDCLASS pClass;
 
/* check if already present*/
pClass = MwFindClassByName(lpWndClass->lpszClassName);
if(pClass)
return 0;
/* copy class into new struct*/
pClass = GdItemNew(WNDCLASS);
if(!pClass)
return 0;
*pClass = *lpWndClass;
strcpy(pClass->szClassName, lpWndClass->lpszClassName);
GdListAdd(&mwClassHead, &pClass->link);
 
return 1;
}
 
BOOL WINAPI
UnregisterClass(LPCSTR lpClassName, HINSTANCE hInstance)
{
PWNDCLASS pClass;
 
pClass = MwFindClassByName(lpClassName);
if(!pClass)
return FALSE;
GdListRemove(&mwClassHead, &pClass->link);
DeleteObject(pClass->hbrBackground);
GdItemFree(pClass);
return TRUE;
}
 
HWND WINAPI
CreateWindowEx(DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName,
DWORD dwStyle, int x, int y, int nWidth, int nHeight,
HWND hwndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam)
{
HWND pwp; /* parent window */
HWND wp; /* new window */
HWND hwndOwner;
PWNDCLASS pClass;
CREATESTRUCT cs;
static int nextx = 20;
static int nexty = 20;
 
pClass = MwFindClassByName(lpClassName);
if(!pClass)
return NULL;
 
if(x == CW_USEDEFAULT || y == CW_USEDEFAULT) {
x = nextx;
nextx += 10;
y = nexty;
nexty += 10;
if(nextx > 200)
nextx = nexty = 20;
}
if(nWidth == CW_USEDEFAULT || nHeight == CW_USEDEFAULT) {
nWidth = 250;
nHeight = 250;
}
 
if(hwndParent == NULL) {
if(dwStyle & WS_CHILD)
return NULL;
pwp = rootwp;
} else
pwp = hwndParent;
 
/* WS_POPUP z-order parent is the root window (passed parent is owner)*/
if(dwStyle & WS_POPUP)
pwp = rootwp; /* force clip to root, not z-parent*/
 
/* window owner is NULL for child windows, else it's the passed parent*/
if(dwStyle & WS_CHILD)
hwndOwner = NULL;
else hwndOwner = hwndParent;
 
wp = (HWND)GdItemAlloc(sizeof(struct hwnd) - 1 + pClass->cbWndExtra);
if(!wp)
return NULL;
 
/* force all clipping on by default*/
dwStyle |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
 
wp->pClass = pClass;
wp->style = dwStyle;
wp->exstyle = dwExStyle;
wp->parent = pwp;
wp->owner = hwndOwner;
wp->children = NULL;
wp->siblings = pwp->children;
pwp->children = wp;
wp->next = listwp;
listwp = wp;
wp->winrect.left = pwp->clirect.left + x;
wp->winrect.top = pwp->clirect.top + y;
wp->winrect.right = wp->winrect.left + nWidth;
wp->winrect.bottom = wp->winrect.top + nHeight;
wp->cursor = pwp->cursor;
wp->cursor->usecount++;
wp->unmapcount = pwp->unmapcount + 1;
wp->id = (int)hMenu;
wp->gotPaintMsg = PAINT_PAINTED;
strzcpy(wp->szTitle, lpWindowName, sizeof(wp->szTitle));
#if UPDATEREGIONS
wp->update = GdAllocRegion();
#endif
wp->nextrabytes = pClass->cbWndExtra;
 
/* calculate client area*/
MwCalcClientRect(wp);
 
cs.lpCreateParams = lpParam;
cs.hInstance = hInstance;
cs.hMenu = hMenu;
cs.hwndParent = hwndParent;
cs.cy = nHeight;
cs.cx = nWidth;
cs.y = y;
cs.x = x;
cs.style = dwStyle;
cs.lpszName = lpWindowName;
cs.lpszClass = lpClassName;
cs.dwExStyle = dwExStyle;
 
if(SendMessage(wp, WM_CREATE, 0, (LPARAM)(LPSTR)&cs) == -1) {
MwDestroyWindow(wp, FALSE);
return NULL;
}
 
/* send SIZE and MOVE msgs*/
MwSendSizeMove(wp, TRUE, TRUE);
 
if(wp->style & WS_VISIBLE) {
MwShowWindow(wp, TRUE);
SetFocus(wp);
}
 
return wp;
}
 
BOOL WINAPI
DestroyWindow(HWND hwnd)
{
MwDestroyWindow(hwnd, TRUE);
return TRUE;
}
 
/*
* Destroy the specified window, and all of its children.
* This is a recursive routine.
*/
void
MwDestroyWindow(HWND hwnd,BOOL bSendMsg)
{
HWND wp = hwnd;
HWND prevwp;
PMWLIST p;
PMSG pmsg;
 
if (wp == rootwp)
return;
 
/*
* Unmap the window.
*/
if (wp->unmapcount == 0)
MwHideWindow(wp, FALSE, FALSE);
 
if(bSendMsg)
SendMessage(hwnd, WM_DESTROY, 0, 0L);
 
/*
* Disable all sendmessages to this window.
*/
wp->pClass = NULL;
 
/*
* Destroy all children, sending WM_DESTROY messages.
*/
while (wp->children)
MwDestroyWindow(wp->children, bSendMsg);
 
/*
* Free any cursor associated with the window.
*/
if (wp->cursor->usecount-- == 1) {
free(wp->cursor);
wp->cursor = NULL;
}
 
/*
* Remove this window from the child list of its parent.
*/
prevwp = wp->parent->children;
if (prevwp == wp)
wp->parent->children = wp->siblings;
else {
while (prevwp->siblings != wp)
prevwp = prevwp->siblings;
prevwp->siblings = wp->siblings;
}
wp->siblings = NULL;
 
/*
* Remove this window from the complete list of windows.
*/
prevwp = listwp;
if (prevwp == wp)
listwp = wp->next;
else {
while (prevwp->next != wp)
prevwp = prevwp->next;
prevwp->next = wp->next;
}
wp->next = NULL;
 
/*
* Forget various information related to this window.
* Then finally free the structure.
*/
 
/* Remove all messages from msg queue for this window*/
for(p=mwMsgHead.head; p; ) {
pmsg = GdItemAddr(p, MSG, link);
if(pmsg->hwnd == wp) {
p = p->next;
GdListRemove(&mwMsgHead, &pmsg->link);
GdItemFree(p);
} else
p = p->next;
}
 
/* FIXME: destroy hdc's relating to window?*/
 
if (wp == capturewp) {
capturewp = NULL;
MwCheckMouseWindow();
}
 
if (wp == MwGetTopWindow(focuswp))
SetFocus(rootwp->children? rootwp->children: rootwp);
 
/* destroy private DC*/
if(wp->owndc) {
HDC hdc = wp->owndc;
wp->owndc = NULL; /* force destroy with ReleaseDC*/
ReleaseDC(wp, hdc);
}
#if UPDATEREGIONS
GdDestroyRegion(wp->update);
#endif
GdItemFree(wp);
}
 
BOOL WINAPI
IsWindow(HWND hwnd)
{
HWND wp;
 
for(wp=listwp; wp; wp=wp->next)
if(wp == hwnd)
return TRUE;
return FALSE;
}
 
BOOL WINAPI
ShowWindow(HWND hwnd, int nCmdShow)
{
if(!hwnd)
return FALSE;
/* fix: send show msg*/
 
switch(nCmdShow) {
case SW_HIDE:
if (!(hwnd->style & WS_VISIBLE))
return FALSE;
MwHideWindow(hwnd, TRUE, TRUE);
hwnd->style &= ~WS_VISIBLE;
break;
 
default:
if (hwnd->style & WS_VISIBLE)
return FALSE;
hwnd->style |= WS_VISIBLE;
MwShowWindow(hwnd, TRUE);
}
return TRUE;
}
 
BOOL WINAPI
InvalidateRect(HWND hwnd, CONST RECT *lpRect, BOOL bErase)
{
/* FIXME: handle bErase*/
if(!hwnd)
MwRedrawScreen();
else {
#if UPDATEREGIONS
RECT rc;
 
/* add to update region*/
if(!lpRect)
GetClientRect(hwnd, &rc);
else rc = *lpRect;
rc.bottom += mwSYSMETRICS_CYCAPTION +
mwSYSMETRICS_CYFRAME + 1;
rc.right += mwSYSMETRICS_CXFRAME;
MwUnionUpdateRegion(hwnd, rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top, TRUE);
 
/* if update region not empty, mark as needing painting*/
if(hwnd->update->numRects != 0)
#endif
if(hwnd->gotPaintMsg == PAINT_PAINTED)
hwnd->gotPaintMsg = PAINT_NEEDSPAINT;
}
return TRUE;
}
 
#if UPDATEREGIONS
/* add region to window update region*/
BOOL WINAPI
InvalidateRgn(HWND hwnd, HRGN hrgn, BOOL bErase)
{
/* FIXME: handle bErase*/
if(hwnd) {
if(!hrgn)
/* add client area to update region*/
return InvalidateRect(hwnd, NULL, bErase);
 
/* passed region is in client coords, convert to screen*/
GdOffsetRegion(((MWRGNOBJ *)hrgn)->rgn,
hwnd->clirect.left, hwnd->clirect.top);
GdUnionRegion(hwnd->update, hwnd->update,
((MWRGNOBJ *)hrgn)->rgn);
GdOffsetRegion(((MWRGNOBJ *)hrgn)->rgn,
-hwnd->clirect.left, -hwnd->clirect.top);
 
/* if update region not empty, mark as needing painting*/
if(hwnd->update->numRects != 0)
if(hwnd->gotPaintMsg == PAINT_PAINTED)
hwnd->gotPaintMsg = PAINT_NEEDSPAINT;
}
return TRUE;
}
 
BOOL WINAPI
ValidateRect(HWND hwnd, CONST RECT *lprc)
{
RECT rc;
 
if(!hwnd)
MwRedrawScreen();
else {
/* subtract from update region*/
if(!lprc)
GetClientRect(hwnd, &rc);
else rc = *lprc;
rc.bottom += mwSYSMETRICS_CYCAPTION +
mwSYSMETRICS_CYFRAME + 1;
rc.right += mwSYSMETRICS_CXFRAME;
MwUnionUpdateRegion(hwnd, rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top, FALSE);
 
/* if update region empty, mark window as painted*/
if(hwnd->update->numRects == 0)
if(hwnd->gotPaintMsg == PAINT_NEEDSPAINT)
hwnd->gotPaintMsg = PAINT_PAINTED;
}
return TRUE;
}
 
/* remove region from window update region*/
BOOL WINAPI
ValidateRgn(HWND hwnd, HRGN hrgn)
{
if(hwnd) {
if(!hrgn)
/* remove client area from update region*/
return ValidateRect(hwnd, NULL);
 
/* passed region is in client coords, convert to screen*/
GdOffsetRegion(((MWRGNOBJ *)hrgn)->rgn,
hwnd->clirect.left, hwnd->clirect.top);
GdSubtractRegion(hwnd->update, hwnd->update,
((MWRGNOBJ *)hrgn)->rgn);
GdOffsetRegion(((MWRGNOBJ *)hrgn)->rgn,
-hwnd->clirect.left, -hwnd->clirect.top);
 
/* if update region empty, mark window as painted*/
if(hwnd->update->numRects == 0)
if(hwnd->gotPaintMsg == PAINT_NEEDSPAINT)
hwnd->gotPaintMsg = PAINT_PAINTED;
}
return TRUE;
}
#endif /* UPDATEREGIONS*/
 
BOOL WINAPI
UpdateWindow(HWND hwnd)
{
#if PAINTONCE
if(hwnd && hwnd->gotPaintMsg == PAINT_NEEDSPAINT) {
SendMessage(hwnd, WM_PAINT, 0, 0L);
hwnd->gotPaintMsg = PAINT_PAINTED;
return TRUE;
}
return FALSE;
#else
/* fix: remove other paint messages from queue*/
SendMessage(hwnd, WM_PAINT, 0, 0L);
return TRUE;
#endif
}
 
HWND WINAPI
GetFocus(VOID)
{
return focuswp;
}
 
HWND WINAPI
SetFocus(HWND hwnd)
{
HWND oldfocus;
HWND top, top2;
 
/* if NULL or hidden, set focus to desktop*/
if(!hwnd || hwnd->unmapcount)
hwnd = rootwp;
 
if(hwnd == focuswp)
return focuswp;
 
oldfocus = focuswp;
SendMessage(oldfocus, WM_KILLFOCUS, (WPARAM)hwnd, 0L);
focuswp = hwnd;
SendMessage(focuswp, WM_SETFOCUS, (WPARAM)oldfocus, 0L);
 
/* FIXME SetActiveWindow() here?*/
top = MwGetTopWindow(oldfocus);
top2 = MwGetTopWindow(focuswp);
if(top2 != top) {
/* send deactivate*/
SendMessage(top, WM_ACTIVATE, (WPARAM)MAKELONG(WA_INACTIVE, 0),
(LPARAM)top2);
/* repaint captions*/
MwPaintNCArea(top);
#if 0
/* Make sure that caption area is fully invalidated,
* as repaint will be in active color.
* FIXME: this doesn't work; breaks terminal emulator
* on focus out/in
*/
MwUnionUpdateRegion(top2, 0, 0,
top2->winrect.right-top2->winrect.left,
mwSYSMETRICS_CYCAPTION+4, TRUE);
#endif
/* send deactivate*/
SendMessage(top, WM_ACTIVATE, (WPARAM)MAKELONG(WA_ACTIVE, 0),
(LPARAM)top);
MwPaintNCArea(top2);
}
 
return oldfocus;
}
 
/* the foreground window is the top level window at the top of the z order*/
/* setting the foreground window sets focus and moves window to top*/
BOOL WINAPI
SetForegroundWindow(HWND hwnd)
{
/* activate (set focus to) specified window*/
SetFocus(hwnd);
 
/* raise top level parent to top of z order*/
SetWindowPos(MwGetTopWindow(hwnd), HWND_TOP, 0, 0, 0, 0,
SWP_NOMOVE|SWP_NOSIZE);
 
return TRUE;
}
 
/* our SetActiveWindow is the same as SetFocus, no z order change*/
HWND WINAPI
SetActiveWindow(HWND hwnd)
{
HWND oldActive;
 
oldActive = GetActiveWindow();
SetFocus(hwnd); /* WM_ACTIVATE sent by SetFocus*/
return oldActive;
}
 
/* The active window is the first non-child ancestor of focus window*/
HWND WINAPI
GetActiveWindow(VOID)
{
return MwGetTopWindow(focuswp);
}
 
/* activate the top level window associated with window*/
BOOL WINAPI
BringWindowToTop(HWND hwnd)
{
return SetForegroundWindow(hwnd);
}
 
HWND WINAPI
GetDesktopWindow(VOID)
{
return rootwp;
}
 
HWND
MwGetTopWindow(HWND hwnd)
{
while(hwnd->style & WS_CHILD)
hwnd = hwnd->parent;
return hwnd;
}
 
HWND WINAPI
GetParent(HWND hwnd)
{
/* top level windows return NULL instead of rootwp*/
if(!hwnd || !(hwnd->style & (WS_POPUP|WS_CHILD)))
return NULL; /* toplevel window*/
if(hwnd->style & WS_POPUP)
return hwnd->owner; /* popup window*/
return hwnd->parent; /* child window*/
}
 
BOOL WINAPI
EnableWindow(HWND hwnd, BOOL bEnable)
{
if(bEnable && (hwnd->style & WS_DISABLED)) {
/* enable window*/
hwnd->style &= ~WS_DISABLED;
SendMessage(hwnd, WM_ENABLE, TRUE, 0L);
return TRUE;
}
if(!bEnable && !(hwnd->style & WS_DISABLED)) {
/* disable window*/
hwnd->style |= WS_DISABLED;
/* FIXME: handle lost focus for child window of hwnd*/
/* FIXME: handle lost focus for capture window*/
if(hwnd == focuswp)
SetFocus(NULL);
SendMessage(hwnd, WM_ENABLE, FALSE, 0L);
return FALSE;
}
return (hwnd->style & WS_DISABLED) != 0;
}
 
/* calc window rect from client rect in screen coords*/
BOOL WINAPI
AdjustWindowRectEx(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle)
{
int yoffset;
 
if(dwStyle & WS_BORDER) {
if((dwStyle & WS_CAPTION) == WS_CAPTION) {
InflateRect(lpRect, mwSYSMETRICS_CXFRAME,
mwSYSMETRICS_CYFRAME);
yoffset = mwSYSMETRICS_CYCAPTION + 1;
lpRect->top -= yoffset;
lpRect->bottom -= yoffset;
} else
InflateRect(lpRect, 1, 1);
 
/* make sure upper left is on screen*/
if(lpRect->left < 0) {
lpRect->right -= lpRect->left;
lpRect->left = 0;
}
if(lpRect->top < 0) {
lpRect->bottom -= lpRect->top;
lpRect->top = 0;
}
}
return TRUE;
}
 
/* set the client rect for a window from the window position*/
void
MwCalcClientRect(HWND hwnd)
{
NCCALCSIZE_PARAMS nccs;
 
/* set first rectangle to window rect*/
nccs.rgrc[0] = hwnd->winrect;
SendMessage(hwnd, WM_NCCALCSIZE, FALSE, (LPARAM)(LPSTR)&nccs);
hwnd->clirect = nccs.rgrc[0];
 
/* adjust client area if scrollbar(s) visible*/
MwAdjustNCScrollbars(hwnd);
}
 
BOOL WINAPI
GetClientRect(HWND hwnd, LPRECT lpRect)
{
if(!hwnd || !lpRect)
return FALSE;
 
/* convert client area rect from screen coordinates*/
lpRect->left = 0;
lpRect->top = 0;
lpRect->right = hwnd->clirect.right - hwnd->clirect.left;
lpRect->bottom = hwnd->clirect.bottom - hwnd->clirect.top;
return TRUE;
}
 
BOOL WINAPI
GetWindowRect(HWND hwnd, LPRECT lpRect)
{
if(!hwnd || !lpRect)
return FALSE;
/* window rect is already in screen coordinates*/
*lpRect = hwnd->winrect;
return TRUE;
}
 
BOOL WINAPI
ClientToScreen(HWND hwnd, LPPOINT lpPoint)
{
if(!hwnd || !lpPoint)
return FALSE;
MapWindowPoints(hwnd, NULL, lpPoint, 1);
return TRUE;
}
 
BOOL WINAPI
ScreenToClient(HWND hwnd, LPPOINT lpPoint)
{
if(!hwnd || !lpPoint)
return FALSE;
MapWindowPoints(NULL, hwnd, lpPoint, 1);
return TRUE;
}
 
int WINAPI
MapWindowPoints(HWND hwndFrom, HWND hwndTo, LPPOINT lpPoints, UINT cPoints)
{
MWCOORD offx = 0;
MWCOORD offy = 0;
 
/* map src window to screen coords*/
if(hwndFrom) {
offx = hwndFrom->clirect.left;
offy = hwndFrom->clirect.top;
}
 
/* map to dst window client coords*/
if(hwndTo) {
offx -= hwndTo->clirect.left;
offy -= hwndTo->clirect.top;
}
 
/* adjust points*/
while(cPoints--) {
lpPoints->x += offx;
lpPoints->y += offy;
++lpPoints;
}
return (int)MAKELONG(offx, offy);
}
 
BOOL WINAPI
SetRect(LPRECT lprc, int xLeft, int yTop, int xRight, int yBottom)
{
lprc->left = xLeft;
lprc->top = yTop;
lprc->right = xRight;
lprc->bottom = yBottom;
return TRUE;
}
 
BOOL WINAPI
SetRectEmpty(LPRECT lprc)
{
lprc->left = lprc->right = lprc->top = lprc->bottom = 0;
return TRUE;
}
 
BOOL WINAPI
CopyRect(LPRECT lprcDst, CONST RECT *lprcSrc)
{
*lprcDst = *lprcSrc;
return TRUE;
}
 
BOOL WINAPI
IsRectEmpty(CONST RECT *lprc)
{
/* FIXME: should this just be ==, not <= ?*/
/*return lprc->left == lprc->right || lprc->top == lprc->bottom;*/
return lprc->right <= lprc->left || lprc->bottom <= lprc->top;
}
 
BOOL WINAPI
InflateRect(LPRECT lprc, int dx, int dy)
{
lprc->left -= dx;
lprc->top -= dy;
lprc->right += dx;
lprc->bottom += dy;
return TRUE;
}
 
BOOL WINAPI
OffsetRect(LPRECT lprc, int dx, int dy)
{
lprc->left += dx;
lprc->right += dx;
lprc->top += dy;
lprc->bottom += dy;
return TRUE;
}
 
/* PtInRect is #defined to MwPTINRECT because of bcc struct passing bug*/
BOOL WINAPI
MwPTINRECT(CONST RECT *lprc, POINT pt)
{
return (pt.x >= lprc->left && pt.x < lprc->right &&
pt.y >= lprc->top && pt.y < lprc->bottom);
}
 
LONG WINAPI
GetWindowLong(HWND hwnd, int nIndex)
{
switch(nIndex) {
case GWL_WNDPROC:
return (LONG)hwnd->pClass->lpfnWndProc;
case GWL_HINSTANCE:
/* nyi*/
break;
case GWL_HWNDPARENT:
return (LONG)hwnd->parent;
case GWL_ID:
return hwnd->id;
case GWL_STYLE:
return hwnd->style;
case GWL_EXSTYLE:
return hwnd->exstyle;
case GWL_USERDATA:
return hwnd->userdata;
default:
if(nIndex+3 < hwnd->nextrabytes)
return *(LONG *)&hwnd->extrabytes[nIndex];
}
return 0;
}
 
LONG WINAPI
SetWindowLong(HWND hwnd, int nIndex, LONG lNewLong)
{
LONG oldval = 0;
 
switch(nIndex) {
case GWL_USERDATA:
oldval = hwnd->userdata;
hwnd->userdata = lNewLong;
break;
case GWL_WNDPROC:
oldval = (LONG)hwnd->pClass->lpfnWndProc;
hwnd->pClass->lpfnWndProc = (WNDPROC)lNewLong;
break;
case GWL_HINSTANCE:
case GWL_HWNDPARENT:
case GWL_ID:
case GWL_STYLE:
case GWL_EXSTYLE:
/* nyi*/
break;
default:
if(nIndex+3 < hwnd->nextrabytes) {
oldval = GetWindowLong(hwnd, nIndex);
*(LONG *)&hwnd->extrabytes[nIndex] = lNewLong;
}
break;
}
return oldval;
}
 
WORD WINAPI
GetWindowWord(HWND hwnd, int nIndex)
{
if(nIndex+1 < hwnd->nextrabytes)
return *(WORD *)&hwnd->extrabytes[nIndex];
return 0;
}
 
WORD WINAPI
SetWindowWord(HWND hwnd, int nIndex, WORD wNewWord)
{
WORD oldval = 0;
 
if(nIndex+1 < hwnd->nextrabytes) {
oldval = GetWindowWord(hwnd, nIndex);
*(WORD *)&hwnd->extrabytes[nIndex] = wNewWord;
}
return oldval;
}
 
DWORD WINAPI
GetClassLong(HWND hwnd, int nIndex)
{
switch(nIndex) {
case GCL_HBRBACKGROUND:
return (DWORD)hwnd->pClass->hbrBackground;
case GCL_CBWNDEXTRA:
return (DWORD)hwnd->pClass->cbWndExtra;
}
return 0;
}
 
int WINAPI
GetWindowTextLength(HWND hwnd)
{
return SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0L);
}
 
int WINAPI
GetWindowText(HWND hwnd, LPSTR lpString, int nMaxCount)
{
return SendMessage(hwnd, WM_GETTEXT, nMaxCount,(LPARAM)(LPSTR)lpString);
}
 
BOOL WINAPI
SetWindowText(HWND hwnd, LPCSTR lpString)
{
return SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)(LPCSTR)lpString);
}
 
/* Recursively offset all children of passed window*/
static void
MwOffsetChildren(HWND hwnd, int offx, int offy)
{
HWND cp;
 
/* offset all child windows for move*/
for(cp=hwnd->children; cp; cp=cp->siblings) {
 
/* offset window and client area rects*/
OffsetRect(&cp->winrect, offx, offy);
OffsetRect(&cp->clirect, offx, offy);
 
/* offset scrollbar NC hittest rects*/
if(!IsRectEmpty(&cp->vscroll.rc))
OffsetRect(&cp->vscroll.rc, offx, offy);
if(!IsRectEmpty(&cp->hscroll.rc))
OffsetRect(&cp->hscroll.rc, offx, offy);
MwOffsetChildren(cp, offx, offy);
}
}
 
BOOL
SetWindowPos(HWND hwnd, HWND hwndInsertAfter, int x, int y, int cx, int cy,
UINT fuFlags)
{
int hidden;
BOOL bMove, bSize, bZorder;
MWCOORD offx = 0, offy = 0; /* = 0 for bad gcc warning*/
WINDOWPOS winpos;
 
if(!hwnd || hwnd == rootwp || cx < 0 || cy < 0)
return FALSE;
 
/* FIXME SWP_NOACTIVATE*/
 
if((fuFlags & SWP_SHOWWINDOW))
return ShowWindow(hwnd, SW_SHOW);
 
if((fuFlags & SWP_HIDEWINDOW))
return ShowWindow(hwnd, SW_HIDE);
 
/* move is relative to parent's client rect for child windows*/
if(hwnd->style & WS_CHILD) {
x += hwnd->parent->clirect.left;
y += hwnd->parent->clirect.top;
} else {
x += hwnd->parent->winrect.left;
y += hwnd->parent->winrect.top;
}
 
bMove = !(fuFlags & SWP_NOMOVE) &&
(hwnd->winrect.left != x || hwnd->winrect.top != y);
bSize = !(fuFlags & SWP_NOSIZE) &&
((hwnd->winrect.right - hwnd->winrect.left) != cx ||
(hwnd->winrect.bottom - hwnd->winrect.top) != cy);
bZorder = !(fuFlags & SWP_NOZORDER);
if(!bMove && !bSize && !bZorder)
return TRUE;
 
/* could optimize to not require redraw when possible*/
hidden = hwnd->unmapcount || (fuFlags & SWP_NOREDRAW);
 
if(bZorder) {
switch((int)hwndInsertAfter) {
case (int)HWND_TOP:
MwRaiseWindow(hwnd);
break;
case (int)HWND_BOTTOM:
MwLowerWindow(hwnd);
break;
default:
/* FIXME for non top/bottom zorder*/
break;
}
} else {
if(!hidden)
MwHideWindow(hwnd, FALSE, FALSE);
}
 
if(bMove) {
offx = x - hwnd->winrect.left;
offy = y - hwnd->winrect.top;
}
if(bMove || bSize) {
hwnd->winrect.left = x;
hwnd->winrect.top = y;
hwnd->winrect.right = x + cx;
hwnd->winrect.bottom = y + cy;
}
if(bMove)
MwOffsetChildren(hwnd, offx, offy);
 
if(bMove || bSize) {
MwCalcClientRect(hwnd);
 
/* send windowposchanged message*/
/* FIXME: move WM_MOVE, WM_SIZE to defwndproc*/
winpos.hwnd = hwnd;
winpos.hwndInsertAfter = hwndInsertAfter;
winpos.x = x;
winpos.y = y;
winpos.cx = cx;
winpos.cy = cy;
winpos.flags = fuFlags;
SendMessage(hwnd, WM_WINDOWPOSCHANGED, 0, (LPARAM)&winpos);
 
MwSendSizeMove(hwnd, bSize, bMove);
}
 
++mwpaintSerial; /* increment paint serial # for alphablending*/
++mwpaintNC; /* increment paint serial # for NC painting*/
if(!bZorder && !hidden)
MwShowWindow(hwnd, FALSE);
 
return TRUE;
}
 
BOOL WINAPI
MoveWindow(HWND hwnd, int x, int y, int nWidth, int nHeight, BOOL bRepaint)
{
UINT flags = SWP_NOZORDER | SWP_NOACTIVATE;
 
if(!bRepaint)
flags |= SWP_NOREDRAW;
return SetWindowPos(hwnd, 0, x, y, nWidth, nHeight, flags);
}
 
void
MwSendSizeMove(HWND hwnd, BOOL bSize, BOOL bMove)
{
DWORD dwStyle;
RECT rc;
 
if(bSize) {
GetClientRect(hwnd, &rc);
SendMessage(hwnd, WM_SIZE, SIZE_RESTORED,
MAKELONG(rc.right, rc.bottom));
}
if(bMove) {
dwStyle = GetWindowLong(hwnd, GWL_STYLE);
GetWindowRect(hwnd, &rc);
/* return parent coords for child windows*/
if(dwStyle & WS_CHILD)
ScreenToClient(hwnd->parent, (LPPOINT)&rc.left);
SendMessage(hwnd, WM_MOVE, 0, MAKELONG(rc.left, rc.top));
}
}
 
/*
* Specify a cursor for a window.
* This cursor will only be used within that window, and by default
* for its new children. If the cursor is currently within this
* window, it will be changed to the new one immediately.
*/
void
MwSetCursor(HWND wp, PMWCURSOR pcursor)
{
HCURSOR cp;
int bytes;
 
if(!wp || !pcursor)
return;
 
bytes = MWIMAGE_SIZE(pcursor->width,pcursor->height)
* sizeof(MWIMAGEBITS);
 
/*
* See if the window is using a shared cursor definition.
* If so, then allocate a new private one, otherwise reuse it.
*/
cp = wp->cursor;
if (!cp || cp->usecount-- > 1) {
cp = GdItemNew(struct hcursor);
if(!cp)
return;
}
 
cp->usecount = 1;
cp->cursor.width = pcursor->width;
cp->cursor.height = pcursor->height;
cp->cursor.hotx = pcursor->hotx;
cp->cursor.hoty = pcursor->hoty;
cp->cursor.fgcolor = pcursor->fgcolor;
cp->cursor.bgcolor = pcursor->bgcolor;
memcpy(cp->cursor.image, pcursor->image, bytes);
memcpy(cp->cursor.mask, pcursor->mask, bytes);
wp->cursor = cp;
 
/*
* If this was the current cursor, then draw the new one.
*/
if (cp == curcursor || curcursor == NULL) {
GdMoveCursor(cursorx - cp->cursor.hotx,
cursory - cp->cursor.hoty);
GdSetCursor(&cp->cursor);
}
}
 
BOOL WINAPI
GetCursorPos(LPPOINT lpPoint)
{
MWCOORD x, y;
 
if(lpPoint) {
GdGetCursorPos(&x, &y);
lpPoint->x = x;
lpPoint->y = y;
return TRUE;
}
return FALSE;
}
 
HWND WINAPI
GetCapture(VOID)
{
return capturewp;
}
 
HWND WINAPI
SetCapture(HWND hwnd)
{
HWND oldCapture = capturewp;
 
capturewp = hwnd;
MwCheckMouseWindow();
return oldCapture;
}
 
BOOL WINAPI
ReleaseCapture(VOID)
{
capturewp = NULL;
MwCheckMouseWindow();
return TRUE;
}
 
struct timer { /* private timer structure*/
HWND hwnd; /* window associated with timer, NULL if none*/
UINT idTimer; /* id for timer*/
UINT uTimeout; /* timeout value, in msecs*/
DWORD dwClockExpires; /* GetTickCount timer expiration value*/
TIMERPROC lpTimerFunc; /* callback function*/
};
 
static struct timer timer; /* single global timer FIXME*/
 
UINT WINAPI
SetTimer(HWND hwnd, UINT idTimer, UINT uTimeout, TIMERPROC lpTimerFunc)
{
static UINT nextID = 0; /* next ID when hwnd is NULL*/
 
/* assign timer id based on valid window handle*/
timer.hwnd = hwnd;
timer.idTimer = hwnd? idTimer: ++nextID;
timer.uTimeout = uTimeout;
timer.dwClockExpires = GetTickCount() + uTimeout;
timer.lpTimerFunc = lpTimerFunc;
 
return timer.idTimer;
}
 
BOOL WINAPI
KillTimer(HWND hwnd, UINT idTimer)
{
if(timer.hwnd == hwnd && timer.idTimer == idTimer) {
timer.uTimeout = 0;
return TRUE;
}
return FALSE;
}
 
/*
* Return the next timeout value in msecs
*/
UINT
MwGetNextTimeoutValue(void)
{
int timeout;
 
if(timer.uTimeout) {
timeout = timer.dwClockExpires - GetTickCount();
if(timeout > 0)
return timeout;
}
return 0;
}
 
/*
* Check if any timers have expired by looking at current system ticks
*/
void
MwHandleTimers(void)
{
int timeout;
DWORD dwTime;
 
/* check if timer running*/
if(timer.uTimeout == 0)
return;
 
/* determine if timer expired*/
dwTime = GetTickCount();
timeout = timer.dwClockExpires - dwTime;
if(timeout > 0)
return;
 
/* call timer function or post timer message*/
if(timer.lpTimerFunc)
timer.lpTimerFunc(timer.hwnd, WM_TIMER, timer.idTimer, dwTime);
else PostMessage(timer.hwnd, WM_TIMER, timer.idTimer, 0);
 
/* reset timer*/
timer.dwClockExpires = dwTime + timer.uTimeout;
}
 
int WINAPI
GetSystemMetrics(int nIndex)
{
switch(nIndex) {
case SM_CXSCREEN:
return scrdev.xvirtres;
case SM_CYSCREEN:
return scrdev.yvirtres;
case SM_CXVSCROLL:
return mwSYSMETRICS_CXVSCROLL;
case SM_CYHSCROLL:
return mwSYSMETRICS_CYHSCROLL;
case SM_CYCAPTION:
/* + 1 for line under caption*/
return mwSYSMETRICS_CYCAPTION + 1;
case SM_CXBORDER:
return mwSYSMETRICS_CXBORDER;
case SM_CYBORDER:
return mwSYSMETRICS_CYBORDER;
case SM_CYMENU:
break; /* FIXME: 19 when menubars work*/
case SM_CYVSCROLL:
return mwSYSMETRICS_CYVSCROLL;
case SM_CXHSCROLL:
return mwSYSMETRICS_CXHSCROLL;
case SM_CXFRAME:
case SM_CXDLGFRAME:
return mwSYSMETRICS_CXFRAME;
case SM_CYFRAME:
case SM_CYDLGFRAME:
return mwSYSMETRICS_CYFRAME;
}
return 0;
}
 
HWND WINAPI
GetDlgItem(HWND hDlg, int nIDDlgItem)
{
HWND wp;
 
if(hDlg) {
for(wp=hDlg->children; wp; wp=wp->siblings)
if(wp->id == nIDDlgItem)
return wp;
}
return 0;
}
/bmp/makefile.conv
0,0 → 1,61
##############################################################################
# Microwindows template Makefile
# Copyright (c) 2000 Martin Jolicoeur, Greg Haerr
##############################################################################
 
ifndef TOP
TOP = ../..
CONFIG = $(TOP)/config
endif
 
include $(CONFIG)
 
all: $(TOP)/bin/convbmp
HOSTCC=gcc
HOSTCFLAGS=-I../../include
 
######################## Additional Flags section ############################
 
# Directories list for header files
INCLUDEDIRS +=
# Defines for preprocessor
DEFINES +=
 
# Compilation flags for C files OTHER than include directories
CFLAGS +=
# Preprocessor flags OTHER than defines
CPPFLAGS +=
# Linking flags
LDFLAGS +=
 
############################# targets section ################################
 
ifeq ($(MICROWIN), Y)
 
# If you want to create a library with the objects files, define the name here
LIBNAME = libmwimages.a
LIBNAMESO = libmwimages.so
 
# List of objects to compile
OBJS = car8.o min4.o max4.o close4.o under4.o\
zion208.o cs1.o rle8.o microwin.o penguin.o
 
all: $(TOP)/bin/convbmp $(TOP)/bin/makebmp default
 
endif
 
######################### Makefile.rules section #############################
 
#include $(TOP)/Makefile.rules
 
######################## Tools targets section ###############################
 
realclean: clean
$(RM) car8.c min4.c max4.c close4.c under4.c zion208.c cs1.c rle8.c \
microwin.c penguin.c
 
$(TOP)/bin/convbmp: convbmp.c
$(HOSTCC) $(HOSTCFLAGS) $< -o $@
 
$(TOP)/bin/makebmp: makebmp.c
$(HOSTCC) $(HOSTCFLAGS) $< -o $@
/bmp/under4.c
0,0 → 1,59
/* Generated by convbmp*/
#include "device.h"
 
/* MWIMAGEHDR image_under4 converted from under4.bmp*/
 
static MWPALENTRY palette[16] = {
RGBDEF( 0, 0, 0 ), /* pal 0*/
RGBDEF( 191, 0, 0 ), /* pal 1*/
RGBDEF( 0, 191, 0 ), /* pal 2*/
RGBDEF( 191, 191, 0 ), /* pal 3*/
RGBDEF( 0, 0, 191 ), /* pal 4*/
RGBDEF( 191, 0, 191 ), /* pal 5*/
RGBDEF( 0, 191, 191 ), /* pal 6*/
RGBDEF( 192, 192, 192 ), /* pal 7*/
RGBDEF( 128, 128, 128 ), /* pal 8*/
RGBDEF( 255, 0, 0 ), /* pal 9*/
RGBDEF( 0, 255, 0 ), /* pal 10*/
RGBDEF( 255, 255, 0 ), /* pal 11*/
RGBDEF( 0, 0, 255 ), /* pal 12*/
RGBDEF( 255, 0, 255 ), /* pal 13*/
RGBDEF( 0, 255, 255 ), /* pal 14*/
RGBDEF( 255, 255, 255 ), /* pal 15*/
};
 
static MWUCHAR imagebits[] = {
0x03,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x00,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x33,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x3b,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0xb3,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x3b,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x01,0x30,0x3b,0xbb,0xbb,0xb3,0x00,0x00,0x3b,0xbb,0xb3,0x00,0x03,0xbb,0xb0,0x00,0x00,0x00,0x33,0x33,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0xb0,0x00,0x00,0x3b,0x30,0x00,0x00,0x00,0x03,0xb3,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x13,0x00,0x3b,0xbb,0xbb,0xbb,0xb3,0x00,0x33,0x03,0x3b,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0x30,0x00,0x3b,0xbb,0x30,0x30,0x01,0x30,0x03,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x3b,0xbb,0xb3,0x00,0x00,0x00,0x03,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xb3,0x30,0x00,0x33,0x03,0xbb,0xbb,0xbb,0xbb,0xb3,0x30,0x03,0x30,0x3b,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x0b,0xbb,0xb3,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x0b,0x00,0x3b,0xbb,0xbb,0xb0,0x00,0x00,0xbb,0xbb,0xb3,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xb3,0x00,0xbb,0xbb,0xb3,0x00,0x03,0xbb,0xbb,0xb0,0x00,0x03,0xbb,0xb3,0x00,0x00,0x00,0x33,0x00,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x00,0xb3,0x00,0x00,0x3b,0xb3,0x00,0x00,0x00,0x3b,0xb0,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x3b,0x30,0x03,0xbb,0xbb,0xb3,0x00,0x03,0xb3,0x00,0x03,0xbb,0xbb,0x30,0x00,0x3b,0xbb,0xbb,0x00,0x00,0x3b,0xbb,0x30,0x00,0x33,0xb3,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x3b,0xbb,0xb3,0x00,0x00,0x00,0x03,0xb3,0x00,0x00,0x00,0x3b,0xbb,0x30,0x00,0x00,0x33,0x30,0x0b,0xbb,0xbb,0xbb,0x30,0x00,0x3b,0x33,0x00,0x3b,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x3b,0xbb,0xb3,0x00,0x00,0x00,0x03,0xbb,0xbb,0x30,0x00,0x3b,0x30,0x00,0x3b,0xbb,0xb3,0x00,0x03,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x30,0x3b,0xbb,0xbb,0x30,0x0b,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x3b,0xbb,0xbb,0x00,0x00,0x00,0xbb,0xb3,0x00,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0x30,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x03,0xbb,0xbb,0x30,0x3b,0xbb,0x30,0x00,0x0b,0xbb,0x30,0x00,0x3b,0xbb,0xb3,0x00,0xbb,0xbb,0xb3,0x00,0x00,0x3b,0xbb,0x30,0x03,0xbb,0xbb,0x30,0x00,0x3b,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x00,0x3b,0xb3,0x00,0x00,0x0b,0xbb,0xb3,0x03,0xbb,0xbb,0xb3,0x00,0x00,0xbb,0xbb,0x30,0x0b,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xb3,0x00,0x00,0xbb,0xb0,0x00,0x03,0xbb,0xbb,0x30,0x3b,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xb3,0x0b,0xbb,0xbb,0xb0,0x3b,0xbb,0xbb,0x00,0x00,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x03,0xbb,0xbb,0x00,0x00,0x00,0xbb,0xbb,0x30,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xb3,0x0b,0xbb,0x00,0x00,0x0b,0xbb,0x30,0x00,0x03,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x00,0x00,0x3b,0xbb,0x30,0x0b,0xbb,0xbb,0xb0,0x00,0x0b,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x1b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xb3,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x03,0xbb,0xb3,0x00,0x00,0xbb,0xbb,0x30,0x3b,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x3b,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0xbb,0xbb,0x00,0x00,0x00,0xbb,0xbb,0xb0,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xb3,0x03,0xb3,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0xbb,0xbb,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x30,0x3b,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xbb,0x33,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x30,0x00,0x03,0xbb,0xb3,0x00,0x00,0x3b,0xbb,0x30,0x3b,0xbb,0xb0,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x3b,0xbb,0x30,0x00,0x00,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x3b,0xbb,0x00,0x00,0x00,0xbb,0xb3,0xb3,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x3b,0xb3,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x03,0xbb,0xb3,0x00,0x00,0x00,0x3b,0xbb,0x30,0xbb,0xbb,0x33,0x00,0x00,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xbb,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x00,0x00,0x03,0xbb,0xb3,0x00,0x00,0x0b,0xbb,0x30,0x3b,0xbb,0x30,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x3b,0xbb,0x00,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0xbb,0xbb,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x03,0xbb,0xb0,0x00,0x00,0x00,0xbb,0xbb,0x33,0xbb,0x33,0x00,0x00,0x00,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xb3,0x00,0x00,0x03,0xbb,0x30,0x3b,0xbb,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x3b,0xb3,0x00,0x00,0x00,0x3b,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x0b,0xbb,0x00,0x00,0x00,0xbb,0x00,0xbb,0xbb,0xbb,0x00,0x00,0x00,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x03,0xbb,0x30,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x03,0xbb,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xb3,0x00,0x00,0x03,0xbb,0x30,0x3b,0xb3,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x3b,0xb0,0x00,0x00,0x00,0xb3,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x0b,0xbb,0x00,0x00,0x00,0xb3,0x00,0xbb,0xbb,0xbb,0x00,0x00,0x00,0xb0,0x00,0x33,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x03,0xbb,0x00,0x00,0x00,0x0b,0x3b,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x33,0x00,0x03,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xb3,0x00,0x00,0x03,0xbb,0x30,0x3b,0x30,0x00,0x00,0x03,0x33,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x3b,0x30,0x00,0x00,0x03,0x33,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x0b,0xbb,0x00,0x00,0x00,0xb0,0x00,0xbb,0xbb,0xbb,0x00,0x00,0x00,0xb3,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x03,0xb3,0x00,0x00,0x00,0x33,0x3b,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x3b,0xbb,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xb3,0x00,0x00,0x03,0xbb,0x30,0x3b,0x00,0x00,0x00,0x0b,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x3b,0x00,0x00,0x00,0x3b,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x3b,0xbb,0x00,0x00,0x00,0xb3,0x00,0xbb,0xbb,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x03,0xb0,0x00,0x00,0x03,0xb0,0x3b,0xbb,0x30,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0xbb,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xb3,0x00,0x00,0x03,0xbb,0x30,0x33,0x00,0x00,0x00,0x33,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x33,0x00,0x00,0x00,0x3b,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0xbb,0xbb,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xb3,0x0b,0xb0,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x03,0x30,0x00,0x00,0x03,0xb0,0x3b,0xbb,0x30,0x00,0x00,0x00,0x03,0xbb,0xbb,0xb3,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xb3,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xbb,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x33,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xb3,0xbb,0x30,0x00,0x00,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xb3,0x00,0x00,0x03,0xbb,0x30,0xb0,0x00,0x00,0x00,0xb3,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb3,0x30,0x00,0x00,0x03,0xbb,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x3b,0xbb,0x00,0x00,0x00,0xbb,0xb3,0xb3,0xbb,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xb3,0x03,0xb3,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x33,0x00,0x00,0x00,0x3b,0xb0,0x3b,0xbb,0x30,0x00,0x00,0x33,0xbb,0xb3,0x3b,0xb0,0x3b,0xb3,0x00,0x00,0x03,0xbb,0x30,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xbb,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x03,0xb3,0x0b,0xb3,0x00,0x00,0x03,0xbb,0x30,0x3b,0x30,0x00,0x00,0x3b,0xbb,0x00,0x00,0x03,0xbb,0xb3,0x00,0x00,0x0b,0xbb,0x33,0x30,0x00,0x00,0x03,0xb3,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x0b,0xbb,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0xbb,0xbb,0x00,0x00,0x00,0xbb,0xbb,0x30,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x03,0xbb,0xbb,0xb0,0x03,0xb3,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0xbb,0xbb,0xb0,0x00,0x00,0x00,0xbb,0xb0,0x3b,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xb0,0x3b,0xb0,0x0b,0xb3,0x00,0x00,0x03,0xbb,0x00,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xb3,0x03,0xb3,0x0b,0xb3,0x00,0x00,0x03,0xbb,0x30,0x3b,0x30,0x00,0x00,0x3b,0xbb,0x30,0x00,0x03,0xbb,0xb3,0x00,0x00,0x3b,0xbb,0xbb,0x00,0x00,0x00,0x0b,0xb3,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x10,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x3b,0xbb,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x03,0xbb,0xbb,0x00,0x00,0x00,0xbb,0xbb,0x30,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0x30,0x03,0xbb,0x00,0x00,0x0b,0xbb,0x30,0x00,0x03,0xbb,0xbb,0x30,0x00,0x00,0x03,0xbb,0xb0,0x3b,0xbb,0x30,0x00,0x3b,0xbb,0xbb,0x30,0x3b,0xb0,0x0b,0xb3,0x00,0x00,0x03,0xbb,0x00,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xbb,0xb0,0x00,0x03,0xbb,0xbb,0xb0,0x03,0xb3,0x03,0xb3,0x00,0x00,0x03,0xbb,0x00,0x3b,0x30,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x03,0xbb,0xb3,0x00,0x00,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x3b,0xb3,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xb3,0x00,0xbb,0xbb,0xb0,0x00,0x00,0x00,0xbb,0xb3,0x00,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x3b,0xbb,0xbb,0x00,0x00,0x00,0xbb,0xb3,0x00,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x03,0xbb,0xb3,0x00,0x03,0xbb,0x30,0x00,0x0b,0xbb,0x30,0x00,0x3b,0xbb,0xbb,0x00,0x00,0x00,0x0b,0xbb,0x30,0x0b,0xbb,0xb0,0x00,0x0b,0xbb,0xb3,0x00,0x3b,0xb0,0x03,0xb3,0x00,0x00,0x03,0xb3,0x00,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xbb,0xb3,0x00,0x00,0xbb,0xbb,0x30,0x03,0xb3,0x00,0xb3,0x00,0x00,0x03,0xb3,0x00,0x3b,0x30,0x00,0x00,0x3b,0xbb,0xb3,0x00,0x00,0xbb,0xb0,0x00,0x03,0xbb,0xbb,0x30,0x00,0x00,0x03,0xbb,0xb3,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x3b,0xbb,0x30,0x00,0x3b,0xb3,0x00,0x00,0x00,0x03,0xbb,0x30,0x00,0x3b,0xb3,0x00,0x00,0x00,0x33,0x00,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x00,0xb3,0x00,0x00,0x3b,0xb3,0x00,0x00,0x00,0xb3,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x3b,0x30,0x00,0x03,0xbb,0xb3,0x00,0x03,0xb3,0x00,0x03,0xbb,0xbb,0x30,0x00,0x00,0x00,0x3b,0xb3,0x00,0x03,0xbb,0xbb,0x00,0x03,0xbb,0x30,0x00,0x3b,0xb0,0x00,0x33,0x00,0x00,0x03,0x30,0x00,0xb3,0x00,0x00,0x00,0x33,0x00,0x00,0x03,0xbb,0xbb,0x30,0x00,0x00,0x03,0xbb,0xb3,0x00,0x03,0xbb,0xbb,0x30,0x00,0x3b,0x33,0x00,0x03,0xb3,0x00,0x33,0x00,0x00,0x03,0xb0,0x00,0x33,0x00,0x00,0x00,0x03,0xbb,0xbb,0x30,0x00,0x3b,0x30,0x00,0x3b,0xbb,0xb3,0x00,0x00,0x00,0x0b,0xbb,0x30,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x03,0xbb,0x30,0x00,0x03,0xb3,0x00,0x00,0x00,0x0b,0xbb,0x30,0x00,0x03,0xb0,0x00,0x00,0x00,0x33,0x03,0x3b,0xbb,0xbb,0x30,0x00,0x00,0x00,0xb0,0x00,0x00,0x3b,0x30,0x00,0x00,0x00,0xb0,0x00,0x33,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x30,0x33,0x03,0x33,0x03,0xbb,0xbb,0xb3,0x00,0x31,0x03,0x3b,0xbb,0xbb,0x30,0x00,0x00,0x00,0xbb,0xb3,0x00,0x00,0x3b,0xbb,0xb3,0x00,0x33,0x00,0x30,0x3b,0xb0,0x00,0x33,0x00,0x00,0x03,0x30,0x00,0xb3,0x00,0x00,0x00,0x33,0x00,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x3b,0xb0,0x00,0x00,0xbb,0xbb,0xbb,0x30,0x03,0x10,0x33,0x03,0xb3,0x00,0x33,0x00,0x00,0x03,0x30,0x00,0x33,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x0b,0x00,0x3b,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x3b,0xbb,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x3b,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,
};
 
MWIMAGEHDR image_under4 = {
462, 23, /* width, height*/
1, 4, /* planes, bpp*/
232, 1, /* pitch, bytesperpixel*/
1, 16, /* compression, palsize*/
-1L, /* transcolor*/
palette,
imagebits,
};
/bmp/tux.gif Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
bmp/tux.gif Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/convbmp.c =================================================================== --- bmp/convbmp.c (nonexistent) +++ bmp/convbmp.c (revision 174) @@ -0,0 +1,508 @@ +/* + * Copyright (c) 1999, 2000 Greg Haerr + * + * Windows BMP to Microwindows image converter + * + * 6/9/1999 g haerr + * + * 05/01/2000 Michael Temari + * Modified to output .s ACK format for Minix + */ + +#include +#include +#include +#include "device.h" + +/* separators for DOS & Unix file systems */ +#define OS_FILE_SEPARATOR "/\\" + +#define PIX2BYTES(n) (((n)+7)/8) + +#define BI_RGB 0L +#define BI_RLE8 1L +#define BI_RLE4 2L +#define BI_BITFIELDS 3L + +typedef unsigned char UCHAR; +typedef unsigned char BYTE; + +#if !_MINIX +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef long LONG; +#define CASTWORD +#define CASTDWORD +#define CASTLONG +#else +/* The Minix ACK compiler cannot pack a structure so we do it the hardway */ +typedef unsigned char WORD[2]; +typedef unsigned char DWORD[4]; +typedef unsigned char LONG[4]; +#define CASTWORD *(unsigned short *)& +#define CASTDWORD *(unsigned long *)& +#define CASTLONG *(long *)& +#endif + +#pragma pack(1) +/* windows style*/ +typedef struct { + /* BITMAPFILEHEADER*/ + BYTE bfType[2]; + DWORD bfSize; + WORD bfReserved1; + WORD bfReserved2; + DWORD bfOffBits; + /* BITMAPINFOHEADER*/ + DWORD BiSize; + LONG BiWidth; + LONG BiHeight; + WORD BiPlanes; + WORD BiBitCount; + DWORD BiCompression; + DWORD BiSizeImage; + LONG BiXpelsPerMeter; + LONG BiYpelsPerMeter; + DWORD BiClrUsed; + DWORD BiClrImportant; +} BMPHEAD; + +/* os/2 style*/ +typedef struct { + /* BITMAPFILEHEADER*/ + BYTE bfType[2]; + DWORD bfSize; + WORD bfReserved1; + WORD bfReserved2; + DWORD bfOffBits; + /* BITMAPCOREHEADER*/ + DWORD bcSize; + WORD bcWidth; + WORD bcHeight; + WORD bcPlanes; + WORD bcBitCount; +} BMPCOREHEAD; +#pragma pack() + +int ConvBMP(FILE *fp,char *name); +void outline(UCHAR *linebuffer, int bitdepth, int linesize, int y); +int DecodeRLE8(UCHAR *buf,FILE *fp); +int DecodeRLE4(UCHAR *buf,FILE *fp); +void put4(int b); + +int s_flag = 0; + +int main(int argc,char *argv[]) +{ +FILE *fp; +char *p; +char name[64]; +char oname[64]; + + /* skip the program name */ + argc--; + argv++; + + /* check for -s flag */ + if(argc && strcmp(*argv, "-s") == 0) { + s_flag = -1; + argc--; + argv++; + } + + /* need at least one file to convert */ + if(argc == 0) { + fprintf(stderr, "Usage: convbmp [-s] \n"); + return(-1); + } + + /* go back one since the first thing in the loop is to increment */ + argv--; + while(argc--) { + argv++; + if((p = strrchr(*argv, '.')) != (char *)NULL) + *p = '\0'; + strcpy(name, *argv); + strcpy(oname, *argv); + if(s_flag) + strcat(oname, ".s"); + else + strcat(oname, ".c"); + if(p != (char *)NULL) + *p = '.'; + if((fp = fopen(*argv, "rb")) == (FILE *)NULL) { + fprintf(stderr, "Can't open file: %s\n", *argv); + continue; + } + if(freopen(oname, "w", stdout) == (FILE *)NULL) { + fclose(fp); + fprintf(stderr, "Could not open output file %s\n", oname); + continue; + } + + /* + let's strip any directory from the path passed in. + This prevent problems if this utility is given + path is not for the curent directory. + */ + p = name; + while( 1 ) + { + char *p1 = p; + p1 = strpbrk( p, OS_FILE_SEPARATOR ); + if( p1 ) + { + p = p1+1; + } + else + { + break; + } + } + if(ConvBMP(fp, p)) { + fprintf(stderr, "Conversion failed: %s\n", *argv); + fclose(fp); + continue; + } + fclose(fp); + } + return(0); +} + +/* decode a bmp file*/ +int ConvBMP(FILE *fp, char *name) +{ +BMPHEAD bmp; +BMPCOREHEAD *bmc; +int i, palsize; +UCHAR *linebuffer = NULL; +unsigned int cx, cy, bitdepth, linesize; +long compression; +MWPALENTRY cmap[256]; +long l; +int g; +int bytesperpixel; +UCHAR *p = (UCHAR *)&l; + + /* read BMP header*/ + if(fread(&bmp, 1, sizeof(BMPHEAD), fp) != sizeof(BMPHEAD)) { + fprintf(stderr, "Error reading .bmp file header\n"); + return(-1); + } + + /* might be windows or os/2 header*/ + if(CASTDWORD bmp.BiSize == 12) { + bmc = (BMPCOREHEAD *)&bmp; + cx = (int)CASTWORD bmc->bcWidth; + cy = (int)CASTWORD bmc->bcHeight; + bitdepth = CASTWORD bmc->bcBitCount; + palsize = 1 << bitdepth; + compression = BI_RGB; + fseek(fp, sizeof(BMPCOREHEAD), SEEK_SET); + } else { + cx = (int)CASTLONG bmp.BiWidth; + cy = (int)CASTLONG bmp.BiHeight; + bitdepth = CASTWORD bmp.BiBitCount; + palsize = (int)CASTDWORD bmp.BiClrUsed; + if(palsize == 0) + palsize = 1 << bitdepth; + compression = CASTDWORD bmp.BiCompression; + } + + if(bitdepth > 8) + palsize = 0; + + /* currently only 1, 4, 8 and 24 bpp bitmaps*/ + if(bitdepth > 8 && bitdepth != 24) { + fprintf(stderr, "Error: bits per pixel must be 1, 4, 8 or 24\n"); + return(-1); + } + + /* compute image line size and allocate line buffer*/ + if(bitdepth == 1) { + linesize = PIX2BYTES(cx); + bytesperpixel = 1; + } else if(bitdepth <= 4) { + linesize = PIX2BYTES(cx<<2); + bytesperpixel = 1; + } else if(bitdepth <= 8) { + linesize = cx; + bytesperpixel = 1; + } else if(bitdepth <= 16) { + linesize = cx * 2; + bytesperpixel = 2; + } else if(bitdepth <= 24) { + linesize = cx * 3; + bytesperpixel = 3; + } else { + linesize = cx * 4; + bytesperpixel = 4; + } + + linesize = (linesize+3) & ~3; + + if((linebuffer = malloc(linesize)) == (UCHAR *)NULL) { + fprintf(stderr, "Error with malloc(%d)\n", linesize); + return(-1); + } + + if(!s_flag) { + printf("/* Generated by convbmp*/\n"); + printf("#include \"device.h\"\n\n"); + printf("/* MWIMAGEHDR image_%s converted from %s.bmp*/\n\n", + name, name); + } + + /* get colormap*/ + if(bitdepth <= 8) { + for(i=0; i= 0; i--) { + if(!DecodeRLE8(linebuffer, fp)) + break; + outline(linebuffer, bitdepth, linesize, i); + } + } else if(compression == BI_RLE4) { + for(i = cy-1; i>= 0; i--) { + if(!DecodeRLE4(linebuffer, fp)) + break; + outline(linebuffer, bitdepth, linesize, i); + } + } else { + for(i=0; i> 4) & 0x0f); + c1 <<= 4; + } + continue; + } + default: + c = fgetc(fp); + c1 = (c >> 4) & 0x0f; + c2 = c & 0x0f; + for(c=0; c
bmp/zion208.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/stdpal4.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/stdpal4.bmp =================================================================== --- bmp/stdpal4.bmp (nonexistent) +++ bmp/stdpal4.bmp (revision 174)
bmp/stdpal4.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/zion208.c =================================================================== --- bmp/zion208.c (nonexistent) +++ bmp/zion208.c (revision 174) @@ -0,0 +1,476 @@ +/* Generated by convbmp*/ +#include "device.h" + +/* MWIMAGEHDR image_zion208 converted from zion208.bmp*/ + +static MWPALENTRY palette[256] = { + RGBDEF( 8, 8, 16 ), /* pal 0*/ + RGBDEF( 16, 16, 24 ), /* pal 1*/ + RGBDEF( 24, 16, 24 ), /* pal 2*/ + RGBDEF( 74, 16, 24 ), /* pal 3*/ + RGBDEF( 90, 16, 24 ), /* pal 4*/ + RGBDEF( 33, 33, 33 ), /* pal 5*/ + RGBDEF( 41, 24, 33 ), /* pal 6*/ + RGBDEF( 41, 33, 33 ), /* pal 7*/ + RGBDEF( 74, 33, 33 ), /* pal 8*/ + RGBDEF( 24, 24, 41 ), /* pal 9*/ + RGBDEF( 41, 33, 41 ), /* pal 10*/ + RGBDEF( 49, 33, 41 ), /* pal 11*/ + RGBDEF( 49, 49, 41 ), /* pal 12*/ + RGBDEF( 57, 41, 41 ), /* pal 13*/ + RGBDEF( 57, 49, 41 ), /* pal 14*/ + RGBDEF( 74, 41, 41 ), /* pal 15*/ + RGBDEF( 74, 49, 41 ), /* pal 16*/ + RGBDEF( 90, 49, 41 ), /* pal 17*/ + RGBDEF( 107, 49, 41 ), /* pal 18*/ + RGBDEF( 115, 41, 41 ), /* pal 19*/ + RGBDEF( 123, 57, 41 ), /* pal 20*/ + RGBDEF( 57, 49, 49 ), /* pal 21*/ + RGBDEF( 90, 66, 49 ), /* pal 22*/ + RGBDEF( 99, 82, 49 ), /* pal 23*/ + RGBDEF( 115, 66, 49 ), /* pal 24*/ + RGBDEF( 33, 41, 57 ), /* pal 25*/ + RGBDEF( 49, 41, 57 ), /* pal 26*/ + RGBDEF( 49, 49, 57 ), /* pal 27*/ + RGBDEF( 57, 66, 57 ), /* pal 28*/ + RGBDEF( 82, 57, 57 ), /* pal 29*/ + RGBDEF( 90, 66, 57 ), /* pal 30*/ + RGBDEF( 107, 66, 57 ), /* pal 31*/ + RGBDEF( 107, 82, 57 ), /* pal 32*/ + RGBDEF( 123, 74, 57 ), /* pal 33*/ + RGBDEF( 123, 82, 57 ), /* pal 34*/ + RGBDEF( 74, 82, 66 ), /* pal 35*/ + RGBDEF( 99, 82, 66 ), /* pal 36*/ + RGBDEF( 123, 99, 66 ), /* pal 37*/ + RGBDEF( 41, 57, 74 ), /* pal 38*/ + RGBDEF( 57, 49, 74 ), /* pal 39*/ + RGBDEF( 57, 66, 74 ), /* pal 40*/ + RGBDEF( 66, 82, 74 ), /* pal 41*/ + RGBDEF( 90, 66, 74 ), /* pal 42*/ + RGBDEF( 107, 90, 74 ), /* pal 43*/ + RGBDEF( 115, 74, 74 ), /* pal 44*/ + RGBDEF( 115, 99, 74 ), /* pal 45*/ + RGBDEF( 123, 90, 74 ), /* pal 46*/ + RGBDEF( 132, 99, 74 ), /* pal 47*/ + RGBDEF( 132, 115, 74 ), /* pal 48*/ + RGBDEF( 90, 82, 82 ), /* pal 49*/ + RGBDEF( 99, 99, 82 ), /* pal 50*/ + RGBDEF( 41, 66, 90 ), /* pal 51*/ + RGBDEF( 33, 82, 148 ), /* pal 52*/ + RGBDEF( 49, 66, 115 ), /* pal 53*/ + RGBDEF( 49, 66, 123 ), /* pal 54*/ + RGBDEF( 49, 82, 140 ), /* pal 55*/ + RGBDEF( 49, 90, 156 ), /* pal 56*/ + RGBDEF( 57, 82, 107 ), /* pal 57*/ + RGBDEF( 57, 82, 132 ), /* pal 58*/ + RGBDEF( 66, 66, 90 ), /* pal 59*/ + RGBDEF( 66, 74, 90 ), /* pal 60*/ + RGBDEF( 66, 82, 148 ), /* pal 61*/ + RGBDEF( 66, 99, 132 ), /* pal 62*/ + RGBDEF( 66, 99, 148 ), /* pal 63*/ + RGBDEF( 74, 82, 90 ), /* pal 64*/ + RGBDEF( 79, 98, 109 ), /* pal 65*/ + RGBDEF( 107, 90, 107 ), /* pal 66*/ + RGBDEF( 103, 107, 107 ), /* pal 67*/ + RGBDEF( 123, 107, 94 ), /* pal 68*/ + RGBDEF( 115, 107, 123 ), /* pal 69*/ + RGBDEF( 127, 115, 107 ), /* pal 70*/ + RGBDEF( 74, 99, 132 ), /* pal 71*/ + RGBDEF( 82, 107, 132 ), /* pal 72*/ + RGBDEF( 90, 123, 132 ), /* pal 73*/ + RGBDEF( 115, 132, 132 ), /* pal 74*/ + RGBDEF( 107, 123, 148 ), /* pal 75*/ + RGBDEF( 74, 123, 156 ), /* pal 76*/ + RGBDEF( 99, 107, 156 ), /* pal 77*/ + RGBDEF( 123, 140, 156 ), /* pal 78*/ + RGBDEF( 99, 123, 165 ), /* pal 79*/ + RGBDEF( 49, 90, 173 ), /* pal 80*/ + RGBDEF( 57, 99, 173 ), /* pal 81*/ + RGBDEF( 66, 107, 173 ), /* pal 82*/ + RGBDEF( 49, 90, 181 ), /* pal 83*/ + RGBDEF( 66, 107, 181 ), /* pal 84*/ + RGBDEF( 66, 115, 181 ), /* pal 85*/ + RGBDEF( 90, 115, 181 ), /* pal 86*/ + RGBDEF( 107, 140, 181 ), /* pal 87*/ + RGBDEF( 66, 107, 189 ), /* pal 88*/ + RGBDEF( 74, 115, 189 ), /* pal 89*/ + RGBDEF( 74, 123, 198 ), /* pal 90*/ + RGBDEF( 90, 132, 198 ), /* pal 91*/ + RGBDEF( 99, 140, 198 ), /* pal 92*/ + RGBDEF( 115, 148, 198 ), /* pal 93*/ + RGBDEF( 123, 115, 198 ), /* pal 94*/ + RGBDEF( 82, 132, 206 ), /* pal 95*/ + RGBDEF( 99, 148, 206 ), /* pal 96*/ + RGBDEF( 115, 148, 206 ), /* pal 97*/ + RGBDEF( 115, 156, 206 ), /* pal 98*/ + RGBDEF( 57, 107, 214 ), /* pal 99*/ + RGBDEF( 74, 132, 214 ), /* pal 100*/ + RGBDEF( 107, 148, 214 ), /* pal 101*/ + RGBDEF( 99, 148, 222 ), /* pal 102*/ + RGBDEF( 115, 165, 222 ), /* pal 103*/ + RGBDEF( 140, 41, 24 ), /* pal 104*/ + RGBDEF( 140, 49, 41 ), /* pal 105*/ + RGBDEF( 140, 99, 66 ), /* pal 106*/ + RGBDEF( 148, 66, 33 ), /* pal 107*/ + RGBDEF( 148, 66, 49 ), /* pal 108*/ + RGBDEF( 148, 74, 57 ), /* pal 109*/ + RGBDEF( 148, 90, 57 ), /* pal 110*/ + RGBDEF( 156, 82, 57 ), /* pal 111*/ + RGBDEF( 165, 49, 41 ), /* pal 112*/ + RGBDEF( 165, 66, 49 ), /* pal 113*/ + RGBDEF( 165, 90, 57 ), /* pal 114*/ + RGBDEF( 189, 71, 55 ), /* pal 115*/ + RGBDEF( 165, 99, 66 ), /* pal 116*/ + RGBDEF( 148, 115, 74 ), /* pal 117*/ + RGBDEF( 165, 82, 74 ), /* pal 118*/ + RGBDEF( 165, 115, 74 ), /* pal 119*/ + RGBDEF( 156, 111, 82 ), /* pal 120*/ + RGBDEF( 152, 111, 115 ), /* pal 121*/ + RGBDEF( 181, 99, 66 ), /* pal 122*/ + RGBDEF( 181, 115, 74 ), /* pal 123*/ + RGBDEF( 181, 115, 82 ), /* pal 124*/ + RGBDEF( 198, 103, 70 ), /* pal 125*/ + RGBDEF( 198, 123, 74 ), /* pal 126*/ + RGBDEF( 219, 109, 71 ), /* pal 127*/ + RGBDEF( 231, 123, 74 ), /* pal 128*/ + RGBDEF( 145, 134, 87 ), /* pal 129*/ + RGBDEF( 162, 140, 98 ), /* pal 130*/ + RGBDEF( 151, 138, 130 ), /* pal 131*/ + RGBDEF( 181, 123, 82 ), /* pal 132*/ + RGBDEF( 189, 140, 90 ), /* pal 133*/ + RGBDEF( 178, 140, 126 ), /* pal 134*/ + RGBDEF( 189, 156, 82 ), /* pal 135*/ + RGBDEF( 198, 132, 82 ), /* pal 136*/ + RGBDEF( 198, 140, 82 ), /* pal 137*/ + RGBDEF( 214, 140, 82 ), /* pal 138*/ + RGBDEF( 198, 156, 90 ), /* pal 139*/ + RGBDEF( 214, 132, 90 ), /* pal 140*/ + RGBDEF( 201, 155, 112 ), /* pal 141*/ + RGBDEF( 239, 131, 82 ), /* pal 142*/ + RGBDEF( 247, 148, 82 ), /* pal 143*/ + RGBDEF( 231, 148, 90 ), /* pal 144*/ + RGBDEF( 247, 152, 90 ), /* pal 145*/ + RGBDEF( 255, 165, 90 ), /* pal 146*/ + RGBDEF( 232, 156, 109 ), /* pal 147*/ + RGBDEF( 251, 169, 115 ), /* pal 148*/ + RGBDEF( 214, 173, 115 ), /* pal 149*/ + RGBDEF( 247, 178, 101 ), /* pal 150*/ + RGBDEF( 239, 181, 123 ), /* pal 151*/ + RGBDEF( 240, 193, 113 ), /* pal 152*/ + RGBDEF( 255, 198, 123 ), /* pal 153*/ + RGBDEF( 255, 214, 132 ), /* pal 154*/ + RGBDEF( 132, 156, 181 ), /* pal 155*/ + RGBDEF( 132, 173, 206 ), /* pal 156*/ + RGBDEF( 140, 123, 148 ), /* pal 157*/ + RGBDEF( 140, 165, 165 ), /* pal 158*/ + RGBDEF( 140, 173, 198 ), /* pal 159*/ + RGBDEF( 140, 173, 222 ), /* pal 160*/ + RGBDEF( 140, 181, 231 ), /* pal 161*/ + RGBDEF( 148, 181, 222 ), /* pal 162*/ + RGBDEF( 148, 189, 247 ), /* pal 163*/ + RGBDEF( 156, 156, 165 ), /* pal 164*/ + RGBDEF( 156, 165, 165 ), /* pal 165*/ + RGBDEF( 156, 165, 189 ), /* pal 166*/ + RGBDEF( 156, 173, 198 ), /* pal 167*/ + RGBDEF( 156, 189, 222 ), /* pal 168*/ + RGBDEF( 156, 189, 231 ), /* pal 169*/ + RGBDEF( 165, 198, 198 ), /* pal 170*/ + RGBDEF( 165, 198, 222 ), /* pal 171*/ + RGBDEF( 165, 206, 173 ), /* pal 172*/ + RGBDEF( 173, 198, 239 ), /* pal 173*/ + RGBDEF( 173, 206, 247 ), /* pal 174*/ + RGBDEF( 181, 181, 198 ), /* pal 175*/ + RGBDEF( 181, 198, 189 ), /* pal 176*/ + RGBDEF( 181, 198, 239 ), /* pal 177*/ + RGBDEF( 181, 206, 206 ), /* pal 178*/ + RGBDEF( 181, 206, 231 ), /* pal 179*/ + RGBDEF( 189, 173, 148 ), /* pal 180*/ + RGBDEF( 206, 181, 140 ), /* pal 181*/ + RGBDEF( 231, 173, 140 ), /* pal 182*/ + RGBDEF( 247, 198, 140 ), /* pal 183*/ + RGBDEF( 255, 206, 140 ), /* pal 184*/ + RGBDEF( 231, 198, 148 ), /* pal 185*/ + RGBDEF( 255, 222, 148 ), /* pal 186*/ + RGBDEF( 198, 185, 156 ), /* pal 187*/ + RGBDEF( 210, 185, 172 ), /* pal 188*/ + RGBDEF( 222, 181, 189 ), /* pal 189*/ + RGBDEF( 189, 198, 198 ), /* pal 190*/ + RGBDEF( 238, 198, 165 ), /* pal 191*/ + RGBDEF( 222, 206, 201 ), /* pal 192*/ + RGBDEF( 247, 239, 181 ), /* pal 193*/ + RGBDEF( 189, 198, 222 ), /* pal 194*/ + RGBDEF( 198, 214, 222 ), /* pal 195*/ + RGBDEF( 206, 214, 222 ), /* pal 196*/ + RGBDEF( 255, 247, 222 ), /* pal 197*/ + RGBDEF( 198, 214, 231 ), /* pal 198*/ + RGBDEF( 206, 214, 239 ), /* pal 199*/ + RGBDEF( 214, 222, 239 ), /* pal 200*/ + RGBDEF( 231, 231, 239 ), /* pal 201*/ + RGBDEF( 198, 214, 247 ), /* pal 202*/ + RGBDEF( 198, 222, 247 ), /* pal 203*/ + RGBDEF( 214, 231, 247 ), /* pal 204*/ + RGBDEF( 231, 239, 255 ), /* pal 205*/ + RGBDEF( 247, 247, 255 ), /* pal 206*/ + RGBDEF( 0, 0, 0 ), /* pal 207*/ + RGBDEF( 0, 0, 0 ), /* pal 208*/ + RGBDEF( 0, 0, 0 ), /* pal 209*/ + RGBDEF( 0, 0, 0 ), /* pal 210*/ + RGBDEF( 0, 0, 0 ), /* pal 211*/ + RGBDEF( 0, 0, 0 ), /* pal 212*/ + RGBDEF( 0, 0, 0 ), /* pal 213*/ + RGBDEF( 0, 0, 0 ), /* pal 214*/ + RGBDEF( 0, 0, 0 ), /* pal 215*/ + RGBDEF( 0, 0, 0 ), /* pal 216*/ + RGBDEF( 0, 0, 0 ), /* pal 217*/ + RGBDEF( 0, 0, 0 ), /* pal 218*/ + RGBDEF( 0, 0, 0 ), /* pal 219*/ + RGBDEF( 0, 0, 0 ), /* pal 220*/ + RGBDEF( 0, 0, 0 ), /* pal 221*/ + RGBDEF( 0, 0, 0 ), /* pal 222*/ + RGBDEF( 0, 0, 0 ), /* pal 223*/ + RGBDEF( 0, 0, 0 ), /* pal 224*/ + RGBDEF( 0, 0, 0 ), /* pal 225*/ + RGBDEF( 0, 0, 0 ), /* pal 226*/ + RGBDEF( 0, 0, 0 ), /* pal 227*/ + RGBDEF( 0, 0, 0 ), /* pal 228*/ + RGBDEF( 0, 0, 0 ), /* pal 229*/ + RGBDEF( 0, 0, 0 ), /* pal 230*/ + RGBDEF( 0, 0, 0 ), /* pal 231*/ + RGBDEF( 0, 0, 0 ), /* pal 232*/ + RGBDEF( 0, 0, 0 ), /* pal 233*/ + RGBDEF( 0, 0, 0 ), /* pal 234*/ + RGBDEF( 0, 0, 0 ), /* pal 235*/ + RGBDEF( 0, 0, 0 ), /* pal 236*/ + RGBDEF( 0, 0, 0 ), /* pal 237*/ + RGBDEF( 0, 0, 0 ), /* pal 238*/ + RGBDEF( 0, 0, 0 ), /* pal 239*/ + RGBDEF( 0, 0, 0 ), /* pal 240*/ + RGBDEF( 0, 0, 0 ), /* pal 241*/ + RGBDEF( 0, 0, 0 ), /* pal 242*/ + RGBDEF( 0, 0, 0 ), /* pal 243*/ + RGBDEF( 0, 0, 0 ), /* pal 244*/ + RGBDEF( 0, 0, 0 ), /* pal 245*/ + RGBDEF( 0, 0, 0 ), /* pal 246*/ + RGBDEF( 0, 0, 0 ), /* pal 247*/ + RGBDEF( 0, 0, 0 ), /* pal 248*/ + RGBDEF( 0, 0, 0 ), /* pal 249*/ + RGBDEF( 0, 0, 0 ), /* pal 250*/ + RGBDEF( 0, 0, 0 ), /* pal 251*/ + RGBDEF( 0, 0, 0 ), /* pal 252*/ + RGBDEF( 0, 0, 0 ), /* pal 253*/ + RGBDEF( 0, 0, 0 ), /* pal 254*/ + RGBDEF( 0, 0, 0 ), /* pal 255*/ +}; + +static MWUCHAR imagebits[] = { +5,5,13,12,22,11,5,2,2,2,5,2,2,2,1,2,5,2,13,7,11,5,2,2,2,5,2,5,2,1,1,1,1,2,5,2,2,2,2,9,1,1,2,14,1,1,1,1,0,1,1,1,0,2,2,2,2,2,1,1,1,0,1,0,1,0,1,0,0,2,0,2,1,0,1,1,1,1,1,1,1,2,0,0,2,0,2,1,0,2,0,1,7,13,0,1,0,2,1,0,1,1,1,1,0,1,2,2,1,2,2,2,1,1,1,1,2,2,1,0,1,5,1,2,1,2,2,1,1,2,16,13,2,2,2,2,2,1,1,1,1,1,0,2,0,2,1,1,1,14,22,133,30,29,11,5,7,6,7,7,15,16,15,13,13,0,2,6,1,14,23,17,16,16,16,30,34,6,34,18,47,13,2,7,5,13,1,2,2,1,2,5,2,1,2,1,1,1,2,1,0,1,1,2,0,1,2,2,1,2,5,1,2,0,2,0,1,1,0,2,1,2,2,5,1,1,1,1,1,1,1,2,5,2,1,1,0,2,1,1,1,1,1,2,6,2,1,2,13,2,1,2,2,2,5,1,6,7,6,2,7,6,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,1,2,2,2,11,2,10,12,2,2,2,5,2,2,2,10,1,1,2,1,2,2,1,1,1,5,2,5,2,1,2,2,9,5,2,2, +13,2,14,21,13,7,2,2,6,7,12,5,5,6,1,2,2,5,7,11,2,2,1,5,2,11,2,2,2,1,1,2,1,1,2,5,2,5,2,1,2,1,2,2,1,1,1,0,2,1,1,1,1,0,2,0,1,0,2,1,1,0,2,1,1,1,1,1,1,1,1,0,1,1,1,2,1,2,2,1,0,0,1,1,1,2,1,0,1,1,2,2,2,1,1,5,2,1,0,1,1,2,7,7,6,1,2,5,2,2,5,2,1,1,1,0,2,2,1,1,1,1,1,1,1,2,5,1,1,0,7,7,1,2,22,7,22,6,1,2,1,2,1,0,1,1,2,2,2,23,14,20,14,7,7,13,7,7,5,2,13,34,13,6,0,2,1,5,5,13,14,16,14,13,24,31,11,23,17,22,13,13,2,6,5,2,2,1,1,1,2,2,2,2,1,1,1,2,1,1,6,1,1,0,1,2,1,2,6,2,2,1,2,2,1,0,2,0,2,0,2,1,1,2,1,1,1,1,1,2,1,1,2,2,1,1,1,0,1,1,1,1,2,6,6,1,2,2,7,2,2,2,1,5,2,2,6,6,6,6,2,2,6,6,7,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,1,2,5,6,6,6,6,2,2,6,2,2,2,5,6,2,1,1,1,1,2,1,2,5,1,2,9,11,5,2,5,9,12,2,9,0, +2,2,6,2,5,13,2,5,5,7,2,2,2,2,2,2,5,2,5,1,1,1,1,1,1,5,1,1,1,2,2,5,1,1,1,2,2,2,2,1,1,1,1,0,1,1,0,2,1,1,1,0,1,1,1,0,2,1,0,2,0,2,0,1,2,1,2,1,1,1,1,1,1,1,2,5,14,2,1,1,1,1,1,1,1,0,2,1,1,0,1,0,2,1,0,2,1,1,1,1,2,6,2,1,2,5,2,2,5,2,2,1,1,2,1,0,1,2,1,2,1,2,1,1,1,2,7,1,5,2,1,2,2,6,2,1,2,11,2,6,1,1,1,1,1,0,1,1,1,1,1,1,2,6,2,13,7,7,2,23,13,21,2,1,2,13,2,7,5,2,6,1,2,13,23,17,16,29,14,14,29,1,7,2,6,1,2,1,1,2,2,5,2,1,1,1,1,2,5,5,2,2,1,1,1,1,1,2,2,2,1,2,2,2,0,2,0,2,0,2,0,2,1,2,1,1,1,1,1,1,1,1,2,6,0,1,1,1,1,1,1,1,1,2,7,6,1,2,5,2,6,2,2,2,2,11,6,7,6,2,2,5,6,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,2,12,5,11,10,7,6,2,2,7,12,1,11,2,1,1,1,1,1,1,1,1,1,2,5,26,6,1,9,9,2,25,2,1, +13,11,2,2,2,5,6,5,7,7,6,2,2,2,5,2,2,2,2,5,2,5,2,2,2,2,5,2,2,1,1,1,2,5,1,2,6,2,1,2,1,1,1,1,0,2,1,0,1,0,2,1,1,1,1,1,1,0,1,0,1,1,1,1,2,1,2,2,2,2,5,1,1,2,0,1,1,1,1,1,1,1,2,2,1,1,0,2,1,1,1,1,0,1,1,1,2,1,2,1,5,2,2,5,1,2,5,2,2,2,2,1,1,0,0,2,1,2,2,5,2,2,1,0,1,7,7,2,7,2,5,1,1,1,2,2,14,22,16,6,2,2,2,2,1,1,1,1,0,2,2,6,1,2,2,16,11,2,2,2,1,2,1,1,2,13,2,5,5,7,2,5,2,14,14,14,14,7,13,7,2,2,106,16,2,2,5,2,1,2,2,2,1,1,1,1,2,2,2,5,2,6,1,1,1,0,1,1,2,5,1,2,1,1,0,2,0,2,0,2,0,1,1,1,1,1,1,1,2,1,1,1,2,2,1,1,1,2,1,1,1,1,6,1,6,2,2,1,1,2,5,1,2,5,1,11,2,11,6,2,2,2,2,7,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,1,2,2,10,11,10,10,13,11,2,2,2,6,2,9,11,1,1,1,1,1,1,1,1,2,2,5,2,5,1,2,2,2,2,5,2, +21,21,13,2,11,7,11,7,14,13,7,13,5,2,2,5,2,5,16,2,2,1,1,5,2,2,2,6,1,1,1,1,2,2,5,2,2,2,1,2,2,0,1,1,1,1,0,2,1,1,0,2,2,1,1,1,0,2,1,1,1,1,1,5,1,2,2,1,1,2,2,2,1,1,2,0,2,0,2,2,1,2,2,2,1,1,1,0,2,2,1,1,1,1,2,5,2,2,5,0,1,2,5,0,1,1,2,2,2,1,1,1,0,2,1,1,0,2,1,1,1,1,1,1,1,2,5,5,7,7,2,6,1,6,7,6,117,114,18,14,13,2,7,6,6,0,2,1,7,6,2,2,7,6,8,24,32,7,6,5,7,6,1,0,2,32,13,2,6,14,2,2,13,1,2,7,13,1,2,2,1,2,114,122,2,1,2,2,1,2,1,1,1,1,2,1,2,2,6,1,2,2,1,1,1,1,1,1,2,2,1,1,1,1,2,0,2,0,1,1,1,2,2,1,1,1,1,1,1,1,1,1,5,2,1,1,1,1,1,1,1,2,2,7,6,2,1,1,1,1,2,2,2,2,5,2,2,11,7,7,6,6,2,5,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,1,2,10,11,6,2,10,10,2,11,1,2,2,2,7,6,1,1,1,1,1,1,1,1,1,5,26,11,2,1,5,5,10,10,10,1, +22,13,13,11,13,13,11,5,13,1,2,1,2,5,2,5,1,11,2,2,1,1,2,1,1,5,2,2,5,2,1,5,13,2,2,5,1,1,1,1,1,1,1,1,0,2,1,0,2,1,1,0,2,1,1,0,2,0,2,1,0,2,1,2,2,5,1,1,2,1,2,1,1,2,1,1,0,2,0,0,2,2,2,1,1,0,1,1,1,2,2,1,2,1,2,1,2,6,2,1,2,5,2,5,1,0,2,0,1,1,0,2,1,0,2,1,1,2,2,2,2,1,1,1,2,2,1,1,1,1,1,2,13,1,2,2,7,7,11,6,13,1,2,2,2,1,1,2,24,17,2,5,2,2,119,106,132,17,2,14,22,16,16,119,14,14,6,23,16,16,13,7,2,2,6,1,2,6,16,16,17,119,116,122,1,5,2,1,1,1,1,1,1,0,1,1,2,5,2,2,1,1,1,1,2,1,1,1,1,1,5,0,1,1,1,2,0,1,1,1,1,1,2,1,1,2,1,6,1,1,2,1,2,5,0,2,1,1,1,1,1,1,1,2,7,2,1,1,1,2,1,2,5,2,2,2,11,7,2,2,2,2,6,13,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,5,2,5,12,6,11,2,10,2,5,2,6,2,2,2,1,2,1,1,1,1,5,1,2,2,10,2,2,2,10,10,12,5,9,2, +13,13,2,13,14,26,7,2,2,2,6,1,2,2,1,2,13,7,2,2,5,1,1,1,2,2,5,2,5,5,2,2,2,2,2,2,2,1,1,1,1,0,1,0,1,1,0,2,0,2,1,1,0,2,1,0,2,1,0,1,1,2,1,2,5,0,1,1,1,2,0,0,2,1,0,1,1,0,2,1,1,2,0,1,1,0,2,1,2,1,0,2,1,1,1,2,5,2,2,2,2,2,7,2,2,2,2,0,1,0,2,0,2,1,0,0,2,2,5,2,5,1,1,1,5,2,1,2,2,1,1,2,7,6,2,5,2,6,5,2,5,7,14,6,6,0,2,5,14,20,1,2,2,7,24,152,16,12,2,7,7,14,13,14,7,7,14,13,13,2,2,6,1,6,0,16,30,33,29,18,24,137,16,2,1,2,2,1,1,1,1,0,1,1,1,1,1,2,1,1,1,1,1,0,1,1,1,1,2,1,2,2,0,1,1,2,1,1,1,1,2,1,6,1,2,1,1,1,1,2,6,1,2,2,1,0,1,1,1,1,1,1,1,6,6,1,1,1,1,1,2,1,2,1,5,2,11,6,6,5,2,2,11,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,7,10,11,2,2,1,2,2,2,11,2,2,1,1,2,1,1,1,2,1,5,9,1,6,25,5,9,5,9,5,1, +2,5,7,13,2,5,2,5,11,2,2,6,2,2,2,2,2,13,1,2,1,1,2,1,1,1,2,2,2,6,2,2,1,1,0,0,2,1,0,1,1,1,1,1,1,1,1,0,2,0,2,1,1,0,2,1,0,1,1,1,1,2,1,2,2,1,1,0,1,0,2,1,1,1,1,2,1,1,0,2,0,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,2,5,2,1,2,2,2,1,2,0,1,1,1,0,2,0,1,0,2,1,0,2,2,1,2,2,1,1,2,1,2,1,2,1,2,6,1,6,2,2,2,7,6,2,5,6,2,6,1,2,1,1,2,2,6,1,7,117,154,123,5,5,5,13,1,1,2,2,5,6,7,2,2,2,5,2,2,2,7,24,22,24,32,22,24,7,1,2,5,2,1,1,0,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,2,1,1,2,1,2,0,2,0,1,1,0,2,1,1,5,2,1,5,1,2,1,1,1,1,1,2,6,0,1,1,1,1,1,1,1,2,2,7,2,1,2,1,5,2,2,5,2,2,2,11,6,2,2,6,5,13,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,12,2,2,5,2,2,2,1,11,2,2,11,1,1,2,1,1,1,1,1,1,1,2,5,9,1,5,5,9,2,2,1,1, +11,12,7,12,7,5,13,11,2,5,7,14,13,2,1,12,11,2,1,2,1,5,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,2,0,1,1,1,0,1,0,1,1,1,1,5,2,5,1,1,1,1,1,0,2,1,2,0,0,2,0,2,1,1,1,1,1,1,1,0,1,1,1,0,1,0,2,5,2,2,2,1,1,1,1,1,1,2,0,1,0,2,0,2,1,2,2,0,2,2,2,1,1,1,2,1,1,1,2,1,1,1,1,2,6,2,2,6,2,7,2,6,1,2,7,5,2,6,1,1,2,5,2,23,152,149,34,1,7,2,5,2,2,2,6,5,7,7,7,6,1,2,2,2,6,6,6,23,34,22,6,1,1,2,2,1,2,2,1,1,2,1,1,0,1,1,1,2,1,1,1,1,1,1,1,1,2,2,1,1,2,1,2,0,2,1,1,1,1,1,1,1,2,2,2,1,1,2,1,1,1,1,1,1,2,1,1,0,2,1,6,1,2,2,2,7,2,1,2,1,2,2,2,2,1,5,2,2,11,2,2,6,5,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,6,2,25,2,2,9,7,1,2,5,1,2,11,10,2,2,1,1,1,1,1,1,1,1,2,2,25,10,10,2,5,5,9,2,2, +2,10,2,2,2,5,12,1,5,2,13,13,2,6,1,1,2,2,5,2,1,2,1,1,1,1,1,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,2,0,1,1,2,2,2,1,1,1,1,0,2,0,0,1,0,0,2,0,2,0,2,1,1,2,1,1,1,1,1,0,2,6,1,1,5,1,1,2,0,1,2,2,5,2,1,1,1,1,1,0,2,0,2,1,0,0,2,1,1,1,1,2,1,1,1,5,2,5,1,2,2,6,13,2,5,2,2,2,7,2,6,1,2,7,1,2,2,1,1,2,2,34,32,22,2,13,1,6,1,5,1,1,2,7,13,7,2,2,1,5,2,5,6,2,2,6,1,5,1,1,2,0,1,2,2,2,2,1,1,1,1,2,1,1,2,2,1,2,1,1,2,0,1,1,2,5,1,1,2,0,2,0,1,1,0,1,1,1,0,2,2,6,2,1,2,1,1,1,1,1,1,1,12,0,0,1,1,2,2,1,2,6,1,13,1,2,1,1,1,1,1,2,5,2,2,5,11,6,6,2,6,7,2,6,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,2,13,2,2,5,2,5,1,6,2,2,2,1,1,1,1,1,2,5,2,5,10,2,2,2,1,1,1,5,2,2, +2,2,2,1,2,6,1,1,1,2,14,11,2,2,5,2,5,1,1,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,2,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,2,1,1,1,1,1,1,1,2,0,1,1,1,1,2,0,1,1,0,2,0,1,1,1,1,1,1,1,0,1,0,2,2,6,1,1,0,1,2,1,6,1,6,2,2,2,1,1,2,2,2,2,2,2,2,2,2,1,1,0,2,0,1,0,2,1,1,1,2,1,2,2,2,2,2,2,2,2,2,1,6,5,7,2,2,2,2,6,7,2,2,6,7,7,2,5,2,1,1,2,2,2,6,2,7,2,6,1,1,2,1,5,2,11,6,6,6,1,2,2,2,2,7,6,6,2,2,2,1,2,0,2,1,1,1,1,1,1,1,1,2,1,2,1,2,5,2,5,1,1,1,1,1,1,2,2,2,0,1,2,2,1,1,1,2,1,1,1,1,1,2,2,2,5,2,1,2,5,1,2,1,2,6,1,1,1,1,2,5,1,2,2,6,7,2,1,2,1,2,1,1,1,2,5,2,2,11,2,11,7,7,12,2,2,6,1,1,1,1,1,1,1,1,0,2,1,1,1,1,1,1,5,1,1,2,12,2,2,6,1,2,6,2,2,2,2,12,11,2,2,1,1,1,1,1,2,2,1,1,5,2,1,5,1,5,1,2,9,12,2, +2,2,5,5,7,7,13,2,2,5,1,1,5,2,1,1,1,1,2,5,1,2,1,1,1,0,1,2,0,2,0,1,1,1,1,2,5,2,2,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,2,0,1,1,1,1,2,0,2,0,1,1,1,0,1,1,1,1,1,2,0,1,0,0,2,1,1,1,2,2,1,1,1,2,2,13,7,14,2,1,1,2,2,2,5,2,5,2,1,1,1,2,1,0,2,0,1,1,1,1,0,0,2,1,2,2,6,1,5,2,1,13,2,2,5,2,2,2,2,2,2,5,2,7,7,6,6,2,7,6,2,2,2,1,1,1,1,2,2,5,7,6,1,2,1,2,1,2,2,21,7,2,6,1,2,2,6,2,2,7,2,2,6,2,1,1,1,1,0,2,2,1,1,1,1,2,2,2,2,1,6,2,2,1,2,2,1,1,0,1,1,1,1,1,2,2,1,1,1,0,1,0,2,0,2,2,7,2,6,2,1,1,1,1,1,2,6,1,13,0,1,1,1,2,1,1,5,2,2,7,6,1,2,5,1,1,1,1,2,2,2,5,6,6,5,9,7,2,2,1,1,2,1,1,1,2,0,1,2,1,1,1,1,1,1,1,2,2,2,5,2,2,11,2,2,11,2,2,2,2,2,6,1,2,26,2,1,2,1,1,1,5,2,1,6,9,5,9,2,1,2,2,5,11,5,2, +2,6,2,2,5,21,17,2,5,5,1,2,2,2,2,1,1,2,5,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,2,1,2,1,0,1,2,1,2,1,1,1,1,1,1,1,0,1,1,2,1,1,2,0,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,2,5,1,0,2,13,7,14,7,2,1,1,1,1,2,7,2,2,2,6,2,5,2,2,1,1,1,0,2,0,2,1,1,1,1,2,2,5,2,6,2,1,5,2,2,6,1,2,5,13,7,1,2,2,5,2,7,2,5,7,7,7,1,6,0,1,1,1,1,2,2,2,2,2,2,6,1,1,1,2,2,2,11,7,2,2,1,2,2,5,2,7,2,6,2,2,2,2,0,1,1,2,1,2,1,1,1,1,2,2,1,1,2,2,1,2,1,1,2,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,6,5,1,1,6,1,2,1,1,1,2,6,2,0,1,2,2,2,2,2,5,2,7,2,2,2,2,2,1,1,2,5,2,5,2,7,6,11,2,2,11,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,9,2,26,5,2,9,11,2,2,2,6,2,1,11,2,2,1,1,2,1,1,1,2,2,2,2,5,5,2,10,5,9,5,10,2,2,0, +7,2,2,6,2,12,13,11,5,2,2,5,13,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,2,5,2,1,2,0,0,1,1,1,1,2,1,1,1,2,5,1,1,1,1,1,1,2,1,0,2,0,1,1,1,1,1,2,2,5,1,2,1,2,0,1,0,2,0,1,2,1,1,1,1,1,2,6,2,2,12,12,13,12,2,2,1,1,2,0,1,2,7,2,2,6,2,2,6,2,2,2,1,0,2,1,0,2,1,1,1,2,2,6,1,2,2,2,2,2,7,2,2,5,2,2,2,5,2,2,6,1,2,13,1,5,1,7,13,1,1,1,0,2,1,1,2,1,6,2,1,1,2,2,2,2,1,12,7,13,6,2,1,1,1,2,2,2,2,6,2,6,2,1,1,1,0,2,1,1,1,1,1,1,1,1,1,1,1,6,2,1,2,1,1,1,0,1,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,2,1,1,1,2,5,1,2,2,12,2,1,1,1,2,1,5,5,2,2,2,12,0,1,2,1,0,1,1,1,2,1,2,2,12,11,2,2,2,5,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,2,5,2,2,11,2,2,2,10,11,6,2,1,1,5,1,1,1,2,5,2,5,2,10,10,10,2,2,2,5,5,1,6,1, +13,13,2,5,2,5,12,1,1,1,1,1,1,2,2,6,2,1,2,5,2,2,1,2,0,1,1,5,1,1,1,2,5,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,1,1,7,1,1,1,2,0,1,2,0,1,1,1,1,1,1,1,1,1,1,1,1,2,0,2,0,1,0,2,0,1,2,2,12,14,13,1,14,7,1,1,1,2,0,2,2,2,2,6,2,2,7,6,2,2,2,5,0,2,1,0,1,1,1,0,2,1,2,5,2,6,2,5,2,2,6,6,1,7,2,2,2,5,2,2,6,1,2,6,7,2,6,2,13,2,2,2,1,1,0,2,1,1,1,2,2,5,12,5,2,5,2,1,2,2,2,6,2,1,1,1,1,2,2,5,14,7,2,2,1,1,0,1,0,2,1,1,1,1,1,1,1,1,1,1,2,5,2,1,1,2,1,1,1,2,2,1,1,2,1,1,1,1,2,1,1,1,0,1,1,2,2,2,5,1,2,1,6,1,2,2,13,5,2,1,0,1,1,1,1,1,2,1,1,13,1,1,1,1,1,1,1,1,1,1,2,11,7,2,21,10,10,2,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,5,2,5,5,2,11,2,2,25,2,11,0,1,1,1,1,1,1,2,2,1,2,26,10,2,5,2,5,10,5,10,10,9,1, +7,6,2,2,5,1,1,2,1,1,5,1,1,2,5,1,2,6,1,2,5,1,1,1,1,1,1,2,2,1,2,5,2,1,1,1,1,1,1,2,2,12,2,2,2,5,2,1,1,1,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,0,1,2,0,1,1,2,1,1,2,7,7,2,7,2,1,1,0,1,1,1,1,1,2,13,6,2,2,7,6,2,6,2,2,2,0,1,1,2,2,1,0,2,1,2,2,7,2,2,2,5,2,2,6,6,6,2,6,1,2,2,1,2,5,2,1,7,1,2,2,2,2,6,1,1,0,2,1,1,2,1,5,2,5,2,2,2,2,2,2,2,2,6,7,6,0,1,1,2,2,2,2,7,2,5,2,1,1,1,1,0,2,1,1,2,1,1,1,1,1,1,2,2,2,2,5,5,14,0,1,1,2,2,1,1,2,2,2,2,2,2,2,2,1,1,1,2,2,6,5,0,2,2,2,2,6,2,14,6,2,1,1,1,0,1,1,1,1,1,1,6,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,6,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,5,2,2,2,2,2,5,2,2,2,2,5,2,1,1,1,1,1,1,5,1,2,2,9,2,2,2,9,2,12,26,10,10,2,1, +10,7,5,2,2,1,2,5,1,1,2,2,2,1,2,2,5,1,5,2,1,1,1,1,1,0,1,2,6,1,10,5,2,2,1,1,2,1,1,7,13,2,5,2,2,2,1,1,1,2,1,1,0,0,1,1,2,5,2,1,1,1,2,2,1,1,1,1,1,1,1,2,1,1,0,2,1,1,0,0,2,1,1,2,7,5,1,0,1,2,1,2,1,2,2,7,7,6,6,6,6,6,7,13,2,2,1,2,1,0,1,1,0,2,1,2,2,14,7,7,6,1,6,2,2,7,2,13,1,2,7,6,2,1,2,1,2,2,13,1,2,5,2,5,2,1,1,1,0,1,1,1,2,2,2,1,2,5,2,2,5,2,11,2,6,7,2,1,1,1,2,2,1,6,7,7,7,2,1,1,1,1,1,1,0,1,1,2,2,2,5,2,5,14,13,2,2,2,2,1,1,1,0,2,2,1,1,1,0,1,1,1,0,1,1,1,2,1,1,1,2,5,1,1,1,1,1,2,2,1,2,2,1,2,0,1,2,1,1,1,2,5,7,2,1,1,1,2,1,1,1,1,1,2,12,5,11,13,2,2,2,1,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,9,11,2,2,2,26,2,12,2,2,1,1,2,2,1,1,2,1,5,2,11,2,10,6,2,2,25,2,12,5,2,0, +2,10,11,5,2,2,6,2,1,5,1,11,5,2,1,1,1,1,2,2,5,1,1,1,2,0,1,5,2,2,1,1,2,1,1,1,1,2,1,2,2,1,2,2,2,1,2,1,2,2,1,1,1,2,1,1,1,1,2,5,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,1,1,2,7,2,2,1,2,1,1,2,1,1,1,2,13,7,7,2,13,7,7,13,2,7,2,0,1,1,1,1,1,1,1,2,2,6,2,6,1,1,7,1,2,7,2,13,1,2,13,5,2,2,1,6,2,5,1,2,6,1,2,1,2,2,2,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,5,2,2,7,6,6,1,0,1,1,2,2,6,13,6,2,0,1,1,1,1,0,1,1,2,1,1,1,1,1,1,1,1,2,5,1,1,1,2,1,0,1,1,1,0,2,1,1,1,1,1,1,1,2,0,1,0,2,1,2,2,1,1,1,1,1,1,1,2,2,7,2,0,1,1,1,1,1,2,1,2,2,5,1,1,1,1,1,1,1,1,2,6,2,5,2,2,2,7,5,2,5,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,5,1,2,2,5,2,5,1,2,5,2,5,10,10,2,7,2,9,11,0,1,1,1,1,1,2,1,2,2,9,11,13,26,5,2,2,2,9,10,1,2, +2,5,2,2,6,1,2,1,1,2,5,10,1,1,2,1,2,2,2,5,1,2,1,1,1,2,2,2,1,2,1,0,1,2,1,1,2,2,2,1,2,2,2,5,2,5,1,2,1,2,1,1,1,1,1,1,1,1,2,6,2,1,1,2,1,2,1,1,2,1,1,1,1,0,2,1,2,5,1,1,1,2,7,1,1,1,2,1,1,2,1,2,1,2,2,14,2,7,2,7,6,6,2,7,7,1,1,0,2,0,2,2,1,0,2,5,2,7,2,2,7,6,2,5,2,2,2,6,5,2,2,5,1,1,2,2,1,0,7,2,2,1,2,1,5,2,2,1,1,1,1,2,5,2,2,5,5,2,2,5,6,2,2,11,7,6,2,6,1,0,2,5,1,2,16,1,1,6,2,1,1,1,1,0,0,1,1,1,1,1,1,1,1,2,2,2,2,1,9,5,1,1,1,1,1,0,0,2,2,1,1,1,1,1,0,0,2,1,1,2,2,2,1,1,1,1,1,1,1,2,5,11,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,0,1,1,1,1,1,2,11,11,7,2,9,6,5,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,5,2,2,2,2,2,5,2,2,2,2,2,5,2,9,11,2,2,1,1,1,1,1,1,1,2,5,6,9,2,2,2,2,12,10,11,5,2,1, +1,2,5,1,2,5,1,1,1,1,1,1,1,5,1,2,1,1,2,1,1,1,2,1,1,1,2,1,1,1,1,2,1,1,2,1,2,2,1,1,2,2,5,2,2,2,1,2,1,6,1,0,2,1,2,2,2,2,7,7,6,1,1,5,1,1,1,2,6,1,2,2,1,1,1,0,2,7,2,1,2,5,2,2,1,1,1,2,0,2,5,2,6,1,2,6,2,6,6,6,6,7,7,2,2,2,1,1,0,1,1,1,1,1,2,2,2,12,7,6,7,2,2,2,2,6,2,7,2,6,2,2,1,1,2,2,1,1,6,2,1,2,1,1,2,2,1,0,1,1,2,2,6,1,6,2,2,2,5,2,2,11,2,11,7,7,6,1,1,1,1,2,2,7,7,1,1,1,1,1,1,1,1,1,1,0,1,1,1,2,1,2,2,5,1,1,2,1,2,2,2,1,0,1,1,1,0,2,1,1,0,1,1,1,1,1,1,1,1,2,5,1,1,1,1,1,1,1,1,1,2,7,1,2,0,2,1,1,2,1,2,2,5,1,1,5,1,1,1,1,1,1,1,7,2,10,2,5,2,2,2,6,9,2,1,1,1,1,1,2,1,1,1,1,1,2,2,1,2,5,2,1,1,1,1,1,2,1,2,5,9,11,6,7,2,13,1,2,5,2,1,1,1,1,2,2,5,9,10,6,2,9,10,10,10,10,40,2,10,2, +2,2,2,5,5,2,2,1,1,1,1,1,1,2,2,2,1,1,1,2,2,5,1,1,1,2,1,0,1,2,1,1,2,2,2,13,2,6,1,2,1,6,2,2,2,2,2,5,2,7,0,2,1,2,1,2,0,2,7,6,2,2,2,2,1,1,2,5,2,1,1,2,2,6,1,1,5,2,1,1,2,2,2,5,1,2,1,1,1,2,1,2,2,6,1,7,6,7,6,7,6,7,6,2,2,1,1,1,1,1,1,1,1,1,2,6,7,7,5,2,2,6,2,2,5,2,2,2,7,7,2,1,1,1,2,5,1,1,13,1,5,2,1,1,2,5,1,1,2,1,2,1,2,5,2,2,2,1,1,2,5,1,2,7,6,7,2,6,1,1,0,2,2,7,2,2,1,2,2,1,2,2,1,1,1,1,0,2,2,5,2,6,5,2,5,1,1,1,2,5,1,0,1,0,2,1,1,1,0,2,1,1,0,1,1,1,1,1,0,2,2,1,1,1,1,1,1,1,2,1,6,13,2,0,2,1,1,2,5,2,5,2,2,1,2,1,1,1,1,1,1,1,1,2,5,2,11,2,2,5,2,2,1,1,1,1,1,1,1,1,1,2,5,1,1,2,5,1,2,2,2,1,1,2,5,2,5,2,2,2,5,2,2,9,2,2,5,2,1,2,5,1,1,1,1,5,2,2,2,2,2,11,9,11,11,11,10,2,11,2, +2,2,6,2,2,5,2,1,1,1,1,1,1,2,11,1,1,2,1,2,5,2,2,2,1,1,1,1,1,1,1,2,2,11,7,2,11,6,2,2,5,2,2,5,2,2,6,1,7,2,1,1,2,2,1,1,2,2,7,7,2,2,1,1,2,1,6,2,2,1,1,1,7,7,2,5,2,6,1,0,1,2,5,2,1,2,1,2,1,1,1,6,7,2,13,7,7,11,7,7,7,13,6,5,1,1,0,2,1,1,1,1,1,5,2,2,2,2,2,2,5,2,5,2,2,2,13,2,7,7,6,1,1,2,1,2,1,2,5,2,2,1,1,2,2,2,1,1,2,1,1,2,2,2,2,5,2,6,2,2,2,6,2,11,6,11,6,0,1,6,1,2,1,7,7,1,1,2,1,5,2,2,1,1,0,0,1,2,1,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,0,2,1,1,1,0,2,1,1,1,1,1,0,2,1,2,1,1,1,1,1,1,1,1,1,2,12,6,0,1,1,1,2,1,2,2,2,5,2,2,1,1,1,1,1,2,0,1,2,5,2,2,2,12,6,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,5,1,2,1,1,6,1,2,2,2,5,2,2,5,6,2,11,6,10,2,1,2,1,1,1,1,1,2,9,10,5,10,7,5,5,5,7,10,7,2,10,2, +1,2,2,5,5,2,2,1,1,1,1,1,1,12,7,1,2,1,5,1,2,2,5,2,5,0,1,1,2,2,2,2,6,7,13,11,7,6,2,1,2,2,6,1,2,5,2,2,13,2,1,0,2,1,1,0,1,2,7,2,2,2,1,2,2,2,2,1,1,1,0,1,2,7,2,2,2,2,1,1,2,2,2,2,2,1,1,5,1,2,1,2,2,7,8,13,2,11,14,13,7,6,2,6,1,2,1,1,1,1,0,1,1,2,1,5,2,5,1,1,2,2,2,2,6,1,7,2,7,7,2,1,1,1,1,1,6,2,5,2,2,0,1,1,6,1,1,1,2,5,2,2,5,2,2,2,2,2,6,2,5,1,2,6,7,13,2,1,0,1,6,0,1,13,2,6,2,5,2,2,2,2,2,1,1,1,1,1,2,2,5,5,7,2,1,2,2,1,2,2,1,0,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,0,2,2,1,1,1,1,1,1,1,1,1,2,7,13,1,0,1,1,1,1,2,5,2,9,2,1,1,1,1,1,0,1,1,1,1,1,2,5,11,6,2,5,2,2,1,1,1,1,1,1,1,1,0,1,2,1,1,5,2,1,2,2,2,25,1,2,2,2,5,2,5,5,2,2,25,6,5,10,10,2,5,1,1,2,1,1,2,2,5,2,10,2,9,11,1,11,13,10,11,10,11,2, +1,1,2,5,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,2,13,1,2,2,2,5,2,2,2,2,2,11,6,2,2,2,5,2,5,2,2,2,5,2,2,1,1,1,1,1,2,1,1,6,13,2,1,1,1,1,1,2,5,2,1,1,1,7,2,6,1,2,5,1,1,2,6,2,5,1,1,2,2,1,1,5,2,6,7,7,7,8,12,6,2,7,7,6,1,1,1,1,0,2,1,2,1,2,2,6,1,2,2,1,1,2,1,6,1,2,2,6,2,7,6,2,5,0,1,2,1,1,2,2,1,1,1,1,1,2,2,1,2,2,2,2,2,2,5,5,5,2,5,2,2,2,6,2,11,6,7,0,2,1,2,2,2,1,7,2,2,2,2,2,2,5,2,2,6,1,0,2,1,1,12,7,6,12,1,2,1,1,2,2,1,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,14,6,2,1,1,2,2,2,2,6,1,12,2,1,2,6,1,1,1,1,1,1,1,2,7,11,7,13,1,2,5,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,5,1,2,5,2,2,5,5,5,2,7,2,6,10,1,2,5,10,5,1,2,6,2,1,1,1,1,5,2,10,7,9,12,10,10,13,11,7,2,5,10,2, +1,1,1,1,1,1,1,1,1,1,2,1,2,5,1,1,1,1,1,1,1,1,1,1,1,2,6,2,12,2,2,5,1,1,6,7,11,2,2,1,2,2,2,2,2,6,2,6,2,2,2,1,1,1,2,0,2,2,7,6,2,2,2,1,1,1,2,2,2,1,1,1,2,2,1,2,6,1,2,5,7,2,1,2,2,1,2,5,2,2,0,2,7,14,6,7,14,8,5,7,13,7,2,6,0,1,0,2,0,1,1,1,2,6,1,2,6,1,1,2,1,5,2,6,2,6,1,6,6,1,2,1,1,2,1,1,1,2,13,1,1,1,1,1,2,2,2,0,2,6,2,5,2,2,2,2,2,2,2,5,2,2,2,11,6,7,2,0,1,2,1,1,0,7,6,1,2,5,1,2,2,2,5,1,1,2,0,2,1,2,2,5,2,6,2,1,1,1,5,0,1,0,2,1,0,2,1,1,1,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,2,2,5,1,1,2,2,6,2,1,1,2,5,1,1,1,2,13,13,10,2,2,2,5,2,1,1,2,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,1,6,5,1,5,9,2,2,2,6,5,1,2,12,10,10,10,1,1,1,2,2,1,1,1,1,2,2,10,11,10,10,2,11,10,11,11,12,2,25,0, +1,1,1,1,1,1,1,1,1,1,1,2,5,2,1,1,1,1,1,1,1,1,1,1,2,6,1,2,11,2,5,2,1,5,1,2,11,2,1,1,1,1,2,2,6,1,2,7,7,1,0,2,1,1,1,1,2,1,7,7,6,6,2,2,1,6,2,5,2,2,1,0,1,2,5,1,2,6,1,1,7,2,1,1,1,1,2,2,1,2,1,2,14,7,2,7,14,13,6,6,2,5,2,2,1,1,1,1,1,1,1,2,2,7,2,6,1,1,1,1,2,1,2,7,6,2,2,7,2,2,13,1,1,5,2,1,1,2,2,2,1,2,1,2,5,0,2,1,2,2,2,5,2,6,2,5,2,5,2,2,5,1,11,6,6,6,0,2,1,0,1,1,2,6,2,2,1,5,6,2,2,2,2,11,1,2,2,0,1,1,2,5,5,2,2,5,2,2,2,1,1,1,0,1,1,0,1,1,2,5,2,2,2,1,2,1,1,2,1,1,1,6,1,1,1,1,1,2,1,1,2,2,1,2,1,2,2,6,2,5,2,11,1,2,2,6,1,1,1,1,2,1,5,13,10,11,2,12,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,5,2,2,2,25,1,2,2,2,2,2,2,5,1,2,11,5,10,5,5,2,5,2,5,1,6,1,1,1,1,6,5,11,10,7,11,7,10,11,10,10,5,2,2,1, +1,1,1,1,1,1,1,1,1,2,1,1,2,2,6,1,1,1,1,1,1,2,5,1,1,1,2,6,1,2,2,1,1,2,5,1,2,1,1,1,1,6,2,6,1,6,6,2,2,2,1,0,2,2,2,1,1,2,7,7,6,2,2,1,5,2,2,2,2,6,1,1,2,7,2,2,7,2,2,6,1,1,0,1,1,1,2,2,2,1,2,7,2,2,7,14,8,13,2,2,2,2,2,1,1,1,0,1,1,2,1,2,5,1,2,2,5,2,1,1,2,2,5,2,2,6,6,2,7,13,2,1,2,2,1,2,6,7,2,6,2,2,5,1,2,1,2,1,2,11,2,5,2,2,2,2,2,2,5,2,2,5,2,5,2,11,0,1,1,0,1,0,1,7,1,2,7,2,2,5,2,11,2,6,2,1,2,2,2,1,2,2,5,2,2,2,1,2,6,1,1,1,0,2,1,1,1,1,2,2,2,5,2,2,1,1,0,1,1,2,2,1,2,1,1,1,2,1,2,1,11,6,0,1,2,5,1,2,1,2,1,2,2,5,5,1,2,2,1,2,5,2,13,10,7,2,6,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,5,2,2,2,6,2,2,5,2,5,2,10,2,26,5,6,2,2,2,2,5,1,2,2,1,1,2,1,1,1,2,26,7,11,10,12,10,10,13,21,1,5,1,2, +1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,6,1,1,1,1,2,7,1,2,1,2,5,0,2,2,6,2,2,1,2,2,2,2,1,1,1,2,7,7,6,2,7,2,7,2,2,0,1,2,2,2,2,2,7,2,7,2,5,2,2,2,1,6,5,6,0,1,1,2,2,6,1,6,2,2,1,6,1,0,1,1,2,2,1,1,2,2,7,6,13,13,6,7,2,2,5,2,5,0,1,1,1,1,1,1,1,2,2,6,1,2,2,2,6,1,5,2,2,5,2,7,2,7,6,2,2,1,1,1,1,2,13,6,2,2,2,2,2,2,5,2,1,1,6,2,2,2,2,5,2,2,6,2,2,2,6,2,2,2,11,2,2,1,1,1,1,1,2,7,2,6,11,2,2,2,2,5,1,2,2,5,2,2,2,2,1,1,2,1,1,2,2,2,1,1,1,1,1,1,1,1,2,1,2,5,2,2,2,1,1,1,1,1,1,1,2,5,2,1,1,1,1,5,5,1,11,11,1,1,2,2,5,1,1,1,1,13,5,6,2,1,1,1,1,1,1,2,13,11,10,5,10,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,6,1,6,1,2,2,2,2,2,5,13,2,2,5,5,2,6,6,10,2,6,2,2,5,1,1,1,2,5,10,10,7,10,10,10,13,10,13,10,2,10,5,5, +1,1,1,1,1,1,1,1,1,1,2,2,12,6,7,2,2,1,1,2,5,2,1,1,1,2,2,1,2,11,1,2,1,1,1,2,1,0,2,1,1,2,2,7,2,6,6,7,7,0,0,2,1,1,2,1,1,2,6,2,13,2,2,6,1,6,1,2,6,2,1,1,1,0,2,2,6,1,2,12,0,2,1,1,1,0,1,5,1,1,2,2,7,13,6,7,2,14,2,6,2,2,2,1,1,1,1,0,1,1,2,5,2,2,6,7,2,13,1,2,1,2,2,2,5,2,2,13,5,2,5,2,2,1,1,7,7,6,6,2,2,1,2,5,2,2,1,2,2,2,6,2,5,2,2,5,2,2,6,1,2,2,5,2,13,2,1,2,2,1,1,1,2,7,7,2,7,6,2,5,2,2,6,2,5,2,2,5,2,2,1,2,2,1,1,2,2,2,1,1,0,2,1,0,2,1,1,1,2,2,1,2,1,1,1,1,0,2,1,1,1,2,2,1,1,1,1,2,2,6,6,2,1,1,2,2,1,1,1,2,12,1,2,2,2,1,2,1,2,1,2,7,13,11,12,2,7,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,2,1,1,5,2,2,7,2,2,13,1,2,5,9,6,2,5,12,1,11,2,2,9,11,1,2,2,5,0,1,1,1,1,9,10,10,10,10,13,10,26,13,10,13,9,27,26,2, +1,2,2,1,1,1,1,1,1,1,7,2,13,2,2,2,1,1,2,11,2,1,1,1,1,5,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,7,6,2,7,6,7,13,14,0,2,0,1,1,2,2,1,2,7,2,7,6,2,5,2,2,5,2,6,2,2,1,1,1,1,7,2,6,5,1,1,2,5,1,1,2,2,2,1,2,2,2,14,2,13,6,7,2,2,2,2,6,2,1,2,1,1,1,1,1,2,2,5,2,2,7,6,2,6,1,1,1,2,6,1,2,6,1,2,2,2,1,1,1,2,12,7,6,2,1,1,1,1,2,2,1,2,1,1,1,1,2,2,1,2,2,2,5,2,2,5,2,2,6,7,2,6,2,2,1,1,1,5,13,2,5,14,2,2,2,5,2,2,2,2,5,2,2,5,2,2,27,38,35,1,2,1,2,1,0,1,0,2,1,0,2,1,1,2,2,1,1,1,0,1,0,1,1,1,6,1,2,5,1,2,1,1,5,2,2,2,2,1,1,1,2,1,2,2,2,11,2,5,2,1,1,1,1,1,5,2,11,10,7,2,2,11,2,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,2,5,2,1,1,2,2,2,25,2,7,2,9,11,1,6,1,12,2,2,5,2,5,1,1,1,1,5,10,10,10,10,13,26,13,40,2,26,5,10,10,2, +2,6,6,1,1,1,1,1,1,2,12,6,2,6,1,1,1,1,2,2,6,1,1,1,1,2,1,1,2,1,2,5,1,1,1,1,1,0,2,1,2,13,7,7,13,7,7,13,6,1,1,2,1,1,2,1,1,6,6,6,6,2,6,2,2,2,1,2,7,2,2,1,1,2,2,6,1,1,2,1,1,2,2,1,1,2,2,2,1,5,1,7,14,2,14,6,6,6,1,2,5,5,1,1,1,1,1,1,6,1,1,1,2,2,5,6,6,2,1,6,1,0,2,5,2,6,1,2,6,7,7,1,1,2,5,10,2,11,2,2,1,6,1,2,5,1,0,0,1,2,7,2,6,2,5,2,5,2,2,5,2,2,2,2,13,2,2,2,6,0,1,2,2,7,1,2,2,2,5,2,2,5,1,2,5,2,2,2,2,2,1,0,1,7,7,1,1,2,1,1,1,1,0,1,1,1,0,2,5,2,1,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,2,2,5,2,7,6,1,1,1,1,5,1,2,5,6,6,2,2,5,2,1,2,1,2,2,5,11,2,2,5,2,2,5,1,1,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,5,2,2,2,5,2,2,2,5,6,2,12,2,2,2,2,2,6,2,2,2,1,5,1,2,11,26,21,10,26,26,26,13,21,2,9,13,10,5,1, +2,13,11,2,2,1,1,1,1,2,13,11,0,1,0,1,1,1,5,2,2,5,2,2,1,6,1,1,1,1,1,2,2,2,2,1,1,1,2,2,2,14,29,13,14,11,6,1,2,1,0,0,1,2,1,1,1,2,6,6,7,6,2,2,5,2,1,6,1,6,2,1,1,2,1,2,2,5,2,1,1,2,2,2,1,2,2,1,2,2,2,7,7,6,7,2,6,2,6,5,13,6,1,1,1,1,1,1,0,1,2,2,5,2,2,6,6,2,2,2,1,2,2,1,2,2,5,2,2,13,5,2,1,2,2,12,2,7,5,2,2,1,1,2,1,0,1,1,6,1,2,6,1,2,2,2,2,2,6,2,5,2,2,11,7,2,2,1,2,1,1,1,2,6,2,12,5,2,2,2,2,2,5,2,2,2,2,5,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,5,0,1,1,1,1,0,1,2,1,2,2,2,5,1,1,1,2,1,11,1,1,2,1,2,2,1,2,2,12,5,2,5,2,5,1,2,5,10,10,11,7,10,10,7,5,2,2,1,2,1,1,1,1,1,1,1,1,1,1,2,5,1,2,2,6,2,13,1,2,2,6,9,2,2,5,10,7,2,5,9,5,2,11,7,1,2,2,2,1,1,1,1,2,26,26,21,10,40,11,26,13,10,1,12,26,2,2,1, +7,7,6,2,1,1,1,1,1,2,13,1,2,5,1,1,1,2,2,2,2,1,1,6,1,1,2,1,2,1,2,2,2,1,1,1,2,1,2,2,7,13,5,6,2,2,2,13,6,1,0,2,1,1,2,2,5,2,7,7,6,6,6,2,2,6,5,2,7,6,2,1,1,1,2,2,6,2,1,1,2,2,2,1,1,1,1,1,1,2,2,7,1,7,2,6,2,6,2,13,13,1,1,2,1,1,2,1,1,1,2,1,2,2,2,14,2,2,1,1,1,0,1,2,6,1,6,1,2,6,1,2,5,2,2,13,2,2,2,2,5,0,1,2,2,2,1,1,2,2,6,1,5,2,6,2,2,5,2,2,2,5,2,2,7,2,1,1,1,1,1,0,7,7,2,2,2,5,1,1,2,2,2,2,5,2,1,1,1,5,0,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,2,2,2,5,2,6,2,5,2,6,5,2,13,2,2,9,1,2,2,5,1,10,2,6,2,2,2,2,5,1,1,2,2,13,13,13,10,5,2,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,2,6,2,2,6,2,5,5,2,5,9,2,12,11,2,5,2,10,2,11,6,2,2,1,5,1,1,2,6,10,12,21,13,1,10,10,5,13,5,1,10,9,2,6,0, +6,7,6,1,1,1,1,1,1,2,2,6,2,1,2,2,1,5,2,5,1,1,1,1,1,1,1,2,0,1,1,1,1,1,1,0,1,2,5,11,2,2,2,13,7,6,5,11,1,0,2,0,2,1,1,2,2,2,13,7,2,6,2,2,5,2,2,2,2,2,1,1,1,1,2,6,1,2,1,1,2,5,2,1,1,0,1,1,1,1,2,6,2,6,2,7,13,2,11,7,11,2,1,1,5,1,1,2,1,2,0,5,2,2,6,12,2,2,1,0,1,1,1,2,2,6,2,2,11,2,2,2,2,2,13,2,6,2,2,5,2,2,1,2,1,2,1,1,2,1,2,2,2,2,2,5,2,2,2,2,5,2,5,6,6,6,0,1,1,1,1,1,12,0,6,13,2,2,2,1,5,2,1,1,2,1,2,1,2,2,1,1,0,1,1,1,1,1,1,0,1,1,0,2,1,1,1,1,1,2,1,6,0,1,1,1,2,5,2,1,2,2,2,7,2,2,2,2,2,2,10,2,2,2,1,1,1,1,6,13,2,2,2,5,2,6,2,1,2,5,11,13,13,12,7,2,2,6,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,7,6,5,2,2,2,9,2,2,5,2,10,2,2,25,2,2,2,11,11,2,2,2,1,1,1,2,1,2,26,10,10,10,10,10,13,39,2,2,5,2,6,1,0, +11,6,2,1,1,0,1,1,1,2,11,1,2,1,2,2,2,2,2,2,1,2,1,1,1,2,1,1,2,1,1,1,2,1,1,1,1,2,11,7,2,2,11,13,14,6,6,2,1,1,0,1,1,1,2,6,2,6,7,7,7,2,2,2,2,1,1,2,6,2,1,1,1,1,1,2,5,1,1,1,2,2,2,1,1,1,2,2,2,1,2,7,2,7,7,7,2,13,21,21,7,2,1,1,2,1,6,1,0,1,2,1,2,5,7,7,6,0,1,2,0,0,1,2,7,2,6,2,7,7,2,2,2,13,7,2,2,2,5,2,2,2,1,5,1,1,0,6,2,5,2,5,2,5,2,2,2,5,11,2,2,2,2,2,11,1,1,1,1,1,1,2,2,5,2,14,1,2,1,2,2,1,2,2,5,2,2,1,2,1,1,1,2,1,1,2,1,1,2,1,1,0,1,0,1,1,1,2,1,1,1,2,1,1,2,2,7,5,5,2,2,2,5,2,2,5,2,5,2,11,7,2,1,2,2,1,1,5,1,13,2,5,2,2,2,2,2,1,5,2,11,13,21,2,11,2,2,2,2,6,1,1,2,1,1,1,1,1,1,1,1,1,2,1,5,2,6,5,11,2,2,11,2,5,2,2,2,12,1,5,2,5,2,2,13,11,0,5,2,2,1,1,1,2,12,10,11,10,40,6,13,12,21,6,2,10,5,1,1,2, +7,7,5,1,1,1,1,1,1,6,6,2,5,2,1,1,2,5,2,1,1,1,1,2,1,2,5,2,1,2,1,2,2,1,1,1,1,11,6,2,2,6,14,7,7,2,2,7,1,0,0,2,1,2,2,2,2,7,7,14,6,6,2,5,2,2,1,5,2,13,1,0,1,2,1,2,2,1,1,1,2,2,1,1,1,2,2,1,1,2,5,2,2,14,8,7,7,7,14,13,2,2,1,2,1,1,1,1,1,1,1,1,2,2,2,7,2,1,1,1,2,1,1,2,2,5,1,2,2,12,1,1,2,21,7,2,6,2,2,2,5,2,1,2,2,1,0,2,2,1,2,2,2,2,2,6,2,2,2,6,2,5,2,6,2,0,2,1,0,2,0,1,2,2,14,2,1,1,2,1,5,2,2,1,2,1,1,2,2,1,1,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,6,1,1,5,2,2,2,2,5,2,5,2,2,6,1,1,2,10,2,5,1,2,1,1,1,1,1,10,13,1,2,5,5,2,5,1,2,2,2,10,13,10,2,6,1,6,2,5,1,2,9,2,2,1,1,1,1,0,1,1,2,1,1,2,2,2,11,2,2,2,2,2,2,2,5,2,2,11,2,2,1,11,7,11,2,5,2,2,2,1,1,1,2,26,5,12,11,10,26,10,21,21,2,5,9,2,1,1,0, +2,2,2,2,1,1,1,1,5,1,2,11,2,2,1,11,2,2,2,1,1,5,2,5,2,2,2,5,2,2,1,2,5,1,1,0,1,2,2,13,7,7,7,13,11,2,13,1,1,1,1,0,2,1,2,5,2,2,6,2,6,2,2,2,2,5,1,2,2,7,1,2,1,1,1,6,1,0,2,2,1,1,1,1,1,1,2,1,2,2,2,6,7,7,7,6,7,13,7,2,5,0,1,1,2,1,2,6,2,1,2,1,13,1,6,1,6,1,5,1,1,1,2,5,2,2,2,2,13,2,2,2,2,12,11,2,1,2,2,6,2,2,5,1,2,1,1,1,2,1,6,2,5,2,5,1,11,2,2,2,2,1,11,7,6,1,0,2,1,0,1,1,2,2,6,1,1,1,1,1,2,1,5,2,1,1,1,2,2,1,1,1,1,1,1,1,2,1,1,0,1,1,1,1,1,1,1,2,5,1,1,1,1,2,2,1,2,6,2,2,2,2,5,1,2,2,6,2,10,7,2,1,2,2,1,1,2,5,7,11,2,6,2,2,2,1,1,5,5,7,26,11,2,5,1,11,1,2,2,2,2,2,2,1,1,1,1,0,1,1,1,2,1,2,6,1,6,7,6,6,2,6,2,6,2,2,2,5,9,10,2,2,10,10,13,2,1,2,6,9,1,1,2,25,1,10,9,26,12,10,13,21,13,2,2,5,2,1,1,2, +2,6,2,2,2,1,1,2,2,2,5,2,5,1,2,11,2,2,2,6,1,1,2,1,1,2,2,2,5,1,1,1,2,1,1,1,1,2,6,7,7,6,14,29,13,5,7,2,1,1,1,1,0,1,1,1,6,1,6,7,13,2,2,6,2,2,2,2,2,7,2,1,1,1,2,1,1,6,1,1,1,2,1,1,1,1,0,2,1,2,7,2,13,7,7,13,12,6,13,2,2,1,1,1,2,1,1,1,1,2,1,1,2,1,2,5,2,2,2,2,2,1,1,2,2,2,1,11,13,1,1,2,1,14,2,2,5,2,5,2,2,2,2,1,2,1,1,2,2,5,2,2,2,2,2,5,7,2,5,2,5,2,2,13,2,1,1,1,0,2,1,1,2,1,2,1,1,1,1,2,2,2,1,2,2,5,2,2,5,1,2,5,1,1,1,1,1,2,1,1,1,0,1,1,1,1,1,1,2,1,5,2,1,2,6,2,2,2,5,2,2,5,2,2,2,5,2,5,11,5,2,2,1,2,1,1,1,2,10,2,5,9,2,2,5,1,2,10,2,13,7,2,2,2,6,2,5,2,1,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,2,6,5,13,5,2,11,2,6,2,2,6,2,12,1,11,2,5,11,11,13,5,1,2,2,2,1,1,2,1,2,5,5,26,2,12,11,13,13,2,9,12,2,1,1,1, +11,2,2,6,2,5,2,2,5,6,2,1,1,1,1,11,5,1,7,2,1,2,1,1,1,1,1,6,2,2,1,1,1,1,1,1,2,2,7,7,2,14,16,21,2,2,13,2,1,1,1,1,1,2,2,2,7,14,6,7,7,6,1,2,7,2,2,1,2,13,2,2,1,1,1,2,2,2,1,1,1,1,0,2,1,0,1,1,2,2,6,14,8,14,6,2,6,2,2,7,2,1,1,2,1,2,1,1,2,2,1,6,2,1,1,2,2,2,5,1,2,1,1,1,2,1,2,13,13,2,2,5,2,2,2,5,2,2,2,2,11,2,2,2,2,1,1,2,2,2,2,6,2,6,6,2,5,2,2,2,2,5,7,7,6,1,1,0,1,1,1,1,6,1,2,1,5,1,1,1,5,2,2,6,1,2,2,6,1,1,2,2,5,1,2,5,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,1,2,5,2,2,12,2,2,2,6,2,2,5,5,1,2,2,7,5,1,1,1,1,1,2,5,5,7,11,5,2,6,2,1,5,2,2,5,7,12,10,5,2,2,2,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,7,6,13,5,2,10,2,2,11,2,6,2,2,2,2,12,1,2,10,10,11,1,5,2,10,2,1,1,1,1,1,2,2,2,2,2,21,11,6,2,6,9,2,1,1,1, +2,1,2,2,2,1,1,2,2,11,2,6,1,1,1,2,6,2,11,2,2,5,1,2,2,2,11,11,11,2,2,0,2,1,1,1,1,11,13,7,7,13,16,13,2,5,2,2,1,1,1,1,2,2,6,1,6,6,7,7,13,1,6,2,2,6,1,13,2,11,2,2,2,0,2,1,2,1,1,1,0,1,0,1,0,2,1,2,2,2,14,7,7,13,7,6,5,2,13,2,6,1,1,1,2,1,1,0,1,1,2,2,2,1,1,2,6,2,2,2,6,2,2,1,2,13,13,5,2,2,6,2,2,6,2,2,2,5,2,11,6,2,2,6,2,1,1,2,5,2,5,2,2,2,2,6,2,2,1,6,2,2,2,6,7,1,1,1,1,1,1,2,7,14,2,2,1,2,2,2,2,2,5,2,13,2,5,1,1,2,1,5,1,2,2,1,1,1,6,1,1,1,1,2,1,1,1,1,2,1,1,1,1,2,2,5,2,2,6,1,2,6,2,5,5,2,2,5,10,7,0,2,1,1,2,5,1,2,13,13,1,2,2,6,2,1,2,2,5,13,13,2,2,5,1,2,6,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,5,2,2,10,11,2,7,2,6,2,11,6,2,5,11,9,2,5,5,10,11,2,5,2,5,2,5,1,1,1,1,1,2,2,13,2,10,11,7,11,0,9,2,5,1,1,2, +2,1,1,5,1,1,1,2,2,5,2,2,1,1,1,2,1,2,2,11,2,2,6,2,5,2,26,7,2,2,1,1,1,0,1,2,5,2,2,7,13,13,2,2,1,2,2,1,1,1,1,0,1,2,2,6,1,7,7,13,6,2,2,2,7,2,2,2,13,6,2,5,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,14,2,7,7,7,7,2,6,1,2,2,0,1,1,1,1,1,1,1,1,1,2,2,1,2,13,2,2,2,1,0,2,1,2,1,5,7,13,1,5,2,2,2,2,5,2,5,2,2,5,11,11,2,1,2,2,1,1,2,2,2,2,5,2,5,2,2,5,1,2,2,6,2,7,2,0,1,1,0,1,1,2,2,13,2,6,2,1,5,1,5,2,2,2,7,2,2,6,2,5,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,0,1,6,1,5,1,2,5,5,9,2,1,2,12,2,2,2,11,2,5,1,11,7,5,2,1,1,1,1,2,2,5,13,2,2,5,2,1,2,2,5,5,10,13,10,2,5,2,11,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,11,7,6,2,10,13,2,11,5,11,2,2,10,2,2,2,2,12,11,2,6,1,9,2,2,1,1,1,2,2,2,26,13,2,13,11,6,2,5,5,2,2,1,1,2, +1,1,1,2,1,1,1,5,2,2,1,1,2,1,1,5,2,2,10,5,2,2,2,2,1,2,5,2,2,6,1,1,1,1,1,1,2,11,7,13,1,6,2,2,6,1,2,0,1,1,1,1,1,2,2,2,12,7,6,2,6,2,2,11,6,13,7,13,7,1,2,2,2,1,0,1,1,1,1,1,2,1,0,2,0,1,2,2,2,7,7,6,7,7,6,2,2,2,13,7,1,1,1,1,1,1,0,1,1,6,1,5,2,2,1,2,2,5,2,5,12,1,0,1,2,13,13,2,2,2,2,5,2,2,2,2,2,5,2,2,5,2,2,6,2,1,1,1,1,2,5,2,2,1,2,5,2,2,6,2,12,2,7,6,13,1,1,1,1,0,1,6,2,7,2,2,2,2,1,2,2,2,6,1,13,1,5,7,2,1,2,6,1,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,2,1,1,1,6,1,1,1,1,5,2,2,2,5,5,2,10,2,2,10,10,2,1,1,1,2,5,10,5,10,21,6,2,2,1,1,5,2,6,2,10,12,11,2,2,2,2,11,2,2,5,1,1,1,1,1,1,1,1,0,1,1,5,2,2,2,11,5,10,11,2,11,2,2,7,2,7,2,6,10,6,2,1,5,10,12,2,2,5,11,1,6,1,1,1,2,25,2,2,2,2,13,6,10,2,2,2,25,2,1,2,1, +1,2,2,5,1,1,2,2,2,1,1,2,2,1,2,2,5,2,2,1,1,1,5,1,2,2,2,2,5,1,1,2,1,1,1,2,13,7,13,2,6,2,6,7,13,2,0,1,1,1,1,0,2,1,1,1,2,2,2,2,13,2,12,6,7,2,13,7,2,6,2,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,6,7,2,6,14,6,2,2,13,13,11,2,1,1,1,1,1,2,5,2,6,1,2,2,5,2,5,2,2,2,2,6,2,2,1,0,13,11,11,2,6,1,5,1,2,5,2,1,5,1,2,5,2,11,1,2,2,2,1,1,2,2,2,2,5,1,2,2,2,5,1,2,5,7,7,13,2,2,1,2,2,1,1,2,2,6,7,2,2,2,6,1,2,5,2,13,2,6,2,2,1,2,5,2,1,2,2,2,1,2,5,2,1,1,1,1,1,1,1,1,1,1,1,2,2,5,2,2,2,2,5,2,5,2,5,2,2,2,5,10,13,2,2,1,1,1,2,7,2,40,7,2,2,5,1,2,2,2,2,11,13,13,2,2,5,2,11,6,2,6,2,1,1,1,1,1,1,1,0,1,1,1,1,2,5,2,7,5,10,2,12,1,6,2,6,6,2,2,2,12,6,2,6,10,10,11,2,5,2,11,11,2,1,5,2,2,2,2,7,9,11,11,6,10,2,5,9,1,1,1,2,0, +1,1,2,2,6,1,5,2,1,1,1,5,1,2,1,2,2,6,1,1,2,2,2,5,1,5,13,6,1,2,1,5,1,2,1,2,2,11,2,2,2,2,7,13,14,6,1,0,1,1,1,1,0,1,1,1,2,5,2,2,7,2,6,2,2,2,13,13,2,2,7,6,2,2,0,1,1,1,1,2,1,1,1,1,1,1,1,1,2,2,6,14,6,2,6,7,14,13,2,2,1,1,1,1,2,1,2,1,2,1,2,2,1,1,2,2,5,6,2,5,2,2,2,26,13,7,11,6,1,2,6,2,2,2,2,2,2,12,2,2,2,5,2,6,2,1,1,1,1,2,5,2,2,5,2,1,2,1,2,6,2,2,7,6,2,6,2,5,2,1,1,2,12,6,13,1,1,2,1,2,2,2,2,21,1,2,2,5,6,2,2,2,2,5,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,5,2,2,5,2,2,2,2,10,12,2,5,2,5,10,10,13,5,1,1,2,1,2,12,7,14,5,6,2,2,5,2,5,2,2,10,13,13,2,6,2,2,7,6,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,2,12,6,5,5,2,5,2,2,11,6,2,5,2,11,7,2,2,10,7,6,2,2,10,13,6,1,1,1,2,5,9,2,5,5,11,13,6,10,6,2,5,1,1,2,5,0, +1,2,6,1,1,2,2,1,1,1,1,1,1,2,5,2,2,2,2,5,11,6,2,2,6,7,21,5,2,5,2,1,1,1,1,2,10,7,11,2,13,14,11,11,13,1,1,1,0,1,1,1,1,0,1,2,1,2,2,6,7,2,2,2,5,2,2,2,2,2,13,1,2,1,1,1,2,1,2,5,1,0,1,1,1,1,1,1,7,2,7,2,6,7,7,7,6,7,13,2,1,2,2,1,1,5,2,1,5,2,5,2,1,2,2,12,11,7,2,2,2,5,11,6,5,13,7,2,2,6,1,2,2,5,1,2,5,2,1,5,2,2,2,2,2,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,2,2,5,2,5,2,2,2,1,1,2,5,11,5,1,0,1,1,6,1,7,2,13,7,2,2,5,2,2,2,5,2,1,2,1,6,1,6,2,5,1,1,1,1,1,2,1,0,1,1,1,2,6,2,1,2,2,5,1,5,12,2,2,5,11,13,10,2,10,1,1,1,2,5,2,10,2,21,2,2,2,2,2,2,2,5,13,13,13,7,2,2,2,6,6,6,7,2,1,1,1,2,1,1,1,1,1,1,1,1,1,2,5,5,6,2,7,11,2,2,2,5,6,6,2,2,2,11,6,2,2,12,6,1,2,2,5,11,2,2,1,2,6,9,9,9,5,2,11,11,2,11,2,2,2,1,1,1,2,2, +2,11,10,2,5,10,1,1,1,2,1,1,2,5,2,2,5,11,2,2,2,5,2,2,2,13,10,1,1,2,1,2,1,1,1,1,6,2,11,7,7,7,13,14,6,1,1,1,1,0,1,1,1,1,1,1,2,2,5,1,13,7,6,2,2,11,11,6,5,5,2,5,2,1,1,0,2,2,2,2,2,1,1,1,1,1,1,1,14,6,7,7,7,13,6,5,2,10,11,2,1,1,1,1,2,2,1,1,2,2,2,2,2,2,2,11,13,12,1,5,7,2,12,21,6,7,2,2,5,2,2,5,2,2,2,2,2,2,2,1,2,5,1,2,6,2,1,1,1,5,2,5,2,2,2,2,5,1,1,2,5,2,2,2,2,2,5,1,5,2,2,14,13,6,1,1,0,2,2,2,5,2,12,7,2,2,2,2,5,2,2,2,2,5,2,1,5,7,2,2,1,1,2,1,1,1,1,1,0,1,1,5,1,2,1,5,2,2,5,1,2,2,1,2,12,11,2,11,1,1,1,1,2,2,2,12,2,10,2,6,1,5,2,5,5,2,10,7,13,2,6,2,2,2,6,2,2,6,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,25,6,5,7,2,6,2,2,6,2,2,1,11,6,11,2,9,10,11,2,2,10,12,11,12,1,1,1,2,6,2,2,2,6,10,10,6,7,2,5,1,1,1,1,5,0, +2,13,1,5,2,1,1,1,1,2,1,1,5,2,2,1,6,1,5,2,6,2,5,2,1,5,1,1,1,1,1,1,1,1,1,1,5,2,2,11,6,11,7,11,2,2,1,1,1,1,1,1,1,2,1,2,2,10,10,2,21,2,2,2,5,2,10,5,5,2,2,2,5,0,1,1,1,1,2,2,1,1,0,2,1,1,1,1,7,2,14,14,13,7,13,2,13,14,14,2,1,1,1,1,2,1,1,2,6,2,5,2,2,2,12,5,5,2,2,10,11,5,28,7,7,7,6,1,2,5,2,1,2,5,1,2,5,2,1,1,2,2,5,11,1,6,1,1,2,2,2,2,2,13,1,2,2,1,2,2,2,2,6,1,13,1,2,2,2,2,6,7,14,6,6,0,1,2,5,2,13,2,13,1,2,13,1,2,6,1,2,5,5,2,2,2,2,2,13,2,1,1,2,5,2,1,1,1,1,1,1,0,1,1,1,2,5,2,2,6,2,2,1,7,7,13,5,5,1,1,1,1,2,5,2,2,21,11,2,1,2,1,2,2,2,5,10,10,12,2,7,2,11,6,6,2,7,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,5,11,11,6,2,2,2,6,2,11,2,6,1,6,6,6,2,2,5,10,11,11,13,11,2,2,5,2,1,2,2,2,25,7,2,13,11,11,10,2,1,1,1,1,2,2,2, +2,2,6,2,1,1,1,1,1,1,1,2,5,2,1,1,1,2,6,1,2,2,2,2,1,2,6,1,1,5,1,2,2,2,2,2,2,6,7,11,13,7,14,2,2,1,1,1,1,1,2,2,1,2,5,5,5,2,10,2,13,2,2,5,2,2,11,2,2,2,13,2,2,1,1,1,2,1,1,2,2,1,0,2,2,1,0,2,2,12,14,7,13,2,7,2,12,13,11,2,1,1,2,2,5,2,1,1,2,2,2,13,1,1,5,2,5,5,12,13,5,10,11,13,13,6,2,6,2,2,2,2,1,1,1,1,2,1,1,2,5,2,2,5,2,2,2,2,1,2,2,5,5,2,6,2,5,2,5,2,2,6,1,2,2,2,1,1,1,1,2,7,14,6,1,1,6,1,1,2,2,2,21,2,6,2,5,5,2,2,6,1,2,6,1,2,13,2,7,2,2,6,1,2,1,1,1,1,1,1,2,1,1,1,1,2,6,2,5,2,2,2,1,7,12,5,2,2,2,1,1,1,1,2,2,6,5,2,2,1,1,2,1,6,9,10,13,21,2,2,2,11,1,11,2,2,6,2,2,1,1,1,2,1,1,1,1,1,1,1,1,2,5,2,2,11,6,7,6,1,2,7,2,2,2,2,11,6,7,11,2,2,10,2,13,26,1,2,2,1,1,1,5,2,2,2,2,10,13,10,10,2,1,2,1,1,2,1,5,1, +1,1,2,1,1,1,1,1,1,1,1,1,1,6,1,1,5,2,2,2,5,2,5,2,1,2,2,2,2,2,5,2,2,1,5,2,11,7,11,7,13,13,2,13,2,2,2,1,1,1,2,1,1,2,1,2,2,5,5,13,11,2,6,1,6,1,5,2,6,5,6,1,2,1,1,1,1,1,1,2,1,1,0,2,1,1,1,1,2,16,7,7,11,6,2,2,21,7,6,1,1,1,1,1,1,1,1,1,1,5,2,2,2,13,21,2,2,2,5,2,21,12,13,13,11,2,13,2,2,2,5,1,1,2,2,1,2,1,1,2,2,2,5,2,2,2,5,2,1,2,12,2,5,2,5,2,2,2,2,5,2,13,13,13,2,1,1,1,2,5,2,13,2,2,1,1,2,2,6,2,10,13,2,6,1,2,2,2,1,5,1,2,6,1,5,2,13,2,13,1,1,2,5,1,1,1,2,2,1,1,1,0,1,1,1,1,2,2,2,2,2,1,1,10,10,2,2,1,1,1,1,1,1,2,5,6,11,7,5,2,2,5,2,2,11,2,13,2,6,2,7,6,2,6,6,2,2,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,12,7,11,7,2,6,2,2,11,2,2,5,6,6,2,2,2,5,10,6,11,1,2,5,2,1,1,2,2,5,2,5,2,10,10,2,12,2,1,1,1,1,2,2,1,2, +1,1,2,2,2,2,1,1,1,1,1,1,2,2,1,1,2,2,5,2,2,2,2,1,2,13,2,1,2,5,2,5,2,2,2,2,2,13,7,7,5,2,2,2,2,2,1,1,1,1,2,5,1,2,5,5,10,1,6,7,21,1,2,2,7,2,5,2,2,11,7,6,1,0,1,1,1,1,1,1,1,1,1,0,2,1,0,2,2,7,13,7,7,2,11,5,7,7,2,1,2,1,1,1,2,1,2,1,2,2,2,12,2,7,13,2,2,12,7,11,14,2,14,7,13,13,7,2,2,6,2,2,2,1,1,1,2,2,1,2,5,2,2,2,2,5,2,2,2,5,2,2,6,1,5,2,6,1,6,1,2,14,7,7,2,1,2,6,2,1,7,14,2,2,1,1,2,6,1,2,12,11,6,5,2,5,5,2,2,1,1,1,2,2,6,1,2,6,6,6,1,2,2,1,1,2,2,2,1,1,1,1,1,0,1,1,1,2,12,2,5,1,1,5,10,1,1,1,1,1,1,2,2,1,2,2,13,2,2,5,2,2,5,2,2,2,13,2,2,2,2,2,2,11,2,6,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,12,6,10,11,7,2,2,2,11,6,2,1,2,7,11,6,2,2,2,11,1,12,10,2,2,5,1,1,5,2,2,6,1,2,11,26,6,9,6,1,1,1,1,5,2,2,6, +1,1,1,1,5,2,5,1,1,1,1,2,5,2,1,2,5,2,2,6,7,5,2,2,11,7,6,2,2,2,1,2,5,1,2,5,2,7,11,7,2,2,6,13,2,1,1,1,1,2,1,1,1,1,2,5,5,5,1,2,2,2,2,6,5,2,2,5,2,13,11,2,1,1,1,0,1,1,1,2,0,1,0,2,1,0,1,1,2,13,1,2,7,13,11,11,10,14,1,0,2,1,1,0,1,6,2,1,2,6,5,7,2,12,6,1,2,2,2,21,2,13,21,14,7,13,2,2,5,2,2,2,2,5,2,2,5,2,1,2,1,2,2,5,2,2,2,2,5,2,1,5,2,2,2,2,2,5,2,2,5,13,5,5,2,1,1,2,1,1,13,2,2,13,0,1,2,5,2,12,7,14,7,1,2,6,2,5,1,2,2,5,2,5,1,2,5,7,7,2,6,1,2,6,1,1,5,2,1,1,1,1,1,1,1,1,1,2,12,1,12,5,5,10,2,1,1,2,1,1,1,5,1,2,2,5,11,2,2,2,5,2,2,2,10,13,5,2,5,2,2,11,2,6,7,6,2,6,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,5,11,11,7,6,2,2,5,2,5,1,6,2,11,5,6,2,5,2,12,10,10,2,9,2,2,2,1,1,1,1,2,11,2,21,10,10,10,2,1,1,1,1,1,2,5,1, +1,2,1,1,2,2,2,1,1,1,1,6,1,2,2,6,2,9,6,1,2,2,11,2,13,13,2,1,2,6,1,1,2,1,2,2,13,26,2,6,2,5,7,2,1,2,1,1,2,2,1,1,1,2,2,2,5,2,5,2,5,2,10,1,2,1,2,11,13,7,2,2,2,1,0,1,2,2,1,5,1,1,1,0,0,2,1,2,7,5,6,5,7,13,21,14,14,13,1,1,1,1,0,1,1,2,1,5,2,1,5,2,6,13,1,1,1,2,7,10,2,5,13,6,2,7,6,1,1,2,5,2,2,2,2,6,2,2,2,1,5,2,5,2,2,5,2,1,2,1,0,1,2,6,1,5,1,2,2,2,13,6,7,7,1,1,1,1,2,2,7,2,5,2,1,1,2,5,2,2,13,12,6,2,5,2,7,2,6,1,6,2,2,2,6,2,2,13,2,6,1,5,2,2,5,1,2,1,2,1,1,1,1,0,1,1,1,2,6,2,5,2,2,2,2,1,1,1,1,1,2,1,2,5,2,12,10,2,6,1,1,2,5,11,11,2,6,2,2,2,11,2,6,7,6,6,1,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,11,7,11,6,2,2,2,2,2,6,1,2,2,2,11,2,2,2,5,9,10,5,2,2,2,5,1,1,1,2,2,5,1,13,10,11,1,2,1,1,1,1,2,1,2,6, +1,5,2,1,2,5,1,2,2,1,1,1,2,2,5,2,2,2,1,2,5,11,11,11,11,13,1,1,1,1,1,1,1,2,5,2,2,2,2,7,2,10,10,2,0,1,2,1,2,2,2,1,1,1,2,5,5,2,2,6,2,11,2,5,2,2,12,1,7,13,2,2,2,1,1,1,1,1,2,2,1,1,1,1,1,1,2,2,13,7,6,7,14,30,21,14,13,2,6,1,1,1,1,1,1,2,2,2,1,2,13,2,2,13,2,1,2,14,7,6,5,7,7,7,11,13,2,2,2,2,2,2,6,1,2,7,2,2,9,2,2,13,1,13,2,2,2,2,2,2,6,2,5,2,2,2,2,6,2,5,13,6,13,14,1,1,0,2,5,6,6,2,2,2,5,1,2,2,6,1,7,2,2,2,2,5,2,6,1,5,2,2,2,6,1,2,2,7,2,2,2,6,1,2,2,6,2,1,5,1,1,1,1,1,1,2,1,1,2,2,2,6,2,1,2,2,1,2,0,1,1,1,1,2,1,2,12,7,2,2,5,2,2,14,11,2,2,2,6,1,11,6,2,11,5,2,7,2,2,1,1,1,1,1,1,1,1,1,1,1,1,5,2,12,10,7,10,11,6,2,2,5,6,2,2,11,6,2,9,2,6,9,2,2,2,2,2,2,5,2,1,1,1,5,2,1,11,12,13,2,5,1,1,1,2,1,1,5,2,2, +2,2,2,5,6,7,1,2,5,2,2,1,5,2,2,1,5,2,5,2,2,13,12,1,13,26,2,2,1,1,1,2,1,1,1,1,2,13,12,7,5,5,7,6,1,1,1,1,2,2,1,1,0,1,2,2,2,2,5,1,2,2,2,1,2,13,7,2,13,2,2,2,1,2,1,1,2,2,2,6,1,0,2,1,2,2,5,13,2,2,5,14,13,13,17,12,13,1,1,2,1,1,2,1,1,2,5,1,1,2,5,1,5,2,1,1,13,1,12,1,11,2,7,7,7,7,2,5,2,2,12,6,5,2,5,12,2,2,2,2,5,2,13,1,2,5,2,5,2,5,2,1,2,2,6,2,5,2,2,5,14,2,2,13,1,2,1,2,2,13,7,2,2,6,2,2,2,5,2,2,6,1,1,1,6,2,6,1,2,2,1,5,2,5,1,5,13,12,6,1,2,2,1,2,5,2,2,1,2,1,1,1,1,1,1,1,1,2,25,28,2,1,1,2,5,1,1,1,1,1,2,1,1,5,2,13,7,2,2,5,2,2,13,13,2,2,6,1,2,6,6,2,11,6,2,2,6,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,11,7,7,11,2,2,5,2,2,5,2,2,2,11,2,2,2,2,6,7,11,1,6,2,2,2,1,2,1,1,1,2,11,13,10,2,1,1,1,1,1,1,2,1,2,2, +7,1,1,1,2,10,1,10,10,1,1,1,2,2,1,2,2,2,2,2,10,7,11,2,6,1,2,1,1,1,1,1,1,1,1,1,6,2,2,2,13,13,11,2,2,0,1,1,1,2,1,1,1,1,2,2,5,2,2,2,5,2,6,1,10,11,2,6,2,7,2,6,1,0,1,2,2,2,13,5,0,1,0,1,1,2,5,7,6,13,7,6,14,14,13,6,7,2,2,1,1,1,2,5,1,1,1,1,1,2,2,1,2,1,5,2,5,2,5,6,5,7,11,13,11,13,2,2,2,2,13,6,2,5,13,2,2,2,2,5,2,6,2,2,6,1,1,2,2,1,2,1,2,5,2,2,2,2,6,1,2,6,14,13,1,1,1,1,2,2,6,2,5,2,2,5,2,2,2,1,1,1,1,2,2,7,2,1,5,2,2,2,5,2,1,2,5,6,1,1,5,2,5,2,2,2,1,6,1,1,1,1,2,1,1,2,2,1,65,5,12,1,2,2,2,2,1,5,1,1,1,1,1,2,2,12,10,2,2,2,2,6,11,11,2,2,2,5,2,2,2,2,11,6,13,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,25,7,7,11,10,2,2,6,1,11,2,2,25,6,6,11,2,2,10,2,10,6,2,2,2,5,1,1,2,1,1,1,2,11,13,2,2,1,1,1,2,1,1,5,2,12,2, +2,5,2,1,5,10,2,10,1,1,1,1,2,5,1,1,2,1,1,1,2,10,2,2,2,2,5,1,1,1,1,1,1,1,1,2,2,2,2,13,13,14,11,2,1,2,0,1,1,2,2,1,0,2,2,2,2,1,5,2,2,2,2,1,5,2,2,5,10,11,2,7,0,2,1,0,2,5,2,6,1,1,1,1,1,6,13,5,13,14,11,16,21,13,7,13,13,0,2,1,1,1,2,1,1,2,1,1,1,13,1,1,2,5,7,2,2,2,5,5,13,28,11,13,13,7,6,1,2,5,7,2,11,7,13,2,2,5,2,2,6,5,1,6,1,2,1,6,1,6,1,1,2,2,2,5,2,5,2,2,6,1,14,13,2,2,6,1,2,13,2,2,2,6,1,2,1,1,1,1,1,2,1,2,5,7,6,2,2,2,6,1,6,1,1,2,13,1,2,2,2,5,2,2,5,2,2,1,2,1,2,38,2,1,1,5,1,1,5,38,1,1,2,5,2,2,1,1,1,1,1,2,1,2,5,7,1,2,5,2,5,2,13,7,6,2,5,2,2,5,2,11,7,7,2,6,2,2,5,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,7,11,10,7,5,2,2,2,6,1,2,2,10,7,2,6,9,6,7,11,5,2,2,6,2,5,1,1,1,1,2,5,26,6,9,5,1,1,1,1,1,2,2,2,10,2, +2,1,1,1,2,2,5,2,2,1,1,1,2,2,1,1,1,1,5,1,1,2,5,2,2,6,1,1,1,2,1,1,1,2,1,5,7,6,7,12,21,7,12,2,0,2,1,2,1,2,1,2,1,1,1,2,2,1,1,2,5,2,2,2,2,11,5,7,2,5,10,11,0,2,0,1,2,2,2,7,0,1,1,1,2,2,14,11,11,13,16,14,8,2,21,11,2,2,1,1,0,1,1,1,1,1,1,2,5,7,6,5,7,2,2,2,5,2,2,13,7,11,13,13,7,13,2,2,2,2,5,7,7,7,13,2,2,2,2,2,7,2,6,7,2,6,1,2,6,1,5,1,2,6,1,2,2,2,2,5,2,5,13,6,2,6,2,5,7,2,7,2,2,1,2,2,2,1,2,2,1,5,1,2,2,7,1,2,2,6,1,2,2,2,1,2,13,1,6,2,5,2,1,1,6,2,5,2,1,2,2,1,1,2,1,1,1,2,1,0,1,1,1,2,5,2,1,1,1,1,1,1,6,2,12,2,2,2,2,2,2,2,21,6,2,2,2,2,5,2,5,2,11,6,5,7,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,12,1,10,2,2,2,5,6,2,2,5,6,5,2,5,2,2,11,11,7,2,2,6,1,2,2,1,2,1,1,1,5,26,5,9,2,1,1,1,2,1,1,6,9,12,0, +2,6,1,1,2,5,0,2,5,2,1,1,5,2,1,1,1,2,1,5,2,10,1,5,2,1,2,1,5,2,2,2,1,1,2,2,11,2,5,21,13,13,7,1,1,1,0,1,1,2,1,1,1,2,1,2,5,2,1,1,2,5,2,5,5,2,2,6,5,7,10,2,1,0,2,1,1,2,5,2,1,1,2,2,2,10,11,12,6,14,14,11,7,13,12,7,2,1,1,1,1,1,6,1,1,2,1,1,2,2,1,11,2,2,1,2,2,6,2,7,21,13,15,13,13,7,2,5,2,2,2,13,13,7,7,6,1,1,1,2,13,7,7,2,13,1,2,5,2,2,2,1,2,2,6,2,5,2,2,2,2,13,14,6,2,5,2,2,5,2,7,1,1,1,12,7,2,0,1,1,2,2,2,6,2,5,1,2,5,2,2,12,2,2,6,7,7,13,2,2,2,5,2,2,7,2,2,1,1,1,5,1,1,1,1,1,2,1,0,1,1,1,1,2,2,1,1,1,1,1,2,2,5,2,2,6,1,6,2,5,1,2,13,2,5,1,1,6,2,2,2,2,11,7,11,2,6,5,2,1,1,1,1,1,1,1,1,1,1,1,1,5,2,5,7,10,13,2,5,2,2,2,11,2,2,5,11,2,5,2,5,11,11,2,6,1,2,5,2,2,1,1,1,2,5,11,11,2,2,1,1,1,2,1,1,1,1,2,5,2, +2,2,2,1,6,2,5,1,2,2,5,2,2,5,1,1,1,1,2,2,10,26,5,2,1,2,1,1,2,1,5,2,1,1,5,2,2,2,13,13,13,7,12,1,2,2,1,1,0,2,1,1,0,1,1,2,2,2,1,1,1,2,2,2,2,7,5,7,11,7,13,2,1,1,1,1,1,1,2,2,1,1,2,2,5,21,7,2,29,14,11,7,13,7,7,6,2,1,1,1,0,1,2,1,1,1,2,2,5,2,5,5,2,1,0,1,2,2,6,13,13,7,14,13,13,6,2,2,2,5,5,13,7,13,7,2,2,1,2,5,7,7,6,2,7,2,6,1,2,5,2,1,2,5,2,2,6,2,5,2,5,13,7,6,1,2,2,1,2,7,13,1,2,1,1,0,0,2,0,1,1,2,6,7,2,2,1,1,2,2,12,2,2,6,1,7,5,7,2,2,5,2,5,1,6,2,5,2,1,2,2,1,1,1,1,0,12,2,1,1,1,1,1,1,6,1,2,1,1,1,1,5,7,1,5,2,5,1,2,2,2,5,13,2,2,2,6,1,2,5,2,2,6,2,10,2,5,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,9,11,1,5,2,2,2,5,2,2,2,2,6,7,2,10,2,5,2,11,11,2,2,5,2,2,2,5,1,1,2,1,2,26,5,2,25,2,1,1,5,1,2,1,1,9,9,2, +1,2,5,1,2,2,2,1,5,2,5,2,2,10,5,2,1,6,1,6,1,1,1,5,2,2,5,2,2,2,2,2,10,2,2,11,7,11,2,6,7,13,5,2,6,1,2,5,2,11,2,1,1,1,1,2,5,2,1,1,1,2,5,6,12,11,10,12,13,14,13,2,1,1,1,1,1,1,2,2,1,1,1,7,14,14,22,5,13,7,5,14,7,7,6,2,5,1,1,0,1,1,2,1,1,2,5,5,2,5,7,7,2,1,1,2,5,7,2,21,11,14,13,13,13,6,2,2,5,2,2,21,7,13,12,1,1,1,1,2,7,7,2,7,7,2,1,2,6,2,1,1,2,2,2,5,2,2,2,2,2,21,13,2,2,6,2,6,5,7,6,2,1,1,0,2,1,1,1,1,1,2,5,2,2,5,1,2,6,1,14,2,2,2,5,2,6,7,2,6,2,2,2,13,1,2,2,2,5,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,5,1,1,1,2,2,2,2,2,2,6,1,1,2,1,10,2,1,6,1,2,6,1,6,1,11,6,6,2,2,6,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,7,2,13,2,5,2,2,11,2,6,2,12,6,2,5,2,2,10,11,5,2,2,5,1,2,1,1,1,1,6,7,11,5,1,2,1,1,2,1,1,1,5,2,6,10,2, +1,1,2,13,10,1,1,5,1,5,9,2,5,5,2,2,2,1,1,1,1,2,1,2,2,2,6,1,1,5,2,2,1,2,2,5,5,7,11,2,2,5,7,1,2,0,1,1,2,7,1,2,0,1,5,2,2,5,1,1,2,1,1,2,11,7,13,7,10,21,6,2,1,1,2,1,1,1,2,2,1,1,1,2,13,21,7,2,13,13,11,5,2,13,13,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,5,2,2,5,1,1,2,2,2,13,13,13,13,13,13,2,2,2,2,2,13,13,13,13,7,2,1,1,2,5,7,13,7,6,7,2,2,5,2,5,1,1,2,2,5,2,2,2,5,2,7,13,2,6,2,2,2,7,7,7,7,2,1,0,2,0,2,1,1,1,1,2,2,2,6,1,1,6,1,7,6,2,5,2,2,7,7,5,2,2,2,6,1,2,6,7,6,2,1,1,1,5,1,1,1,1,1,0,2,1,1,1,1,2,1,1,6,2,1,1,2,7,5,1,2,2,5,1,2,1,2,12,2,2,6,1,2,5,2,2,2,5,10,6,2,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,5,10,10,7,2,2,1,6,2,5,2,2,2,2,2,2,2,5,2,13,6,2,2,6,2,5,2,1,6,1,5,1,26,2,2,2,5,0,2,1,1,2,1,2,5,10,2,1, +1,1,2,13,2,1,1,2,2,5,2,1,1,2,2,5,2,1,1,1,2,5,2,2,5,2,2,2,2,2,5,2,1,2,6,1,11,2,7,2,5,5,10,1,5,1,1,1,2,11,0,1,1,1,2,2,6,2,1,1,1,2,13,2,12,6,5,13,13,21,11,0,2,1,1,2,2,5,1,13,1,2,5,13,7,16,2,12,13,13,6,13,14,13,2,2,1,1,1,1,1,1,1,1,1,2,1,1,2,2,6,2,1,1,2,12,1,6,13,21,13,11,13,13,11,6,2,5,2,2,13,14,11,13,6,1,2,2,6,1,7,7,2,2,7,6,2,2,2,2,2,1,2,6,2,2,2,5,2,2,21,6,7,6,6,6,6,7,6,14,7,0,2,0,2,1,1,1,1,2,1,2,6,2,2,1,1,2,2,13,2,2,1,2,6,7,7,2,5,2,5,2,6,2,7,7,6,6,1,2,2,2,1,1,1,1,1,1,0,1,1,1,1,2,5,1,2,2,2,1,2,2,1,6,1,6,2,2,5,1,2,12,1,1,1,2,5,2,2,5,2,2,13,6,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,5,6,5,1,2,2,2,11,6,2,11,6,5,2,2,2,13,5,2,1,2,2,1,2,1,1,2,1,2,10,2,5,9,2,5,1,1,1,1,1,2,2,5,2,1, +1,1,5,13,5,1,2,11,9,2,1,1,1,2,1,1,2,1,2,1,1,1,1,1,2,2,5,1,1,1,2,1,2,1,2,5,10,11,10,2,10,7,13,1,2,2,1,1,1,5,1,1,1,1,2,5,1,2,2,5,2,5,2,2,13,13,15,13,21,13,2,2,1,2,5,1,5,2,16,5,2,2,14,6,2,13,2,14,7,7,7,13,13,11,2,2,1,2,1,1,1,2,2,2,2,2,1,2,2,6,7,2,6,2,12,5,2,12,14,16,13,13,13,14,11,2,2,2,2,13,13,14,13,7,2,1,1,1,2,5,7,2,7,5,7,1,2,13,2,5,1,1,1,2,2,2,2,2,2,2,16,12,6,6,2,6,13,7,7,8,7,1,0,2,0,0,2,1,1,1,2,7,14,2,5,5,1,2,5,1,2,2,5,2,2,7,2,6,2,2,2,2,2,7,7,6,7,2,6,1,6,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,5,2,5,1,1,2,1,5,2,2,6,2,1,2,10,2,5,1,1,2,2,6,2,5,2,11,2,2,5,2,5,2,1,1,1,1,1,1,1,1,1,1,1,1,2,5,9,7,5,2,2,2,5,2,6,2,10,11,6,6,6,2,2,6,11,2,2,9,2,5,2,2,9,1,1,6,10,5,2,2,5,9,2,1,1,1,5,1,2,6,9,9,2, +1,2,21,7,2,1,1,2,1,1,1,2,1,2,5,2,9,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,1,5,2,10,2,5,6,2,2,5,2,2,1,5,0,1,1,2,1,2,1,1,2,2,5,2,1,1,2,7,2,13,13,13,14,28,13,13,6,1,1,2,2,2,5,2,13,13,6,7,6,7,7,16,6,7,13,7,11,13,12,2,2,1,2,2,2,1,1,1,2,2,2,7,1,2,7,7,14,6,1,7,2,2,13,21,13,21,15,21,14,13,13,2,6,1,6,1,14,13,7,11,2,1,1,1,2,7,5,7,2,7,2,1,5,2,2,2,2,1,1,2,5,2,5,6,5,7,13,2,7,2,2,13,1,6,7,7,6,2,0,2,0,2,0,1,1,1,2,5,2,2,5,2,1,5,6,2,5,2,2,13,7,7,6,2,2,2,5,2,6,7,2,6,6,2,1,5,2,1,1,1,1,1,1,0,2,1,1,1,1,1,1,2,1,1,1,2,1,2,1,1,2,2,5,2,2,2,2,2,1,1,1,2,1,5,1,2,2,2,10,6,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,5,5,2,5,2,6,2,5,2,2,11,6,2,11,2,2,2,2,26,2,1,6,1,1,2,2,2,1,2,2,5,2,2,6,9,2,2,5,2,1,2,1,5,6,9,5,1, +1,10,5,5,2,1,2,1,1,1,1,5,1,2,2,2,2,1,1,1,1,1,1,5,1,2,1,2,5,1,2,5,2,2,2,2,5,2,10,2,1,5,10,1,1,2,2,1,1,5,1,1,1,2,2,5,2,5,2,1,5,11,2,7,21,21,21,16,13,13,2,1,1,1,1,1,1,2,12,6,7,7,13,7,13,7,6,7,2,11,14,7,2,1,2,1,1,2,2,2,1,1,2,2,2,13,1,2,21,13,2,2,2,6,2,5,21,13,14,14,21,13,29,14,11,2,2,5,2,5,13,13,7,11,2,1,1,1,2,2,14,7,2,7,6,1,1,2,5,5,1,1,0,1,2,2,2,2,2,13,7,6,7,6,6,7,2,7,7,7,7,2,0,2,1,0,2,2,1,1,2,2,2,6,2,5,1,2,1,2,1,1,2,2,7,7,7,6,2,5,2,2,6,6,7,7,5,6,1,2,2,1,1,1,1,1,0,2,1,1,1,1,1,1,1,2,1,2,2,1,6,1,1,1,2,5,2,2,2,6,1,6,1,2,6,1,1,2,6,2,5,11,6,6,2,6,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,12,10,2,2,1,2,2,2,6,1,2,11,7,6,2,11,2,10,7,2,1,2,2,1,1,5,2,1,1,5,10,2,5,2,2,6,1,1,1,2,1,2,1,10,2,2,1, +5,10,2,1,1,1,5,2,2,1,1,1,1,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,5,2,5,2,5,1,1,5,5,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,1,1,6,2,12,13,10,11,13,7,5,13,6,0,1,2,2,1,1,2,12,2,12,7,2,6,7,14,6,7,13,7,2,2,1,1,5,1,1,1,2,1,0,1,2,5,7,11,2,2,13,13,2,2,5,5,2,7,17,13,21,14,13,13,13,14,2,2,2,2,2,11,13,13,13,11,2,1,1,1,6,2,7,7,6,7,2,1,6,2,7,2,5,1,1,1,2,2,5,2,6,7,2,6,2,2,2,2,13,6,14,7,2,1,1,0,0,2,1,2,5,1,2,7,5,2,2,2,5,2,1,1,1,6,2,7,6,13,1,5,2,2,2,2,7,6,7,6,1,2,2,6,1,1,1,1,1,1,1,1,0,1,1,2,1,1,5,1,6,2,5,1,1,1,2,1,2,2,2,2,5,1,1,2,5,2,1,2,6,9,2,2,2,11,11,2,6,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,12,1,6,1,1,2,5,2,9,5,2,6,11,6,6,2,5,5,10,2,2,2,10,1,1,2,1,1,2,9,5,1,2,5,26,1,1,1,1,2,1,5,9,10,5,5,2, +2,1,1,1,1,2,1,2,2,2,1,1,2,2,1,2,5,1,1,1,1,1,1,1,2,1,1,1,2,1,1,1,1,1,2,10,2,5,2,2,5,1,2,1,1,2,2,1,1,21,1,1,1,1,2,2,5,2,2,2,2,14,15,11,29,14,21,13,11,13,2,2,1,1,1,1,2,2,6,2,13,2,2,13,7,7,13,7,7,11,6,1,1,1,2,1,5,2,5,1,1,1,2,2,7,2,1,11,14,6,2,2,2,2,11,13,29,13,13,8,13,13,13,13,6,2,5,2,5,13,13,7,7,2,2,1,1,1,2,2,7,7,2,2,5,2,2,2,13,2,2,1,2,1,2,1,2,2,5,13,2,6,7,2,12,11,6,6,7,6,2,2,1,1,2,0,2,2,2,1,6,1,2,2,5,2,2,2,5,2,2,1,2,7,2,6,2,2,2,6,1,6,6,13,7,2,2,5,2,2,2,1,1,1,1,1,0,2,1,1,2,2,2,1,1,1,1,2,2,6,1,1,5,1,1,2,2,2,2,5,2,1,1,1,1,1,2,2,2,5,2,11,2,6,2,2,5,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,12,1,1,1,2,1,11,2,2,2,25,11,2,2,9,2,13,2,1,5,2,2,1,1,2,1,5,2,5,9,6,2,2,2,1,1,1,2,5,5,9,7,9,2,5,1, +1,2,1,1,1,1,1,5,2,1,1,2,5,2,2,2,2,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,2,5,2,10,2,10,2,1,2,7,1,1,6,2,1,2,12,2,2,2,1,2,2,5,2,5,2,1,13,21,7,14,29,29,14,13,11,13,2,1,2,1,1,1,1,1,2,2,2,2,13,11,13,7,11,2,11,6,1,1,1,2,1,1,2,2,2,2,1,1,2,6,5,1,1,13,21,6,1,2,2,12,21,11,14,11,14,13,13,13,14,11,2,2,2,2,12,13,13,7,7,6,2,1,2,2,2,13,7,6,2,6,2,2,5,2,2,2,5,1,2,1,2,5,2,2,2,7,6,1,2,2,6,6,2,6,7,7,6,0,1,0,1,0,2,2,5,1,2,5,2,7,2,2,5,2,2,1,6,6,2,7,6,2,2,2,5,2,5,2,7,7,13,6,2,2,5,2,2,2,1,1,1,1,1,0,2,1,1,2,2,1,2,1,1,2,5,1,1,1,2,2,5,2,5,2,5,2,5,2,2,2,6,1,5,2,2,2,5,11,11,2,2,6,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,5,2,9,2,5,1,2,5,2,2,2,5,2,5,2,10,11,2,10,7,2,2,2,5,2,1,2,2,1,2,25,1,2,2,9,11,0,2,1,1,1,2,5,9,2,2,12,2,5, +1,1,1,5,1,2,2,2,2,1,1,1,2,5,1,2,1,1,1,1,1,1,1,2,6,5,5,2,2,1,1,1,1,2,5,5,2,2,2,5,10,12,1,1,2,2,2,13,2,2,2,1,1,2,5,2,2,2,6,1,11,7,13,13,14,21,14,13,13,14,2,1,5,2,2,1,2,5,2,13,2,14,2,7,7,11,7,7,7,2,2,1,2,1,2,2,2,9,2,2,1,1,2,2,2,2,2,13,14,2,2,6,7,7,11,13,16,11,17,11,6,16,13,13,2,2,1,2,7,13,11,13,2,2,1,2,6,1,7,7,7,2,5,2,2,2,6,1,7,5,2,2,1,2,2,1,2,5,13,7,2,2,7,7,5,2,6,7,7,7,2,2,1,1,1,1,2,7,2,2,2,2,6,2,2,6,2,2,1,2,2,7,2,7,2,2,2,5,2,2,2,2,13,5,7,2,6,2,2,5,2,1,1,1,1,1,0,2,1,1,1,1,2,2,1,1,1,1,2,2,1,1,1,2,1,2,2,2,2,2,2,5,2,1,2,2,6,2,5,2,2,11,5,11,2,2,2,6,1,2,1,1,1,1,1,1,1,1,1,1,2,2,7,6,2,2,1,1,2,2,11,2,2,9,11,2,6,1,10,10,11,5,1,2,2,2,1,5,1,2,2,2,6,2,5,2,5,1,1,1,1,1,9,10,9,1,25,1,9,2, +1,1,2,1,1,5,5,2,5,2,1,1,1,1,1,2,2,1,1,1,1,1,1,1,2,2,1,1,5,2,2,2,1,2,2,11,10,5,2,5,21,2,2,5,2,5,13,1,2,2,2,2,1,2,2,2,5,2,2,2,11,7,14,16,29,16,13,13,2,6,2,1,2,2,2,5,1,2,2,6,7,13,6,13,7,7,2,11,13,6,1,2,1,2,5,1,2,2,2,5,0,2,5,2,2,1,7,13,7,6,2,2,12,6,7,16,11,17,13,8,13,11,7,2,6,2,2,2,13,7,7,2,14,2,1,2,2,2,2,7,2,7,2,2,5,6,1,2,6,2,1,2,5,1,2,2,2,2,5,2,2,6,2,13,6,7,6,14,7,13,2,0,1,1,1,1,2,7,2,5,2,6,2,5,2,5,2,6,1,5,7,7,2,2,5,2,5,2,2,2,6,2,2,13,7,2,2,2,6,2,2,1,1,1,1,1,1,0,0,2,0,1,1,2,1,1,1,1,5,2,2,2,1,1,1,2,6,2,9,2,5,1,2,1,2,5,2,2,2,6,2,7,7,11,2,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,11,2,2,1,2,1,2,5,2,1,2,5,2,5,11,6,10,11,2,2,2,5,2,6,1,1,1,5,6,2,2,2,2,2,1,5,1,1,1,1,25,2,5,5,5,9,2,2, +1,1,2,1,1,2,5,2,2,2,1,1,1,1,2,5,1,1,1,0,1,1,1,1,1,5,1,2,2,2,5,1,2,2,5,13,13,2,2,5,2,1,2,1,2,2,2,1,1,6,1,1,2,2,2,5,2,2,5,2,7,13,29,29,16,16,11,6,5,13,1,2,2,5,2,2,2,2,2,13,13,2,6,14,2,7,7,13,13,2,5,1,2,2,1,2,5,2,5,1,1,2,2,5,2,2,13,13,13,1,7,7,13,7,14,16,13,11,11,13,13,17,6,2,6,2,2,5,14,6,6,7,6,2,1,2,1,2,7,7,13,2,6,1,2,2,2,6,1,2,1,6,2,1,5,2,14,2,2,2,5,1,2,7,13,1,7,13,7,7,6,1,0,2,0,1,2,2,7,1,2,2,2,2,2,2,2,1,2,2,7,7,6,2,1,2,2,2,2,5,2,2,13,7,6,6,5,1,2,2,5,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,2,5,2,2,2,2,2,6,1,2,2,5,2,1,5,2,5,2,10,11,2,2,2,2,1,5,1,1,1,1,1,2,1,1,1,1,1,2,12,6,2,2,5,1,2,1,2,2,1,5,2,10,2,13,5,5,2,5,2,1,2,2,1,1,6,1,2,10,2,25,6,2,2,1,2,1,1,2,2,2,25,1,5,2,2,6,1, +1,1,1,2,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,2,1,2,5,2,2,1,5,2,5,11,5,2,13,5,1,1,1,1,6,7,11,0,1,2,1,1,1,2,7,2,5,2,2,6,13,29,16,17,29,13,11,6,11,6,2,2,2,2,2,2,5,1,11,13,7,6,7,7,6,7,13,14,16,2,2,2,2,1,5,2,2,6,2,1,5,1,5,2,5,5,21,11,2,2,12,2,11,7,29,16,13,11,17,11,17,13,17,2,2,2,6,7,13,7,7,8,6,2,1,1,1,2,13,7,2,7,2,6,1,5,2,2,2,13,1,2,1,2,2,2,13,1,13,2,2,6,7,13,2,6,6,7,6,7,6,6,0,1,1,0,2,5,2,2,2,5,2,5,2,1,1,2,2,2,6,6,2,2,1,6,1,6,1,5,2,2,11,6,2,7,13,2,5,2,2,1,1,1,1,1,1,0,2,1,1,1,1,2,1,1,2,1,2,2,5,1,1,2,2,2,5,2,5,2,2,1,5,2,2,2,2,2,2,2,6,10,2,7,6,2,1,1,2,2,5,1,1,1,1,1,1,1,1,1,2,2,7,2,13,2,1,2,2,5,1,2,2,2,6,2,13,2,11,2,2,1,2,5,2,1,1,2,1,5,7,6,1,2,6,2,5,2,1,1,1,2,5,9,2,2,25,2,2,2, +1,1,1,1,1,1,5,2,5,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,11,7,11,14,5,0,1,2,5,1,13,2,1,5,2,1,0,1,2,2,6,2,5,2,7,21,14,29,14,30,13,13,22,16,12,2,2,11,2,2,2,2,6,28,14,8,2,11,13,14,13,14,16,17,2,2,5,2,2,2,2,7,2,2,2,1,2,2,2,2,13,13,7,6,7,6,7,13,7,16,29,7,13,13,14,13,11,11,6,2,6,2,7,6,7,7,6,7,2,2,1,1,2,7,6,6,2,2,2,6,2,5,2,5,7,2,2,2,2,13,13,1,6,2,2,5,2,6,2,2,5,6,7,7,13,2,2,2,1,1,1,2,2,2,5,1,2,2,2,2,2,1,2,5,1,2,7,6,1,2,1,5,2,6,7,2,12,7,7,6,6,2,2,2,2,6,1,1,1,0,2,1,1,0,2,1,1,1,1,1,1,1,1,2,1,2,1,6,2,6,1,2,2,1,2,1,2,1,5,2,2,6,5,1,11,1,2,13,11,2,6,1,6,2,5,2,2,1,1,1,1,1,1,1,1,2,12,6,6,2,2,1,5,2,2,1,6,1,6,2,10,11,10,10,2,1,1,5,2,2,1,1,2,5,10,10,1,9,11,1,2,1,2,1,2,5,2,9,5,1,9,2,2,9,2, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,2,5,13,2,16,2,1,1,2,2,5,5,5,2,2,2,1,1,1,6,2,2,2,1,2,13,13,21,14,21,29,14,14,30,30,13,2,2,13,12,6,2,5,2,36,14,7,7,13,13,14,13,14,29,13,2,2,2,2,2,2,2,7,2,2,2,2,2,5,2,6,21,6,7,2,2,2,13,6,16,29,14,11,13,7,13,13,17,11,6,2,6,2,14,6,6,6,7,6,2,1,1,1,2,7,7,6,6,6,6,2,2,2,2,1,2,5,2,6,5,7,2,6,5,2,2,2,2,11,5,13,1,11,2,13,7,6,6,0,1,1,1,1,2,5,2,2,2,1,0,1,1,1,1,2,2,7,7,2,1,2,2,2,2,2,7,2,11,11,6,2,6,5,1,2,5,2,1,1,1,1,0,2,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,2,6,2,6,1,6,9,2,2,2,2,2,6,7,7,2,6,2,6,1,2,2,2,6,1,5,1,1,1,1,1,1,1,2,10,5,2,2,1,2,2,1,2,2,11,2,6,7,13,11,5,1,1,1,2,2,2,1,2,5,1,11,1,6,6,10,7,2,1,1,1,1,2,2,10,2,2,25,2,2,25,2, +1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,5,2,2,2,1,13,13,7,2,13,2,1,1,1,1,2,10,2,1,1,1,2,5,1,5,7,5,2,2,6,13,21,17,21,12,29,14,29,24,13,2,2,2,5,2,2,6,5,13,16,13,14,13,14,14,15,13,13,16,13,1,2,2,5,2,2,5,2,2,1,2,2,5,1,2,14,13,2,7,2,2,21,7,6,17,14,11,7,13,29,11,8,7,11,11,2,2,2,7,6,13,7,7,13,2,1,1,1,13,14,2,7,7,2,2,2,2,6,2,5,2,2,2,6,13,7,2,2,2,2,5,2,11,7,6,2,5,13,2,14,13,6,2,6,0,1,1,1,2,2,2,2,2,1,1,1,1,2,2,2,5,13,7,1,2,5,2,5,2,13,10,13,13,2,6,6,6,6,1,2,5,2,1,1,2,1,1,0,2,1,1,1,1,1,1,1,6,1,1,1,1,1,2,5,2,2,5,2,6,1,2,1,2,2,2,2,2,5,2,5,5,2,13,6,6,6,6,6,2,6,1,6,1,2,2,1,1,1,1,1,1,5,6,2,2,12,2,1,5,2,1,1,5,6,6,6,7,13,5,2,6,1,1,2,5,2,1,1,9,10,2,5,1,11,9,2,5,1,1,1,5,2,5,10,9,5,2,9,2,2,1, +2,1,1,1,1,1,1,1,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,2,6,9,2,5,2,2,5,2,5,6,21,13,11,11,14,6,1,1,1,2,12,12,1,1,0,2,2,2,2,2,2,2,5,1,2,21,21,23,15,30,36,30,36,17,14,6,2,2,2,2,5,2,13,21,7,14,29,29,29,14,13,13,13,16,13,0,2,2,2,1,6,2,2,2,5,2,5,2,5,5,21,2,5,11,6,2,13,6,6,22,13,11,7,17,15,13,13,13,11,13,6,2,13,7,7,11,7,6,8,6,1,1,2,7,7,6,14,7,6,2,2,6,1,2,2,2,2,13,2,7,2,6,2,13,2,2,2,5,7,7,2,2,14,2,13,6,7,6,6,2,2,1,1,2,2,2,1,1,1,0,2,1,2,1,2,7,13,6,2,1,2,2,2,2,2,2,2,11,7,6,6,7,2,6,2,6,2,1,1,0,0,2,1,0,1,1,1,1,1,2,1,1,1,5,2,1,1,1,2,2,5,2,2,2,1,5,2,2,6,5,1,2,2,10,2,2,2,10,11,6,6,6,6,1,2,5,2,5,2,2,2,2,1,1,1,1,2,10,2,6,2,2,2,2,1,1,2,1,26,11,11,7,7,2,5,1,1,1,2,2,6,5,2,2,2,1,1,6,13,5,2,1,1,1,1,2,2,10,12,1,2,2,2,5,2,1, +1,1,1,1,1,1,1,1,1,1,2,5,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,11,11,5,13,13,2,2,2,2,12,13,21,2,0,2,2,2,2,2,2,2,6,2,5,11,13,16,29,14,30,29,21,29,22,14,2,6,1,2,2,2,2,5,13,13,36,29,16,16,14,14,16,13,13,11,0,1,2,1,5,2,2,2,6,2,2,2,2,2,21,13,2,2,12,2,13,2,7,7,29,13,13,12,13,11,8,11,8,7,7,6,2,6,7,8,7,7,7,7,2,2,1,1,14,7,7,6,7,2,6,6,7,6,2,1,1,6,5,7,13,2,2,2,7,2,6,2,2,7,2,6,13,2,2,7,7,6,2,13,2,1,1,1,1,1,1,1,1,0,1,1,1,1,2,1,2,7,2,2,1,5,2,2,5,7,2,7,11,7,6,7,6,2,1,2,2,1,1,0,2,1,1,0,1,2,1,1,1,2,2,1,2,1,2,1,1,1,2,5,1,2,2,5,2,2,1,2,1,2,1,2,5,2,2,5,2,5,11,6,6,6,2,6,6,2,2,2,2,1,1,1,1,2,1,1,1,2,10,7,7,2,1,6,5,1,1,2,2,13,11,7,10,11,2,2,6,1,2,5,9,2,1,1,1,1,1,2,2,10,2,6,1,1,1,1,2,11,9,6,5,10,10,10,2,2,1, +2,1,6,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,6,5,2,1,2,1,5,13,13,7,11,0,1,2,2,13,2,21,2,1,5,6,5,2,1,2,11,2,2,2,13,13,21,21,29,22,13,22,43,14,14,6,1,2,6,2,2,2,11,6,16,23,16,16,13,29,14,13,16,13,6,2,1,1,2,2,2,5,7,2,2,2,5,2,9,14,2,12,7,2,11,2,2,21,13,16,13,13,16,11,8,13,8,13,11,11,6,2,6,7,7,13,7,6,6,2,1,1,2,7,6,1,7,14,2,2,7,16,7,2,6,1,2,2,2,2,5,2,2,5,2,2,6,1,13,2,2,13,6,13,13,7,6,2,7,1,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,7,6,2,5,2,2,2,5,2,13,2,12,2,11,6,7,2,2,5,2,1,1,1,1,1,1,1,1,1,1,0,2,1,2,1,1,5,1,1,1,1,1,2,2,2,5,2,2,2,5,2,5,2,2,2,6,1,2,11,6,6,2,11,5,6,6,7,6,1,2,1,1,2,1,2,2,1,1,1,1,1,5,10,10,10,9,2,2,2,1,1,5,2,2,26,6,10,2,5,2,2,1,2,2,5,1,2,1,1,1,2,5,27,21,2,1,2,1,1,1,5,1,9,10,6,10,10,11,5,11,0, +2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,6,1,2,2,2,2,2,1,5,2,7,13,11,7,5,6,5,5,5,10,10,13,2,2,12,5,13,1,1,5,2,2,5,5,13,2,13,11,13,17,21,29,16,6,7,2,6,2,5,2,12,11,14,14,29,16,16,16,21,14,13,14,29,13,6,2,1,1,1,1,5,5,2,5,1,2,1,2,10,7,2,13,2,1,11,2,2,6,13,16,13,13,15,13,13,11,13,8,11,13,6,2,7,7,7,13,6,7,13,2,6,1,2,7,11,6,14,6,6,6,7,35,7,13,2,2,5,2,5,2,2,5,2,2,2,2,2,13,7,2,13,7,13,7,8,11,2,5,2,1,1,1,0,2,1,1,1,1,1,2,1,1,1,1,6,1,2,2,2,2,6,2,2,2,2,5,2,11,13,6,13,25,2,1,1,1,0,1,0,2,1,1,1,1,0,1,1,1,6,2,1,1,1,1,2,1,1,2,2,5,1,5,2,2,2,1,2,1,5,2,9,6,2,5,10,7,11,7,2,7,7,6,2,5,2,25,2,5,2,1,2,1,1,1,1,1,2,11,9,5,2,5,2,1,1,1,2,2,10,11,10,10,10,2,2,1,2,5,2,2,6,2,1,1,1,1,2,13,10,2,1,1,1,1,1,6,9,6,6,10,6,6,6,2,10,2, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,5,2,5,2,2,1,5,21,11,13,5,2,2,13,2,6,5,12,0,2,5,2,5,2,1,2,2,5,2,13,7,2,13,7,14,23,30,36,22,29,16,11,7,13,13,13,13,11,14,29,13,16,29,13,29,13,14,14,17,13,2,2,2,1,2,2,2,2,6,2,2,2,2,2,13,5,2,10,2,12,2,10,7,11,16,29,17,13,16,13,17,13,8,11,11,6,6,6,14,8,6,7,7,6,2,7,1,1,2,14,2,2,14,6,2,6,2,14,7,2,2,2,6,2,2,2,5,2,2,13,2,5,2,14,7,2,7,7,7,2,14,6,6,2,1,1,1,1,1,1,1,0,2,1,0,1,0,1,1,1,2,2,6,2,5,5,7,2,5,13,11,11,11,11,11,7,7,2,2,1,1,1,1,1,1,0,2,1,0,2,1,1,1,1,2,1,1,1,1,1,1,1,1,2,10,2,2,2,6,9,1,2,1,2,1,2,1,2,2,2,11,2,11,2,2,2,7,6,6,6,2,2,2,2,2,2,1,1,5,2,2,6,1,6,5,2,1,2,2,1,2,2,2,5,10,10,9,13,1,5,2,2,1,2,2,2,2,2,5,1,1,1,11,10,5,2,1,1,2,1,2,2,2,11,6,6,10,6,6,5,11,2, +1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,1,1,1,2,5,2,2,2,2,2,6,1,10,21,13,13,2,1,6,13,21,11,2,2,0,1,11,2,2,5,1,2,2,5,11,6,5,5,11,7,30,23,34,68,11,22,17,13,11,7,6,2,21,13,11,11,14,17,21,14,36,13,21,29,14,11,2,6,1,1,2,6,1,6,1,2,2,2,5,6,5,2,13,2,14,13,12,2,2,7,16,21,14,13,11,13,13,16,13,11,13,6,6,2,7,7,13,6,7,7,6,7,1,1,7,14,2,2,14,2,2,6,2,14,13,2,5,1,2,2,2,5,2,6,5,2,2,2,2,21,13,5,7,7,2,7,6,13,2,2,2,1,1,1,0,2,0,2,0,1,1,1,1,1,2,6,1,5,2,2,2,2,5,1,2,2,2,5,2,2,13,5,2,2,1,0,1,1,0,1,0,2,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,2,2,5,2,2,2,1,1,5,2,2,1,2,2,5,2,7,11,6,2,6,6,5,13,6,2,2,6,2,1,2,1,1,1,2,1,6,1,1,2,1,5,2,2,5,1,1,2,2,10,10,10,10,2,5,2,1,1,2,5,2,25,2,5,2,1,1,5,10,10,2,1,2,1,1,1,2,5,9,11,6,6,6,10,6,10,11,2, +1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,6,1,1,1,1,5,2,1,1,1,1,1,1,1,5,2,2,2,21,13,10,11,5,2,21,16,14,10,1,1,1,1,5,2,12,2,5,2,5,2,5,2,2,2,2,21,29,43,47,18,12,31,29,13,13,13,13,13,15,2,14,22,21,30,15,29,30,13,16,13,13,13,6,1,1,2,5,5,5,2,2,6,2,2,2,12,6,5,21,5,6,6,1,1,2,13,6,2,13,6,6,1,7,15,8,11,8,7,6,2,6,7,11,13,6,8,7,7,2,1,7,7,1,6,7,2,6,6,2,14,6,2,1,2,5,2,6,1,2,2,5,7,6,6,7,7,2,2,6,2,7,13,7,7,6,2,2,1,1,0,1,1,1,0,1,1,1,0,2,1,2,2,2,2,5,2,5,2,2,2,5,1,1,1,2,2,13,13,2,1,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,5,2,2,2,6,1,1,2,1,5,2,2,5,2,2,5,9,7,11,2,2,13,7,7,2,2,5,2,2,5,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,5,2,10,12,10,1,10,5,2,1,1,1,2,9,2,2,2,2,1,6,1,5,2,1,5,2,1,1,1,1,1,10,6,6,6,7,6,10,6,10,2, +2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,5,2,2,5,2,2,6,1,2,6,2,2,2,5,10,11,13,5,5,14,21,14,26,2,2,1,1,2,13,5,2,2,1,1,2,2,2,5,1,2,11,14,30,37,34,29,11,34,14,17,21,21,16,21,21,14,22,29,16,22,21,36,22,14,15,13,14,13,6,1,2,5,2,2,2,2,5,2,5,1,5,7,11,7,13,1,5,7,2,2,2,2,7,8,11,2,2,2,13,17,11,15,11,6,2,6,13,8,11,11,7,7,7,7,1,1,7,5,2,13,2,2,7,6,1,13,2,2,1,1,2,2,7,2,13,2,2,2,2,7,2,13,2,5,2,7,13,7,7,6,2,6,1,1,1,1,1,1,1,1,1,1,1,1,0,1,2,13,5,2,2,2,2,2,2,5,1,6,2,5,2,2,13,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,2,1,2,2,1,1,1,1,1,1,1,2,10,2,1,1,1,1,2,1,2,2,2,6,1,6,6,7,7,2,5,11,6,13,2,2,2,5,2,2,5,1,1,1,1,5,2,2,1,1,2,2,1,2,5,1,1,2,1,25,2,2,12,6,2,5,1,1,2,2,5,2,11,6,11,2,2,10,5,2,2,1,1,2,1,1,2,2,1,11,6,6,6,6,6,5,6,2, +2,1,2,5,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,1,2,2,2,2,5,1,2,5,2,2,11,7,10,10,10,5,2,5,11,1,1,2,2,1,5,2,2,1,2,6,2,13,2,2,6,6,21,30,45,49,34,47,13,37,21,13,21,13,7,7,16,13,14,14,29,16,29,30,13,21,14,14,14,14,2,6,2,5,2,2,5,2,2,2,2,2,13,12,1,27,2,6,7,5,2,1,1,2,2,21,6,2,6,13,17,15,15,13,11,11,6,7,11,7,14,7,13,2,5,2,6,1,2,2,2,2,5,2,2,6,2,6,2,1,1,6,2,6,13,2,2,2,2,13,1,6,7,2,2,2,2,2,7,8,7,6,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,6,1,7,13,2,2,5,1,1,2,1,2,2,2,11,13,13,1,1,2,1,1,1,1,2,0,1,1,1,1,1,1,1,1,1,2,1,2,5,1,1,1,1,1,1,1,5,2,2,2,10,1,1,6,1,1,5,2,5,2,2,2,5,11,13,1,2,10,11,6,2,6,2,2,2,6,2,5,1,2,1,2,5,1,1,2,1,1,2,5,2,1,1,2,2,2,5,2,10,10,2,2,1,1,5,11,2,10,2,11,11,5,11,10,2,2,1,2,1,5,1,1,1,5,9,6,6,2,10,11,9,6,6,2, +2,5,2,5,5,5,1,2,5,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,2,5,2,7,5,5,2,2,11,5,12,13,2,2,5,2,5,2,13,1,1,5,1,5,2,2,7,2,13,22,49,45,16,45,47,21,32,2,13,11,13,13,13,21,11,29,22,30,43,29,22,12,21,14,11,13,29,1,2,2,2,5,2,1,2,5,2,5,2,13,1,12,2,5,5,2,2,2,5,1,2,11,11,13,6,2,11,17,15,15,15,7,11,6,6,11,7,7,2,6,5,2,2,1,1,2,1,2,2,2,2,6,2,2,7,2,2,1,1,2,7,6,2,5,5,13,2,2,2,6,1,6,1,6,6,14,7,6,7,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,5,2,2,2,2,2,6,2,5,1,13,11,13,13,13,2,1,0,2,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,1,1,1,1,2,2,5,2,1,1,6,1,2,6,1,2,2,2,5,2,10,7,2,5,6,7,13,11,2,2,12,2,2,2,2,2,1,1,1,6,2,1,5,1,2,1,1,2,2,2,1,5,2,12,11,2,5,6,2,5,1,1,2,2,2,5,10,10,10,6,10,5,1,2,1,2,1,1,1,1,2,1,2,11,9,6,5,2,11,6,6,2, +10,2,5,5,9,2,1,1,1,1,1,1,1,2,1,1,5,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,10,13,10,5,5,10,10,10,1,2,6,2,2,2,5,2,5,1,2,2,5,2,11,2,2,14,30,30,29,35,45,21,43,16,5,5,30,14,13,14,14,21,37,22,34,30,29,16,21,29,14,13,16,7,2,2,2,6,2,1,2,2,2,2,2,2,7,1,2,2,2,2,2,5,2,2,2,2,7,11,13,11,6,7,17,8,15,13,7,8,6,6,6,6,6,6,2,6,7,2,1,1,1,1,1,1,6,6,2,6,2,5,2,2,1,2,5,5,7,2,2,2,12,2,6,1,7,5,2,2,7,7,6,7,13,7,6,1,1,1,0,2,1,1,1,1,0,1,1,1,1,1,2,5,2,2,2,5,2,5,1,2,2,5,2,2,2,13,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,6,1,2,1,2,2,6,1,2,2,5,2,10,1,7,11,2,6,13,7,11,6,6,6,7,12,11,2,1,2,1,1,2,2,2,6,1,2,5,2,2,5,2,10,2,2,9,25,2,13,7,10,6,2,1,1,2,26,2,2,10,11,6,13,2,2,1,5,1,1,1,1,1,2,1,2,5,9,6,6,6,6,6,6,11,2, +2,1,1,2,5,2,5,2,2,1,1,1,1,1,1,1,1,2,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,5,10,10,1,5,5,1,2,12,1,9,2,2,5,2,5,7,2,2,2,5,2,2,5,2,6,29,22,30,30,117,36,29,30,13,7,13,22,5,14,29,16,21,30,23,43,15,21,16,17,22,11,5,13,7,6,2,5,1,2,6,6,2,2,6,2,2,6,6,2,5,2,5,2,1,2,2,5,1,2,21,13,16,11,7,22,15,29,11,6,11,6,6,6,13,6,7,13,5,7,6,0,1,1,0,2,2,7,7,6,1,2,2,5,2,1,2,2,2,13,2,2,13,7,2,2,5,6,1,2,5,7,2,14,7,11,13,1,1,2,1,1,1,1,1,1,1,1,1,0,1,0,2,2,2,2,5,2,1,2,2,6,2,1,2,5,2,11,11,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,5,2,2,2,5,1,2,5,2,2,5,2,2,2,2,6,10,6,5,2,13,6,11,7,2,11,11,2,2,2,5,1,1,2,2,5,2,2,1,1,1,2,2,2,6,13,2,5,6,2,9,1,13,9,2,2,1,6,2,9,2,2,11,2,9,2,2,6,1,2,5,2,2,1,1,5,1,2,2,2,11,6,6,5,9,7,2,5, +1,6,5,5,10,5,2,5,10,2,1,1,1,1,1,1,1,1,5,1,1,2,5,1,2,1,2,1,1,2,1,1,2,2,5,5,1,2,2,6,5,10,2,2,10,2,2,2,5,2,2,1,2,2,2,2,2,2,7,16,47,23,70,120,22,15,7,7,6,2,16,13,13,16,22,29,16,32,22,17,16,30,29,13,6,7,7,2,2,2,2,6,2,2,11,2,6,2,1,5,6,1,2,2,2,2,2,2,2,2,1,2,2,30,13,17,7,7,18,15,13,8,11,7,11,7,13,11,11,7,2,2,5,2,1,1,1,1,2,6,6,6,2,2,2,6,2,2,6,1,6,13,2,2,26,7,2,5,2,2,2,6,2,2,6,7,6,7,8,2,2,1,1,1,0,2,1,1,1,1,1,0,1,2,1,2,14,2,6,2,2,2,1,1,2,1,6,1,2,5,7,6,1,1,1,1,1,1,1,0,2,0,1,1,1,1,1,0,1,2,1,1,1,1,1,1,5,2,1,1,1,1,2,5,2,2,2,1,2,2,2,2,6,2,5,2,2,7,5,11,2,2,11,7,6,7,2,5,6,2,2,5,2,1,2,1,6,2,2,1,2,6,1,1,6,1,7,10,7,2,2,6,5,5,10,2,5,2,1,1,2,5,2,25,6,2,2,6,1,2,1,2,1,2,1,1,1,2,1,2,6,9,6,6,9,6,2,2,7,2, +2,2,1,2,6,1,2,6,1,2,1,1,1,1,1,1,2,1,2,1,1,1,2,5,1,2,5,1,1,1,1,1,1,1,5,2,2,10,2,5,2,5,2,12,7,13,13,2,2,13,2,1,1,5,2,12,6,2,11,29,48,120,32,16,13,7,14,11,13,13,14,15,21,22,32,13,29,30,32,29,14,21,14,13,2,21,13,1,2,5,2,1,2,2,11,2,6,2,2,2,2,2,6,1,5,2,5,2,5,2,1,2,7,29,17,21,11,13,18,13,8,7,11,7,7,13,8,11,8,11,7,6,7,1,1,1,1,1,2,7,6,2,7,6,6,13,2,1,2,7,2,21,7,1,5,2,1,6,1,5,7,6,2,6,7,7,7,6,7,2,2,1,1,1,1,1,1,0,2,1,1,1,1,2,2,5,21,2,2,2,2,6,2,5,1,2,1,1,2,2,11,11,2,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,1,2,1,1,2,5,2,6,1,5,2,5,2,1,2,2,6,5,6,6,2,2,13,7,11,8,6,2,2,2,5,2,2,2,1,5,1,2,2,2,5,2,1,1,2,1,5,10,11,11,2,10,2,2,2,10,2,2,2,6,5,2,6,1,2,2,2,9,7,5,1,2,5,2,1,1,1,1,6,1,5,1,11,6,9,11,1,6,2,9,2, +1,2,5,2,2,5,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,6,1,1,1,1,1,1,1,5,10,7,5,12,7,2,2,2,5,5,2,2,5,2,2,2,2,2,2,2,6,5,5,7,13,14,13,13,13,13,6,13,29,13,13,7,7,7,14,36,23,22,37,47,22,14,13,13,21,13,2,7,2,6,1,2,2,5,2,5,6,6,6,6,2,5,2,5,1,6,2,1,2,2,2,1,2,5,2,29,16,16,11,16,17,15,11,8,6,6,11,8,11,13,6,6,6,6,6,1,1,1,1,1,2,7,2,2,2,2,2,7,2,2,2,6,5,11,2,2,12,2,1,2,2,7,7,5,2,1,2,7,6,7,13,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,6,1,5,2,5,2,2,2,5,2,1,1,11,7,13,12,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,5,2,1,5,2,2,1,2,2,2,2,2,2,1,6,5,2,5,1,2,11,2,2,2,11,11,7,6,2,1,2,5,2,2,5,2,1,1,5,2,5,2,6,1,2,1,1,2,6,11,2,13,6,2,2,5,5,6,1,11,2,2,2,2,2,9,5,2,25,2,2,2,6,1,2,1,1,2,1,2,2,2,6,2,25,9,7,2,9,2,2,11,2, +2,5,2,1,2,2,1,5,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,1,2,1,2,2,12,2,2,13,2,5,2,2,5,2,9,2,2,2,5,2,2,1,5,5,2,5,7,21,21,14,14,15,7,14,13,29,14,14,21,15,21,29,16,32,18,30,47,36,29,13,21,22,17,2,13,21,2,2,2,13,2,2,2,2,11,2,2,2,2,2,2,2,6,1,2,2,2,5,2,5,1,2,2,16,29,29,14,16,23,15,11,11,6,7,7,7,7,11,6,6,7,7,2,2,1,1,1,1,2,2,2,6,2,6,7,12,2,1,2,2,7,7,2,6,1,2,1,2,6,7,2,2,2,5,6,14,7,8,13,2,2,1,1,1,1,1,1,1,1,1,1,1,0,12,0,21,2,1,2,2,2,2,2,5,2,2,2,5,11,10,13,2,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,1,1,5,2,2,1,1,2,1,10,2,10,1,10,5,2,2,2,2,2,2,6,5,1,11,2,5,6,6,7,2,6,1,2,2,2,5,2,5,1,2,1,2,2,2,2,2,5,1,1,1,2,2,10,2,2,25,2,9,2,6,9,5,2,2,2,5,2,5,2,2,2,9,2,6,1,1,5,2,1,1,5,1,2,5,2,2,2,2,2,9,5,2,10,11,11, +2,1,1,2,5,1,1,2,1,2,1,1,1,2,1,1,1,1,2,5,1,1,1,1,1,1,2,5,1,1,2,2,2,5,5,2,2,5,2,10,2,1,1,1,2,5,1,1,1,1,1,1,1,2,2,2,14,43,13,7,13,14,29,29,14,16,13,5,7,13,13,13,21,22,29,23,32,16,29,21,16,29,14,11,7,2,6,2,7,2,2,5,2,7,2,6,6,6,1,6,2,5,2,2,6,1,6,2,2,2,2,2,13,13,16,13,6,29,17,17,8,11,8,13,6,8,7,11,7,6,7,2,6,1,1,1,1,1,2,2,6,2,6,11,6,5,6,1,2,2,21,7,6,1,6,1,1,2,2,7,7,7,6,1,7,7,13,7,13,2,0,1,2,1,1,1,1,1,1,1,1,1,1,1,1,38,2,1,6,2,5,2,1,1,2,5,2,2,10,13,11,2,2,1,1,1,1,1,1,1,0,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,2,2,1,5,1,2,2,2,2,5,2,5,2,2,2,2,13,5,6,7,11,6,6,2,2,2,5,10,2,2,2,2,1,1,5,2,2,5,2,2,2,1,2,5,2,5,1,5,2,2,5,2,2,2,2,5,1,9,2,1,2,2,6,10,7,2,1,1,6,1,6,1,2,1,2,2,2,1,2,25,2,9,7,2,13,13,6,36, +2,2,5,2,1,1,1,5,5,2,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,5,2,5,2,2,5,5,13,11,2,6,13,13,5,2,2,5,2,2,2,9,2,2,2,2,1,1,2,2,11,13,36,13,5,2,14,29,22,16,29,16,29,13,14,13,16,16,13,21,29,30,29,17,16,30,13,21,11,7,6,2,2,7,11,2,2,6,2,2,6,6,6,2,6,1,2,2,2,5,2,5,2,2,2,5,2,5,7,6,13,11,11,13,22,16,11,11,7,11,6,7,6,8,11,13,6,5,2,1,0,1,1,1,2,5,2,7,7,11,6,1,2,5,2,2,2,11,2,2,2,1,2,2,5,5,7,7,2,1,7,14,6,13,7,5,60,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,1,2,5,1,2,11,10,2,13,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,5,2,2,1,2,5,2,2,6,1,2,2,2,5,2,2,5,12,6,6,11,7,11,2,2,2,6,2,2,6,1,1,1,1,1,2,5,2,2,5,2,5,2,1,2,2,11,10,2,2,2,1,2,1,5,2,2,5,2,5,2,2,11,5,10,11,1,1,2,1,1,2,1,2,6,1,1,1,5,2,2,2,5,9,2,10,11,43,74, +5,5,2,5,5,1,1,5,5,5,1,1,1,1,1,1,1,2,6,2,2,5,1,2,1,2,11,2,2,2,6,5,14,11,13,7,16,26,15,1,2,2,2,5,2,2,1,2,2,2,1,2,1,2,13,30,16,13,6,13,30,32,43,34,29,30,30,22,29,29,22,13,30,13,21,37,45,43,14,21,14,21,11,11,8,2,2,6,6,2,2,2,5,2,6,6,6,7,2,6,2,2,6,1,2,2,2,6,1,2,1,2,7,6,7,11,11,11,18,13,15,13,6,11,6,6,13,6,6,6,6,6,1,2,1,1,1,2,6,2,2,6,6,6,2,6,2,2,2,12,11,6,2,5,1,0,1,2,2,5,13,2,6,1,7,14,7,13,11,1,0,2,1,1,1,1,1,2,1,1,0,2,1,1,1,1,1,2,5,2,1,2,2,1,1,2,5,2,2,11,13,2,1,1,1,1,1,1,2,1,1,1,0,1,2,1,1,1,2,1,1,2,1,1,1,1,5,1,1,1,1,2,1,5,2,1,2,2,5,1,1,5,2,2,1,2,6,2,2,5,12,2,9,11,6,2,2,2,6,1,2,5,2,1,5,1,1,2,2,6,2,2,1,1,2,5,5,13,2,2,5,1,5,2,2,2,2,1,2,2,2,2,5,9,6,1,9,5,1,1,1,2,1,1,1,2,5,2,2,2,5,2,9,2,2,10,6,70,205,131, +2,5,9,2,1,1,1,2,5,2,5,2,2,1,1,1,2,14,11,2,2,2,6,1,5,5,26,2,6,10,21,7,13,13,13,21,21,14,2,1,2,6,2,2,2,2,5,1,2,2,1,1,2,11,7,30,2,13,13,11,14,36,46,30,30,30,16,29,14,29,14,13,36,2,30,36,46,30,21,13,13,16,8,21,22,2,2,7,2,6,1,2,2,6,6,7,6,6,2,2,2,5,2,5,5,2,5,2,5,2,2,5,2,2,7,7,11,8,16,13,13,11,6,13,6,7,11,11,11,6,2,6,2,2,1,0,1,2,2,2,6,7,11,6,2,2,2,6,2,5,12,2,2,1,1,1,1,2,7,7,13,7,2,2,13,13,6,7,13,6,1,0,1,0,2,1,0,0,2,1,1,1,1,1,1,1,1,2,2,2,5,2,1,1,5,1,2,5,7,6,2,2,0,1,0,1,1,1,1,1,1,0,1,0,2,1,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,6,1,2,6,1,1,2,6,2,2,2,2,13,2,2,2,5,6,2,2,6,1,2,2,2,2,1,2,2,5,1,1,6,1,2,5,1,2,6,2,11,13,2,5,2,2,1,5,1,2,1,1,25,6,2,5,9,2,2,25,6,2,1,5,2,2,5,2,2,2,2,5,2,9,2,2,6,5,10,5,131,201,201,74, +2,2,2,6,2,2,1,1,6,2,2,2,2,5,2,2,5,13,26,2,5,2,2,2,2,5,2,5,7,21,10,13,16,15,13,14,13,27,2,2,5,2,2,5,2,2,2,6,12,2,2,6,2,7,29,10,2,11,17,11,22,34,32,30,16,29,13,13,14,14,13,21,29,2,21,43,22,13,21,29,16,29,13,17,15,1,6,17,2,2,7,6,2,7,6,13,6,6,2,6,2,2,2,2,2,5,2,2,2,2,2,2,2,6,6,6,7,7,13,13,8,11,6,11,13,8,11,7,6,6,6,2,2,2,1,0,1,5,2,5,7,11,13,7,11,2,2,2,2,6,5,2,2,2,1,1,1,2,2,2,5,7,6,2,2,14,2,13,13,2,2,1,1,1,1,1,57,38,0,2,1,1,1,1,1,1,0,2,2,5,2,1,2,2,1,2,5,2,2,5,1,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,9,5,2,2,2,6,2,2,6,2,2,2,7,2,6,2,2,13,11,1,2,5,9,11,2,6,1,2,2,2,1,1,1,2,6,2,5,2,2,2,11,5,2,9,2,6,2,1,1,5,1,2,2,2,5,2,6,10,10,7,11,2,2,2,2,2,2,25,2,5,2,2,2,6,1,9,11,11,16,192,205,201,200,74, +2,6,5,1,2,1,1,5,2,5,2,2,6,2,2,5,2,13,12,5,2,5,2,5,2,6,2,5,21,16,11,2,30,16,14,21,16,2,2,2,2,2,6,2,2,2,21,2,28,13,22,15,6,7,17,9,2,11,22,30,22,34,43,30,22,29,14,29,14,15,13,21,17,29,16,30,30,17,17,17,17,16,13,15,8,2,14,11,2,2,6,2,2,2,7,7,7,6,2,2,2,5,5,2,6,1,2,13,2,5,2,5,13,7,2,6,7,13,6,2,17,7,2,11,7,11,8,13,11,6,2,2,6,1,1,1,1,2,1,2,2,2,2,6,2,7,2,11,5,13,7,2,5,2,1,1,1,7,5,13,1,5,1,2,2,14,6,14,8,2,2,1,1,1,1,1,1,1,1,1,2,1,0,2,0,2,1,1,2,2,2,1,1,1,2,5,2,2,6,2,11,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,6,1,6,1,11,7,6,2,6,2,2,10,2,2,11,11,2,6,2,2,5,6,2,2,1,1,2,1,5,1,1,5,1,2,9,2,5,9,6,2,2,6,1,2,2,6,2,1,2,2,2,11,6,2,11,10,6,10,2,1,5,2,2,25,2,2,2,9,2,25,1,2,6,11,13,165,205,201,201,204,201,131, +2,2,2,6,1,1,1,2,1,2,11,7,2,2,2,10,2,13,10,10,2,5,2,1,2,2,5,11,14,21,15,21,22,29,13,14,11,6,2,5,2,5,1,2,2,2,13,5,21,22,117,29,2,30,17,2,6,14,20,15,22,31,32,33,29,29,21,13,14,13,14,16,47,106,31,16,24,17,33,29,29,15,13,29,11,0,29,11,2,6,6,2,6,6,7,7,13,7,0,6,2,2,5,6,1,5,6,1,2,2,2,6,5,7,6,2,7,7,7,7,16,6,7,8,11,11,13,11,17,6,6,2,2,1,1,1,1,2,2,2,5,2,5,2,2,2,13,5,12,7,2,6,2,2,1,1,1,2,7,5,2,2,1,2,13,13,7,17,13,2,2,2,1,1,5,2,1,1,9,40,2,5,2,1,1,1,1,1,2,2,1,2,5,1,2,2,5,1,2,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,2,1,2,2,2,2,11,11,6,6,6,2,6,5,11,2,7,13,12,1,1,2,5,1,9,7,7,1,2,2,21,1,1,2,1,2,6,2,5,2,5,2,2,5,1,6,2,5,1,1,2,6,2,11,2,5,11,10,5,10,6,1,2,2,5,2,2,2,5,2,2,5,2,2,9,11,13,13,205,201,201,204,201,201,74, +2,5,1,1,6,2,1,5,2,7,13,11,2,5,7,29,14,15,13,21,13,5,5,2,6,1,2,5,7,21,21,29,22,22,13,29,7,2,2,2,2,2,6,2,2,12,7,21,12,29,130,18,15,120,6,6,1,14,22,18,22,122,37,29,16,16,13,14,13,15,47,106,43,18,15,24,24,29,33,18,30,22,11,8,8,1,16,7,1,11,2,2,2,7,6,7,13,2,2,2,5,2,2,2,12,7,2,13,2,5,7,2,13,7,6,6,7,13,8,6,16,6,13,17,13,11,11,11,11,11,6,6,2,0,1,1,1,1,1,5,2,2,2,2,6,1,14,6,2,2,1,2,2,6,1,1,2,7,7,2,2,13,1,5,13,14,7,7,13,2,2,7,5,5,65,7,2,2,1,9,9,51,9,10,59,1,2,1,2,1,5,2,1,2,5,2,2,5,2,5,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,6,5,2,5,2,11,2,10,6,6,7,11,6,2,2,7,11,11,10,2,2,2,5,2,6,2,10,5,2,2,25,51,11,1,1,5,2,2,5,2,12,2,5,2,2,6,1,2,2,6,1,6,1,2,25,2,11,6,2,9,11,5,2,2,26,38,64,10,5,2,5,2,2,9,5,6,26,8,130,205,204,201,201,200,201,74, +2,1,1,6,1,1,1,2,5,10,7,12,5,2,12,21,14,14,14,13,13,10,10,12,1,5,6,5,12,21,13,16,29,22,13,29,2,2,2,5,2,2,14,14,13,2,12,16,29,36,47,37,106,33,11,2,2,21,22,30,18,132,24,33,30,22,29,13,29,47,46,17,109,33,22,33,33,17,33,33,30,17,13,15,11,6,16,11,2,2,2,6,2,13,7,13,7,2,2,2,5,2,5,2,6,7,2,2,2,2,13,1,7,6,2,7,13,7,11,13,6,6,7,11,11,17,13,8,8,11,11,2,6,1,1,2,1,2,2,2,2,2,2,7,2,13,2,2,2,1,1,2,2,2,1,1,2,2,6,1,6,2,2,13,13,6,6,13,7,2,12,2,2,1,71,72,40,1,1,2,2,2,5,57,27,1,1,2,6,2,2,2,5,2,2,6,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,11,2,11,6,8,11,6,2,6,6,5,12,1,6,1,2,2,2,10,2,13,11,1,2,2,5,2,5,2,2,2,5,2,5,2,2,5,2,5,2,2,5,2,2,2,2,5,2,2,9,2,11,1,10,2,2,5,2,9,2,2,2,9,2,9,2,5,10,2,12,8,166,206,200,201,204,204,201,201,69, +2,6,1,2,1,1,1,2,13,13,13,5,2,2,16,29,26,2,21,15,12,10,5,12,10,5,2,12,21,29,13,13,16,22,29,13,1,6,2,2,2,13,13,2,2,2,13,21,13,23,43,31,31,11,8,6,6,6,16,21,29,47,46,24,31,21,22,11,34,47,31,31,46,105,29,46,18,31,33,18,30,17,11,17,8,2,14,11,2,6,6,1,7,6,11,13,7,6,6,1,2,2,2,2,5,2,5,6,2,6,2,2,2,6,6,6,7,11,11,13,13,11,7,11,17,11,11,8,7,7,6,2,6,2,1,2,1,2,2,2,2,12,6,7,2,2,2,6,2,1,0,2,2,5,1,1,2,5,2,6,1,2,1,2,6,6,7,7,13,2,1,2,1,64,40,5,9,1,1,1,40,25,38,6,1,0,1,1,2,1,2,6,2,2,5,2,5,1,2,1,5,1,2,2,5,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,5,2,1,5,2,6,6,6,7,11,11,13,7,6,6,2,11,2,6,1,2,2,2,5,1,13,11,2,2,2,6,2,2,1,2,5,2,2,2,2,5,12,7,2,12,1,5,2,5,2,5,2,2,2,11,2,11,10,9,10,5,2,2,2,6,1,5,2,2,6,2,5,2,9,9,21,176,205,201,201,201,201,201,201,204,131, +2,2,1,5,1,2,2,10,13,14,13,2,2,13,21,12,12,2,14,21,6,2,7,10,5,13,7,16,13,14,13,13,16,24,16,13,6,1,5,2,2,2,7,2,13,7,11,14,21,36,30,18,13,6,11,2,2,11,16,22,30,34,109,110,109,31,8,32,123,31,24,18,31,33,33,113,44,8,33,18,31,30,13,15,11,2,29,2,2,2,7,13,5,2,7,11,13,2,2,2,2,6,1,6,1,6,2,6,2,7,6,6,12,2,11,7,6,13,11,11,29,7,13,11,17,11,11,11,11,11,6,7,2,2,6,2,1,5,1,2,7,13,11,5,1,1,1,2,7,2,1,1,2,2,1,1,2,2,2,1,1,5,2,13,7,6,7,7,7,6,1,6,25,9,2,2,1,1,1,5,27,60,1,1,1,1,1,1,1,2,1,2,2,9,51,2,2,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,2,2,6,2,11,2,2,7,6,11,8,11,6,10,11,7,6,2,2,5,1,2,5,2,11,11,7,6,6,5,2,2,1,6,2,9,2,5,9,25,9,1,2,13,10,6,2,2,2,1,2,5,2,5,2,2,10,12,10,2,2,2,13,26,2,6,2,5,0,2,2,2,9,13,2,121,205,198,204,201,198,201,204,201,198,74, +2,5,2,2,1,2,6,7,13,11,11,7,5,5,10,13,12,2,13,11,2,7,7,6,2,13,13,7,11,6,7,13,13,17,29,6,2,2,6,2,5,2,11,2,13,16,10,12,16,13,36,17,11,11,6,11,29,22,17,13,13,22,34,110,114,24,30,34,20,24,20,18,106,33,33,33,18,13,109,24,33,18,11,15,6,11,14,2,6,6,7,6,6,7,13,13,7,2,2,2,5,1,5,7,11,7,7,7,2,11,2,7,11,2,13,2,11,11,11,8,8,11,11,13,21,28,17,13,7,13,11,6,2,6,1,2,2,2,2,5,7,7,7,2,1,1,2,7,2,2,1,1,2,6,1,1,2,5,2,2,1,2,7,6,13,6,7,7,13,1,5,2,2,2,1,2,2,1,1,2,1,27,40,2,1,1,1,1,1,2,6,1,6,1,2,2,1,1,1,1,2,2,2,5,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,2,1,1,2,2,6,1,2,2,11,6,6,11,13,8,11,6,2,12,11,7,6,1,2,2,2,2,2,13,11,11,1,9,2,5,2,5,1,9,2,25,7,2,2,5,9,10,10,5,2,5,2,5,1,1,1,1,2,2,11,2,2,6,1,2,5,10,1,2,2,51,76,91,40,2,2,9,2,29,206,201,200,201,198,204,201,204,204,201,74, +2,1,2,6,1,6,1,10,11,13,7,13,5,2,5,13,2,2,21,13,6,6,7,11,6,7,6,2,2,6,7,6,14,36,11,6,6,2,2,2,2,2,7,7,21,16,2,7,12,30,130,8,13,6,16,21,13,29,14,29,14,30,34,109,122,22,17,46,33,33,18,33,33,24,24,24,17,11,110,24,24,18,13,15,13,16,13,11,2,6,7,7,7,6,7,7,2,6,2,2,6,2,5,5,2,7,7,6,6,7,11,13,6,2,2,2,11,13,11,7,13,6,13,16,13,29,29,13,17,11,11,6,6,2,5,2,5,1,2,2,5,6,1,1,1,1,2,6,13,1,1,2,5,2,1,1,2,1,1,1,1,1,2,7,11,7,6,6,2,2,2,2,2,1,2,26,5,1,1,1,1,5,9,0,1,1,1,1,1,1,1,7,2,5,1,2,2,1,1,1,1,1,2,2,2,9,2,2,2,1,1,1,1,1,1,1,2,1,1,2,2,1,1,1,1,1,1,1,1,2,1,2,1,10,1,2,5,2,6,11,2,7,11,6,11,11,2,11,7,11,11,6,6,2,2,2,10,11,13,11,6,2,5,9,2,1,2,5,5,5,9,5,9,2,5,2,25,2,11,2,2,9,2,2,2,5,2,2,9,11,2,2,2,5,2,2,9,11,5,2,2,12,2,6,10,12,35,67,192,204,204,200,198,204,201,198,200,200,201,74, +2,6,1,2,6,1,5,11,5,10,13,13,11,11,5,2,2,13,13,13,11,11,13,8,7,7,2,6,6,2,6,13,16,16,21,7,2,2,5,2,5,2,2,13,16,30,30,17,29,22,47,17,8,13,116,16,21,22,14,30,11,16,43,110,132,18,43,108,18,24,24,33,24,109,33,24,11,11,114,33,24,44,7,18,22,17,11,2,2,11,6,6,2,13,7,13,6,2,7,2,2,2,2,2,5,6,1,2,2,5,2,13,2,2,6,12,11,14,11,13,17,1,13,22,13,30,16,7,21,13,11,7,2,2,1,2,2,1,2,14,35,1,0,1,1,1,2,7,2,2,1,2,2,2,1,0,1,1,2,1,1,2,2,13,6,2,7,2,6,2,6,2,2,5,2,2,1,1,1,1,2,1,1,1,1,1,1,60,131,13,13,2,2,2,2,2,1,1,1,1,1,2,5,2,2,1,2,1,1,1,1,1,1,1,1,2,1,5,1,2,1,1,2,1,1,1,1,1,1,2,5,2,1,2,2,6,1,2,13,11,2,11,13,11,8,11,7,7,11,10,11,2,6,2,2,13,11,5,2,2,11,10,2,2,5,1,2,9,5,2,5,9,2,25,2,2,2,5,2,6,2,2,2,5,1,2,5,5,6,1,2,2,6,1,5,2,5,9,2,25,2,2,2,2,11,192,206,204,200,200,200,199,199,200,198,200,200,195,200,74, +2,2,5,2,2,2,5,10,7,13,7,13,17,21,11,2,2,2,21,11,11,13,6,11,6,8,2,6,7,13,13,14,17,30,13,6,6,2,2,2,2,2,12,13,30,47,47,34,36,119,114,8,13,20,20,13,13,11,16,13,14,29,16,24,20,15,22,108,20,33,18,111,109,109,20,31,13,6,109,24,33,18,11,29,18,14,13,2,7,7,7,13,7,7,13,7,2,13,2,2,6,2,13,5,7,12,12,13,2,2,2,11,2,2,2,2,11,15,13,13,11,2,16,16,13,16,29,6,16,8,7,6,6,2,2,6,1,1,2,16,12,1,1,1,1,0,2,7,6,1,0,1,5,2,2,1,1,1,1,1,1,1,2,7,7,13,6,6,1,2,2,2,5,2,2,1,1,1,1,2,6,0,1,1,1,1,2,9,11,1,2,2,6,2,1,1,1,1,1,1,1,1,2,2,5,2,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,2,2,5,2,9,6,6,7,2,6,11,11,7,7,7,11,2,10,2,13,2,2,2,1,2,2,6,2,11,5,7,5,9,2,5,9,9,5,9,2,5,2,2,5,2,9,5,10,1,2,6,2,2,6,9,2,5,5,78,7,11,1,2,6,2,9,2,5,11,51,7,2,11,166,201,198,200,198,196,199,199,199,199,196,199,195,196,199,131, +2,5,2,2,5,2,2,10,21,11,7,13,13,21,6,1,5,13,13,7,7,11,7,11,17,6,2,13,13,14,13,13,22,16,11,6,2,2,5,2,2,5,14,45,117,119,119,32,47,47,125,29,11,24,114,26,6,7,13,7,22,16,16,45,122,18,22,111,33,109,24,114,111,109,31,18,11,11,114,24,37,18,11,33,33,11,13,2,11,7,13,7,6,13,21,11,2,7,2,7,2,2,2,13,11,13,2,2,2,5,2,5,2,5,2,7,17,11,11,7,13,1,13,17,11,21,17,6,17,11,11,6,2,1,2,2,1,1,2,10,7,2,2,1,1,1,2,7,2,2,1,1,2,2,1,1,1,1,1,2,1,1,2,2,6,7,7,2,2,12,1,26,10,1,1,1,1,1,1,1,25,26,2,1,1,2,1,1,5,2,2,11,2,2,2,9,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,5,2,1,2,1,2,2,2,2,10,6,2,11,11,6,11,8,11,13,11,6,7,7,2,11,1,1,1,11,2,2,5,9,2,2,5,2,2,9,2,2,2,2,2,6,2,2,2,2,10,2,11,2,2,2,2,2,2,1,12,69,200,65,74,70,5,1,9,2,10,13,60,35,64,78,188,204,204,200,200,200,198,200,196,195,200,199,199,198,199,200,74, +2,1,5,2,2,5,5,13,11,13,5,7,13,7,2,2,13,12,7,13,13,11,8,8,7,11,2,13,6,11,13,22,31,17,11,6,6,2,2,2,2,2,29,106,32,30,34,30,117,140,123,19,8,34,105,1,11,6,29,29,30,24,30,45,34,11,22,106,33,33,24,118,114,109,33,18,13,11,114,108,109,16,13,46,18,11,21,2,6,11,7,7,13,17,16,2,11,2,2,13,17,6,5,26,2,5,2,6,2,2,7,2,2,2,11,13,13,13,7,13,6,1,7,13,16,13,16,11,13,11,13,2,6,2,2,5,1,1,2,22,7,6,0,1,1,1,2,7,6,2,1,2,1,1,1,1,1,1,2,1,1,1,2,7,6,6,6,2,2,2,1,21,1,1,1,1,1,1,0,1,2,1,1,1,1,5,2,2,2,2,5,2,2,5,2,2,1,1,1,1,1,2,1,1,1,2,2,5,1,1,1,1,1,1,2,1,1,2,1,1,1,2,1,1,1,1,1,1,2,1,5,2,2,5,2,2,6,6,6,6,6,7,7,7,11,11,13,11,5,2,12,10,2,1,1,5,1,9,9,2,5,2,5,2,2,6,2,5,11,2,2,2,2,2,2,6,6,2,2,11,2,2,11,2,6,6,134,204,200,204,196,190,134,1,13,29,5,11,192,131,200,204,204,204,198,201,198,200,203,199,196,179,200,179,200,179,199,198,179,74, +2,1,2,5,10,2,10,10,7,13,10,7,21,11,2,6,5,13,6,11,13,13,11,13,11,17,2,7,7,7,29,24,24,16,11,13,2,2,2,6,2,11,22,29,22,30,47,36,45,147,125,31,8,136,33,11,2,6,11,13,16,16,13,33,106,32,43,110,33,33,24,111,114,111,24,15,11,15,118,33,110,11,29,34,109,13,2,2,11,11,11,13,14,22,13,7,6,2,6,21,29,13,13,2,2,2,5,2,5,2,6,2,5,2,11,13,13,11,11,13,2,1,11,13,16,21,29,7,11,11,11,6,2,2,6,1,1,1,12,14,6,2,1,1,1,1,2,6,1,1,1,6,1,1,1,1,1,1,1,1,1,1,1,1,6,7,2,2,6,1,26,10,12,10,1,1,1,1,1,1,5,2,1,1,2,2,2,2,6,1,2,2,2,10,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,1,1,1,2,1,2,1,2,1,6,1,5,2,2,11,11,6,6,6,6,6,7,13,11,7,6,10,10,2,2,1,1,2,9,5,5,2,6,9,2,9,2,2,2,2,2,11,2,6,43,67,155,78,28,13,167,67,16,7,13,22,50,198,200,200,199,199,195,200,204,178,204,201,30,175,204,201,198,204,199,200,200,200,200,200,200,198,198,199,194,198,179,198,202,194,198,157, +2,2,6,2,2,2,2,5,12,11,13,13,13,11,5,2,5,2,6,11,13,11,7,13,11,11,2,7,11,17,29,30,24,11,7,7,6,2,2,2,7,23,16,16,22,36,45,30,116,145,109,18,16,18,24,11,2,2,13,29,13,22,30,47,119,32,36,34,33,109,109,114,111,109,32,17,13,13,111,20,110,13,18,109,20,11,2,1,11,15,15,10,16,24,13,13,6,2,6,13,16,21,14,2,6,12,2,2,2,5,1,2,2,2,13,13,7,11,14,17,2,1,7,15,17,16,13,11,11,11,11,11,2,6,1,2,1,1,14,11,2,5,0,1,1,1,2,2,2,2,41,2,2,6,1,1,2,1,1,1,1,1,1,2,11,7,35,40,2,60,67,2,10,2,1,1,2,1,1,1,1,2,2,1,2,6,9,2,2,11,6,2,2,2,2,2,0,1,1,1,0,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,2,2,6,1,2,2,2,11,6,6,11,8,11,11,13,2,2,10,11,2,2,1,1,2,5,2,5,2,2,2,5,5,2,2,5,6,65,78,65,167,199,179,177,199,194,170,202,198,195,176,195,199,203,179,198,179,200,198,179,200,195,199,200,200,200,204,196,200,200,198,200,198,204,200,200,198,200,199,199,198,198,194,198,198,198,198,179,74, +1,1,2,2,5,2,6,5,13,14,13,10,11,13,2,2,11,2,11,7,11,7,13,11,13,13,2,11,11,14,32,33,29,110,105,15,2,2,6,7,16,29,16,17,22,22,22,34,126,146,114,18,8,8,24,8,11,6,6,14,29,16,13,34,34,46,17,34,33,24,33,118,114,108,109,15,2,7,122,111,111,11,22,22,24,11,6,0,13,11,15,15,22,22,13,6,2,2,13,13,13,29,7,2,2,2,5,6,2,2,5,2,2,13,7,7,29,17,29,21,2,2,13,16,16,14,13,13,8,13,13,11,2,1,2,6,1,1,13,7,2,2,1,1,1,1,2,13,6,0,2,1,6,1,2,0,2,0,2,2,2,2,2,11,2,21,38,6,1,40,51,6,2,1,1,1,1,1,1,1,2,1,1,2,1,2,2,6,1,5,6,11,2,2,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,1,5,1,1,1,1,1,1,1,1,1,1,1,2,2,2,6,2,5,2,2,5,2,6,6,6,7,11,11,11,8,2,11,11,13,2,11,2,1,5,2,2,2,2,2,2,29,175,7,66,190,75,2,169,179,194,169,171,194,173,171,194,194,194,173,179,194,173,179,194,179,179,198,198,179,198,198,179,196,199,199,199,200,198,200,199,200,200,203,200,198,200,202,196,198,179,198,179,198,198,179,198,177,179,131, +1,1,5,2,2,5,11,6,7,13,7,11,7,10,6,5,7,2,2,11,7,7,13,13,7,7,2,13,11,16,34,36,46,119,116,11,6,2,6,29,16,30,16,22,11,106,110,114,126,150,115,8,8,22,19,31,31,2,16,30,30,32,22,22,37,109,14,33,31,33,109,111,111,109,111,11,11,29,111,122,109,6,6,110,111,11,0,2,11,16,15,22,30,13,21,11,6,6,7,14,22,30,2,5,5,5,7,2,2,2,6,2,5,13,13,14,17,29,29,14,5,1,2,13,13,29,14,13,15,13,11,6,6,2,6,1,1,1,14,13,1,1,1,1,1,2,6,5,2,6,2,2,2,64,76,1,1,1,1,1,1,1,2,11,2,12,2,2,72,12,9,1,2,1,1,1,1,1,1,1,1,9,5,2,2,5,2,2,6,6,7,2,5,2,2,5,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,2,2,2,2,6,1,6,6,11,6,6,11,6,7,7,2,6,8,11,13,6,2,2,2,2,2,6,2,6,21,168,179,168,173,179,158,66,177,173,171,171,177,169,194,177,179,179,177,194,173,194,179,179,179,194,179,198,179,202,195,179,200,198,199,179,199,199,200,199,196,198,200,200,196,199,199,195,198,198,198,198,198,202,179,198,179,198,179,74, +1,1,2,2,6,1,11,6,13,13,13,11,7,7,2,10,11,6,2,13,13,13,13,11,13,7,2,7,14,18,37,22,110,132,120,11,2,13,16,34,18,37,29,23,106,138,106,136,138,146,113,6,13,20,15,24,122,6,22,18,29,29,22,29,34,33,14,17,31,34,114,114,116,106,111,29,3,29,109,125,109,6,14,126,117,13,2,0,11,17,22,16,11,7,11,2,2,2,13,16,30,30,2,2,5,5,5,12,2,5,2,2,13,11,7,14,23,29,16,2,2,5,2,13,15,14,17,13,17,5,11,13,7,6,1,2,1,2,13,1,2,1,1,1,2,2,2,13,6,2,2,2,5,1,1,1,2,1,1,1,1,1,7,13,2,6,2,2,5,1,2,5,1,5,1,1,1,1,1,1,1,1,2,5,2,2,2,1,2,10,10,13,2,5,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,6,1,2,1,1,1,1,1,1,2,6,1,5,2,5,2,2,2,2,11,11,11,6,11,6,11,6,6,7,6,2,6,5,2,2,1,6,5,2,11,2,155,171,162,194,171,168,177,177,171,169,194,168,168,171,177,169,194,171,177,194,194,177,194,194,173,179,198,194,195,179,198,198,179,196,198,199,198,179,198,199,200,199,199,200,198,200,196,199,195,198,198,179,198,179,199,179,198,179,194,74, +1,2,2,5,2,2,10,6,13,11,10,5,11,5,2,13,13,2,11,13,7,13,7,14,21,7,2,13,16,22,46,16,46,126,106,6,2,7,7,29,16,32,15,132,119,126,124,144,140,152,19,6,8,19,22,18,21,2,29,22,22,30,17,14,30,24,13,17,110,109,109,111,109,109,109,15,11,13,108,132,116,6,110,126,122,13,2,11,14,22,45,2,5,13,2,13,2,7,13,29,32,21,1,2,6,2,2,2,2,2,2,2,21,7,13,29,16,23,2,1,2,2,2,13,13,13,14,11,11,8,13,13,6,2,2,6,2,2,2,5,6,1,1,1,2,5,2,13,7,6,1,2,7,6,2,5,5,1,1,1,1,2,13,11,2,2,2,2,1,1,2,9,2,1,1,1,1,1,1,1,1,2,1,2,10,5,5,2,2,10,7,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,5,1,2,1,1,1,1,5,2,1,2,2,6,1,2,5,2,5,2,6,2,13,6,11,13,11,11,11,2,2,13,2,2,2,6,6,2,2,11,66,171,194,162,168,169,194,171,171,171,177,168,171,171,171,175,171,169,194,168,173,168,171,179,194,194,179,198,179,194,198,179,202,195,194,198,198,179,198,202,179,198,200,199,199,199,199,199,199,198,199,179,202,198,198,179,198,202,179,179,74, +1,5,2,2,1,2,5,5,10,11,7,10,7,5,5,21,11,2,5,13,13,13,14,13,13,7,6,13,14,32,43,17,48,106,33,11,6,13,11,30,29,16,8,106,132,138,149,140,138,153,19,6,8,126,114,33,11,2,7,16,36,17,29,22,34,15,22,22,34,33,109,114,119,33,24,8,6,13,109,109,44,2,119,123,114,17,29,2,21,30,11,1,2,7,6,7,7,12,13,21,32,11,2,2,2,2,6,2,11,2,6,5,7,7,7,29,22,16,0,2,2,2,11,13,13,17,13,8,6,14,11,13,6,1,6,1,7,2,13,2,2,1,1,1,2,2,2,14,7,2,1,2,13,1,1,2,6,2,5,2,1,1,11,7,11,6,2,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,2,5,2,2,5,2,11,6,2,2,6,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,6,1,5,2,2,2,6,2,2,2,2,11,7,7,7,6,14,11,6,6,2,6,1,2,6,11,11,6,6,6,42,194,169,168,162,171,162,168,162,168,171,173,169,171,168,171,171,162,168,168,171,194,168,194,168,169,179,177,179,179,198,198,179,198,179,195,179,179,198,195,194,179,195,179,202,195,202,179,200,195,198,198,198,179,199,179,198,198,179,179,179,69, +1,2,2,5,1,1,2,5,12,11,7,10,13,2,5,13,11,11,2,14,13,13,13,13,7,5,2,13,29,36,22,16,18,119,120,11,7,7,7,34,11,17,29,119,123,125,140,138,140,148,4,13,15,126,33,13,13,29,14,29,32,29,13,13,32,11,13,24,110,106,106,114,116,110,18,13,6,15,111,132,18,11,116,119,111,15,29,6,6,13,11,2,2,2,2,5,13,7,11,30,30,2,12,2,5,5,1,2,21,2,2,2,13,13,14,30,30,29,1,1,1,2,12,11,8,13,11,13,13,13,11,13,2,2,2,5,2,13,6,2,2,2,1,1,2,5,5,6,7,6,2,2,2,2,6,1,2,7,7,6,1,2,5,11,2,2,6,1,1,1,1,1,1,1,1,2,5,1,1,1,1,2,1,2,2,2,5,2,2,9,6,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,2,6,1,2,1,5,1,5,2,2,11,2,11,2,10,10,13,10,7,11,1,2,2,6,11,11,11,11,2,69,169,162,162,167,169,169,168,171,175,169,171,168,168,171,171,162,169,168,168,168,168,169,168,171,194,177,175,171,177,179,179,195,202,179,198,179,179,179,198,179,179,198,198,198,179,198,198,198,177,198,194,179,179,198,179,198,198,179,198,179,194,74, +1,2,6,6,1,6,5,10,2,2,5,11,5,2,13,13,13,11,6,13,14,14,16,16,13,29,7,16,16,33,13,13,22,106,119,15,7,11,13,22,7,17,22,133,116,116,137,144,139,150,8,13,16,122,29,11,13,16,16,16,16,13,5,6,109,6,7,34,110,116,34,123,106,111,24,11,6,15,111,141,8,13,122,122,116,22,18,2,6,13,6,2,2,5,2,5,2,10,16,43,6,7,6,2,2,2,6,2,12,2,6,5,14,7,16,30,23,13,2,1,2,1,2,13,11,11,16,6,13,13,11,13,6,1,2,2,2,5,2,7,1,1,2,6,2,2,11,6,2,2,5,2,11,2,1,13,5,11,13,6,2,6,2,21,36,21,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,2,5,5,11,2,2,2,10,6,7,2,1,1,1,1,1,1,1,1,26,5,1,1,1,1,1,1,1,1,5,2,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,2,5,2,2,6,2,2,5,2,10,10,5,11,13,13,6,5,10,2,11,11,11,15,11,2,6,66,169,166,162,169,162,168,162,169,162,162,162,171,171,168,168,169,168,168,168,177,162,168,168,177,162,171,171,169,177,194,194,177,177,179,202,179,179,179,179,177,198,202,179,177,199,179,198,179,179,179,179,179,179,179,173,195,179,195,202,179,179,177,74, +1,2,2,11,5,1,2,7,2,5,2,5,2,5,21,13,13,13,13,11,13,13,13,13,11,13,6,14,22,32,8,11,22,106,114,15,13,2,16,22,11,15,119,141,110,106,144,138,128,150,4,11,24,24,6,16,16,29,13,13,13,6,6,7,114,2,29,37,110,106,106,123,116,46,8,13,6,17,118,138,6,13,122,122,120,20,15,2,2,13,6,2,2,2,2,2,2,13,6,11,13,6,2,2,2,5,2,2,13,2,2,2,14,7,14,29,30,13,2,1,2,2,2,21,13,29,16,13,14,8,7,13,2,2,2,6,5,2,13,1,1,1,1,2,2,2,12,2,11,2,2,12,2,2,5,11,2,12,11,7,6,2,2,35,30,2,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,5,2,2,2,11,2,12,2,11,6,7,2,6,1,1,1,1,1,1,2,1,2,6,9,2,1,1,1,1,1,1,2,2,1,2,5,1,1,1,1,1,1,1,1,1,1,5,2,1,6,1,1,2,2,6,5,7,6,2,6,7,17,13,2,9,2,7,10,13,13,11,6,66,159,169,162,169,162,162,162,162,162,162,162,169,168,168,168,169,168,168,168,169,162,168,168,168,168,168,169,168,168,194,162,171,171,194,179,194,179,179,194,173,198,194,173,194,179,198,194,194,179,194,179,179,202,179,177,194,179,173,179,179,202,194,179,171,74, +1,2,5,2,2,2,6,5,5,2,1,2,10,12,11,11,13,13,17,11,11,11,13,13,6,11,2,29,16,33,13,13,33,116,116,31,17,6,22,16,7,37,144,139,110,117,141,127,138,150,4,6,17,24,11,22,16,7,13,13,7,6,2,14,111,2,34,109,47,122,33,47,116,22,17,6,2,22,116,126,1,22,122,122,116,33,7,11,2,6,6,2,6,2,2,6,2,13,13,13,13,2,7,2,5,2,2,2,13,2,2,6,2,6,7,13,22,11,6,1,2,1,2,15,13,11,7,6,13,13,13,11,2,2,5,1,2,2,13,2,1,1,2,5,2,5,2,6,2,6,7,6,2,2,6,5,6,7,13,13,7,7,13,7,2,2,5,2,1,1,1,1,1,1,1,5,2,1,1,1,1,2,2,2,6,2,5,2,7,6,7,6,11,6,6,0,6,1,1,1,1,1,1,1,2,51,2,1,1,1,1,1,5,2,5,2,1,2,2,2,1,2,1,1,1,1,1,2,1,2,2,2,2,6,1,5,1,2,2,2,6,6,21,16,11,10,5,9,11,1,13,10,13,42,168,162,162,162,167,169,168,162,167,169,169,167,168,162,162,162,168,162,168,162,171,162,171,162,168,168,162,162,171,171,162,168,171,171,177,171,177,194,194,177,194,179,179,194,173,179,177,179,179,173,194,179,194,177,194,173,179,177,179,179,179,194,179,169,173,74, +1,1,2,2,5,2,2,5,2,2,6,1,2,2,2,5,11,13,22,11,6,8,11,8,11,13,7,29,16,30,11,15,44,122,122,106,17,7,46,17,16,133,139,149,106,132,144,138,138,153,113,19,22,44,17,21,13,13,13,13,6,2,2,13,110,2,36,22,106,34,33,31,114,11,6,6,6,18,106,106,2,114,126,126,122,108,6,2,2,2,7,6,2,2,2,2,11,7,14,14,13,2,6,2,2,2,2,5,7,13,1,7,6,14,13,17,22,7,2,2,2,5,7,6,6,2,6,11,13,11,13,7,1,2,2,13,1,7,7,6,1,1,2,2,6,11,11,6,2,7,5,2,5,1,5,7,2,11,13,13,7,13,6,7,6,2,2,1,2,2,1,1,1,1,2,2,1,1,1,1,2,5,2,2,5,2,10,11,6,7,8,11,11,6,2,2,2,1,5,2,2,1,1,1,1,1,1,2,1,1,1,1,2,1,2,2,2,5,2,2,5,1,2,1,1,1,1,1,2,5,2,5,2,2,2,6,2,5,11,2,6,11,14,15,13,2,5,11,11,5,15,13,15,69,162,162,162,162,162,169,162,162,162,162,171,162,168,162,168,162,162,168,162,162,162,168,162,168,168,162,162,171,162,171,169,194,160,171,162,194,171,177,171,194,169,179,194,177,179,194,194,173,173,194,179,179,171,179,171,179,177,194,173,179,179,179,173,171,171,74, +2,5,2,5,10,27,21,7,2,5,2,6,2,5,2,2,13,11,16,11,6,13,13,13,13,11,6,17,16,22,13,17,34,119,120,111,17,6,109,18,30,130,144,133,119,132,144,149,142,150,115,147,113,13,13,13,13,16,29,14,7,6,6,22,8,13,116,24,116,110,46,139,108,8,13,2,15,18,46,6,11,123,138,132,123,109,11,6,6,6,11,6,2,6,6,2,11,7,17,15,13,2,2,6,2,13,2,2,7,6,6,2,6,7,7,22,32,6,2,2,1,2,2,7,2,6,11,13,11,7,13,6,1,2,6,2,5,11,7,2,1,2,2,2,13,13,14,8,2,7,6,2,2,2,5,2,13,13,11,13,11,11,14,2,5,2,2,5,2,5,1,1,2,1,1,1,1,1,2,1,2,1,5,2,2,7,13,11,11,13,11,11,17,6,2,6,1,1,1,0,2,1,6,0,1,1,2,51,2,0,1,1,2,6,1,5,1,1,1,2,2,5,1,2,1,1,1,1,1,2,2,2,2,5,2,2,2,2,9,13,6,14,13,21,26,10,27,11,11,6,11,49,166,169,162,159,162,162,162,162,162,168,169,162,168,168,160,175,169,162,168,162,162,168,162,168,162,169,162,168,168,162,171,162,194,162,194,171,177,162,168,171,169,194,171,173,177,171,177,171,179,179,177,194,179,179,194,179,177,179,179,194,173,179,173,171,177,171,162,74, +2,2,5,2,5,5,1,5,5,11,1,1,2,2,6,2,11,13,29,15,11,15,15,13,11,11,6,16,29,16,8,22,36,116,123,122,8,11,119,122,37,133,149,137,133,132,132,136,149,150,113,150,115,6,11,11,17,16,13,7,6,1,6,18,2,32,111,46,119,138,34,133,105,13,18,6,29,24,15,2,14,144,136,116,126,111,15,6,11,1,13,11,2,2,11,7,13,11,23,17,11,2,2,2,7,2,2,2,13,7,6,7,2,7,13,22,17,6,2,2,1,2,7,2,2,13,7,13,13,11,13,2,2,2,13,2,2,13,6,2,2,2,2,6,7,13,6,14,7,6,2,2,2,2,5,6,7,13,13,11,11,7,11,2,2,6,2,2,1,2,1,1,1,2,1,1,1,1,1,1,1,2,2,5,11,11,11,11,6,11,13,11,8,11,2,2,2,2,72,72,73,27,38,10,1,1,2,27,25,10,1,1,1,2,2,2,6,2,5,2,6,1,1,1,1,1,1,1,2,6,1,5,2,2,2,11,11,10,11,2,21,7,13,7,10,5,10,11,40,155,168,168,162,159,162,162,169,159,162,162,168,162,168,168,168,162,171,169,162,162,168,169,162,162,168,168,168,168,168,168,162,171,162,168,162,168,169,169,162,171,162,167,168,168,168,171,168,168,171,169,171,179,177,194,173,169,179,173,194,169,173,179,194,179,194,173,194,173,162,74, +5,1,1,2,5,2,6,10,7,13,2,1,5,2,2,2,2,13,17,22,6,11,15,13,11,11,6,16,17,17,6,33,109,132,116,125,17,6,123,122,116,132,130,133,126,126,133,144,150,153,115,150,114,2,6,6,7,7,6,2,6,6,2,7,2,106,22,114,132,123,34,122,114,33,33,2,33,109,15,2,22,138,140,150,126,29,8,2,2,2,11,11,2,2,5,11,13,13,21,2,2,2,6,2,7,2,6,2,1,11,2,6,5,7,13,22,11,11,6,1,2,2,6,7,12,2,6,13,13,13,13,6,6,7,5,2,2,2,12,2,1,2,7,7,7,6,13,7,7,13,2,5,1,1,12,6,7,11,13,7,6,11,6,2,5,2,2,5,2,2,5,2,1,1,1,1,1,1,1,1,2,5,2,2,2,13,11,11,6,13,11,17,15,11,6,2,5,1,9,25,9,38,51,38,51,10,1,9,25,9,1,5,2,2,1,5,2,2,2,2,2,2,1,1,2,1,1,2,5,2,2,2,5,2,2,11,10,7,11,2,11,13,10,10,28,11,17,43,169,162,160,162,162,162,162,162,160,169,162,162,162,162,167,169,169,162,162,162,168,168,169,169,169,169,169,169,168,168,168,168,162,169,162,162,169,162,167,169,169,162,171,162,162,162,168,169,162,168,169,173,162,173,179,177,194,194,171,177,171,177,194,169,179,173,179,171,173,171,168,74, +2,6,2,5,5,1,2,5,5,2,1,2,2,5,2,5,6,13,22,15,11,17,8,7,13,11,16,43,17,29,13,34,34,119,110,132,18,11,117,119,34,130,132,133,150,123,133,144,150,152,143,148,105,6,6,6,6,6,6,6,2,6,6,6,16,123,18,132,114,123,144,125,114,34,106,6,34,114,15,2,34,148,144,124,114,8,11,2,2,6,16,6,2,6,7,13,11,7,2,6,7,6,1,7,6,2,13,6,13,7,5,7,6,13,12,8,13,6,2,6,2,1,7,2,2,2,11,13,13,16,7,13,6,2,7,6,2,2,13,1,2,2,13,11,6,8,7,7,7,7,2,2,2,1,5,7,7,10,7,11,11,11,6,2,2,2,5,2,2,6,2,5,1,1,1,1,2,1,1,2,5,2,2,5,2,11,11,6,13,8,13,8,17,8,2,2,2,2,1,2,27,10,1,1,1,1,1,10,1,1,2,2,5,2,2,2,2,2,5,2,2,5,2,2,5,2,1,2,2,2,1,6,2,5,2,6,10,9,11,6,13,10,21,13,14,11,22,169,160,160,162,160,162,169,167,160,167,160,168,162,162,171,162,168,162,168,168,169,169,162,168,168,168,169,162,168,168,171,162,168,162,162,162,162,162,162,162,162,171,169,162,162,162,162,167,171,162,171,162,171,171,173,171,169,177,194,179,177,171,169,177,173,194,173,173,194,171,173,169,74, +2,1,2,6,2,2,5,2,5,2,1,5,2,6,1,2,7,13,17,15,5,13,15,8,13,13,36,109,32,16,16,47,46,106,110,126,31,13,106,132,129,123,136,130,136,119,130,139,146,153,143,143,113,11,17,8,11,6,6,6,6,2,6,2,110,116,31,123,126,140,144,136,126,116,108,7,32,110,31,2,106,138,138,122,110,17,2,6,2,21,17,11,1,2,11,16,13,11,6,7,7,2,2,2,7,7,7,2,6,2,13,1,7,13,8,13,7,11,6,2,6,6,2,2,13,7,13,14,11,8,6,14,6,1,12,1,2,13,6,7,2,5,7,13,7,13,13,8,6,2,2,2,2,2,2,2,12,11,6,13,8,17,6,2,2,5,2,2,6,1,1,2,2,1,1,1,1,1,1,1,2,2,5,2,5,11,13,15,13,17,11,13,17,11,6,1,2,5,2,1,1,1,5,1,2,2,1,1,1,2,5,2,2,2,1,6,5,1,2,2,5,2,5,2,2,2,1,2,6,1,1,2,2,2,2,5,2,2,5,11,10,6,21,28,15,64,155,162,169,166,162,162,162,167,169,162,168,162,162,169,162,162,168,162,168,162,169,169,171,168,168,171,162,169,171,168,171,168,168,162,162,171,162,162,162,162,162,168,169,162,171,162,167,169,162,162,167,162,168,162,175,169,171,171,177,194,169,173,171,173,171,177,171,173,171,169,177,194,162,74, +1,2,1,2,2,5,5,1,6,2,1,2,2,2,2,6,13,11,15,33,8,14,14,13,13,16,109,33,31,13,29,34,34,126,31,126,109,15,46,132,119,137,137,141,120,132,117,133,153,150,150,142,113,17,122,17,6,6,7,6,2,2,7,6,123,122,106,126,116,139,138,122,122,119,111,16,109,132,109,6,126,138,138,126,114,24,19,15,18,24,18,2,6,7,13,13,13,2,2,7,2,2,6,2,6,11,7,6,7,2,2,13,6,7,11,13,7,13,6,2,2,13,1,6,2,7,11,13,13,11,11,2,2,2,13,2,5,11,7,13,17,11,13,11,6,7,7,7,6,6,2,1,2,2,2,13,11,13,13,11,7,17,7,2,6,2,2,5,1,1,1,1,1,2,9,2,1,1,1,5,1,6,1,6,2,10,11,15,17,15,8,17,17,15,2,2,2,2,2,60,5,2,1,9,38,25,1,6,1,1,2,6,2,5,1,2,2,2,5,2,6,5,2,10,2,13,11,2,2,6,2,2,5,2,5,2,5,2,2,13,15,157,168,169,162,169,160,162,160,169,162,168,162,162,162,162,162,162,162,162,167,162,162,168,168,168,171,171,171,162,169,177,162,194,162,168,168,162,168,169,162,162,162,168,167,169,162,167,162,162,162,162,168,162,168,168,162,171,162,171,162,168,168,171,171,169,194,177,173,171,171,169,179,173,171,171,177,169,168,74, +1,1,5,2,6,2,2,5,1,2,1,2,5,2,5,2,13,13,32,46,17,21,13,13,7,22,32,22,17,13,14,34,106,124,22,123,111,8,120,110,106,151,114,139,144,132,132,132,148,153,150,115,114,17,114,13,6,6,7,2,6,2,2,12,140,108,116,132,144,151,150,144,137,119,110,16,36,106,18,13,137,138,138,126,110,18,22,6,17,22,11,13,15,13,13,2,2,2,11,6,2,6,2,2,7,7,11,2,6,2,11,7,7,7,16,11,7,11,6,6,2,2,13,1,5,13,7,6,6,6,1,6,1,2,7,2,2,13,11,14,11,13,13,7,6,7,13,7,7,5,2,1,1,2,6,13,7,11,13,7,17,8,7,2,2,5,2,2,5,2,1,1,1,2,2,1,2,1,1,1,1,2,5,2,2,10,13,15,18,29,11,15,17,15,6,2,2,5,2,2,1,2,1,2,2,0,1,1,1,6,5,1,2,2,6,2,5,2,1,2,5,2,10,11,7,13,13,11,6,2,2,25,2,2,2,2,9,2,11,78,162,161,160,162,162,162,160,167,169,162,162,162,167,169,162,162,167,169,162,162,162,162,168,162,162,171,171,168,169,169,168,171,171,169,168,168,169,168,171,167,169,162,162,162,162,162,159,169,162,162,162,162,167,162,162,162,168,162,162,171,162,168,169,168,194,169,177,171,169,179,173,194,168,177,171,173,168,171,168,74, +2,1,2,1,2,2,6,2,2,1,1,1,2,2,2,2,11,13,20,36,33,10,11,11,13,22,33,36,32,13,30,24,37,123,8,119,114,33,119,34,119,145,114,122,137,136,133,139,153,146,142,127,18,33,18,6,2,6,2,2,2,6,2,34,24,129,138,144,149,146,153,138,119,120,8,36,15,33,8,22,144,138,147,126,114,6,18,13,13,16,13,117,29,11,13,11,2,13,7,7,6,2,7,14,7,7,13,1,12,6,10,13,10,11,13,13,11,11,13,7,7,2,2,2,13,13,7,7,2,6,13,1,5,10,13,1,10,7,13,13,13,7,11,7,2,7,2,13,2,2,6,1,1,1,12,7,7,7,7,13,13,17,2,6,2,2,2,5,2,1,1,1,1,2,2,5,1,1,1,1,1,7,2,2,5,11,11,17,15,8,13,17,31,15,2,2,2,2,5,51,11,1,1,1,1,1,1,1,2,2,2,2,5,2,2,2,2,6,1,2,10,7,13,13,11,13,13,21,13,6,2,2,2,2,6,10,5,10,11,87,160,159,162,160,159,162,162,162,162,167,169,162,162,162,162,168,162,168,168,169,169,169,162,162,162,162,168,168,168,169,162,168,168,168,162,167,168,162,162,162,162,167,169,162,162,162,162,162,167,171,162,168,162,162,175,162,162,162,162,162,168,168,162,168,169,171,171,169,194,173,194,171,177,171,173,173,171,173,168,74, +1,2,1,2,1,6,1,2,5,2,1,5,2,2,5,2,11,13,22,18,110,6,13,16,11,32,37,34,36,13,30,16,123,125,29,37,34,43,136,149,151,138,144,132,138,139,132,133,149,152,143,143,113,18,18,11,6,2,6,6,2,7,6,37,24,144,144,138,150,152,150,136,137,116,5,126,11,13,2,106,146,153,144,123,8,13,13,17,17,22,11,14,6,2,13,2,6,6,11,11,7,6,7,29,13,7,2,6,5,2,12,13,11,7,13,17,7,7,2,2,6,6,12,2,12,11,13,6,2,13,2,1,2,10,2,2,12,13,13,13,11,13,7,6,7,7,16,16,11,2,2,1,2,1,7,11,13,13,13,7,11,8,2,2,2,5,2,2,2,1,5,1,1,1,2,1,1,1,1,5,1,5,2,6,1,5,13,13,15,15,15,30,29,6,6,2,2,1,9,12,10,1,1,1,1,1,1,1,2,5,1,6,2,2,5,2,5,1,12,1,5,10,7,11,7,11,21,24,111,46,131,131,11,2,2,9,11,6,29,163,162,162,162,162,162,162,162,162,162,162,162,162,162,167,169,162,162,171,167,168,168,169,169,162,168,162,171,168,168,168,168,168,169,168,168,162,162,162,162,162,162,168,162,162,167,169,162,162,162,162,162,168,162,162,162,162,162,162,162,162,168,169,168,173,171,173,173,194,169,194,177,171,173,171,173,171,169,177,169,74, +2,5,1,2,1,2,2,10,2,1,2,2,2,6,2,12,1,14,36,114,119,6,21,29,14,29,34,45,17,29,23,45,132,122,33,31,44,132,122,132,183,138,149,123,147,132,132,138,154,145,150,146,127,20,31,6,6,2,2,2,6,1,2,33,24,144,144,149,149,144,147,139,137,116,16,31,8,8,11,136,144,144,123,122,11,14,14,29,22,16,11,2,2,2,2,40,41,41,40,27,40,73,73,49,2,2,2,2,6,2,11,7,13,13,11,6,11,6,2,2,2,5,2,2,13,13,7,7,5,2,2,2,2,5,2,2,13,13,13,13,11,6,7,13,6,7,15,6,6,2,2,2,1,2,7,11,13,13,6,6,11,17,2,2,6,2,2,5,1,2,2,9,2,2,2,1,1,1,1,2,1,2,5,1,2,5,11,8,17,15,18,30,30,11,2,38,6,1,1,1,1,1,5,2,2,1,1,2,2,2,6,1,2,5,2,2,2,6,10,2,5,9,13,13,26,29,120,45,180,173,198,202,30,2,5,2,2,42,156,162,162,161,168,168,162,162,168,168,169,162,169,162,168,162,168,168,162,162,162,162,167,169,169,162,162,162,162,162,168,169,168,162,168,162,162,169,162,162,167,162,162,162,162,162,162,162,167,169,162,162,162,162,168,162,162,162,162,168,162,169,171,171,162,177,171,171,177,171,177,177,173,171,177,173,171,173,171,171,171,74, +2,2,5,2,1,5,5,25,2,1,2,5,2,2,11,7,13,30,34,46,109,13,16,22,15,22,46,34,22,29,32,30,106,140,33,110,18,126,114,151,153,126,126,48,150,140,119,139,184,146,154,146,145,24,114,19,7,6,6,2,6,2,2,32,109,139,144,149,144,150,150,137,139,109,22,33,21,117,6,126,126,138,136,114,30,11,7,13,30,16,7,11,2,5,2,2,6,1,6,2,2,1,2,5,2,2,5,2,2,2,2,11,13,13,11,13,8,2,2,6,2,2,6,2,12,13,11,2,7,2,2,2,2,5,2,2,12,7,7,2,7,11,13,13,6,11,7,6,6,2,6,1,2,13,7,13,13,13,15,29,16,29,7,2,2,2,2,6,2,1,2,1,1,1,2,2,1,1,5,2,1,2,10,2,5,11,6,17,15,17,33,17,36,2,2,2,2,2,6,1,1,2,6,57,21,5,1,2,5,2,2,2,5,2,5,2,5,10,2,5,10,10,12,14,7,117,132,129,194,179,171,179,159,2,65,41,159,162,160,171,160,162,168,162,162,169,168,169,168,168,162,168,169,162,162,167,162,162,168,168,162,171,162,168,168,162,169,162,171,160,162,162,162,162,162,167,162,160,162,162,168,162,167,171,169,162,168,162,169,168,169,162,162,168,168,162,168,169,171,171,171,173,171,173,169,171,179,173,171,171,194,171,173,171,173,171,171,173,162,74, +2,5,2,2,1,2,2,2,1,1,2,2,5,2,7,13,21,29,22,34,33,8,29,32,16,36,117,46,29,22,17,22,120,132,114,116,120,110,144,153,183,144,120,117,153,144,106,133,150,153,153,146,150,115,33,8,6,2,2,6,6,6,2,117,126,133,147,150,149,144,147,139,144,31,22,34,18,109,1,126,126,128,125,126,109,24,29,6,2,6,11,13,2,2,1,2,2,6,1,2,6,2,2,2,1,1,2,1,5,2,5,11,11,11,8,15,13,6,2,2,2,2,7,2,13,11,7,7,7,13,1,1,2,10,2,2,21,11,11,6,13,13,14,11,11,13,11,11,8,2,6,2,2,11,7,13,13,11,18,29,18,20,11,6,2,5,2,2,2,6,1,1,1,1,1,2,2,1,2,1,5,2,2,5,2,2,11,8,15,29,31,24,17,6,2,6,6,2,2,1,1,1,2,1,1,1,1,2,2,5,2,6,2,2,2,2,2,21,2,6,5,1,21,164,18,119,141,176,179,179,173,173,171,194,173,173,169,171,162,162,162,162,162,171,169,171,169,162,168,169,168,168,162,162,162,168,162,162,162,168,162,168,168,168,168,162,171,162,167,169,168,162,169,160,162,162,160,167,169,169,171,169,171,162,171,177,168,177,171,162,168,171,162,173,162,171,171,173,194,171,194,179,171,179,194,177,171,177,194,173,179,194,173,173,171,177,171,171,169,74, +2,2,2,5,1,2,5,1,1,1,5,2,2,2,13,13,13,16,30,43,17,13,16,46,17,29,23,45,16,30,46,106,110,126,126,132,109,106,149,183,144,144,126,45,152,149,106,144,153,183,153,152,142,19,108,8,11,6,2,6,2,2,6,37,110,138,144,149,151,150,146,123,136,15,29,24,24,109,13,144,122,127,125,122,24,22,11,2,2,2,8,13,2,6,2,5,7,2,11,2,2,2,6,1,1,2,5,1,2,2,2,6,13,8,15,22,15,2,6,2,2,13,10,13,13,7,6,6,7,2,1,1,2,13,2,2,13,11,2,11,14,15,11,7,8,17,11,11,13,2,6,2,2,13,5,11,11,13,24,31,108,109,6,2,2,2,2,5,1,1,2,2,12,1,2,2,5,5,2,2,6,1,5,2,5,2,11,15,15,17,33,24,34,15,6,6,2,11,6,2,2,1,1,2,1,6,1,2,6,1,2,2,2,2,5,2,2,21,13,7,6,68,202,198,176,176,179,179,179,179,179,169,173,171,171,168,171,162,162,162,168,169,162,162,171,162,169,162,171,162,168,168,169,168,168,168,162,162,168,171,162,168,169,169,162,171,162,162,168,162,162,168,162,160,169,162,162,162,168,168,168,171,168,169,194,168,171,171,173,173,171,179,171,171,171,173,194,173,179,179,179,173,194,173,179,179,179,194,173,194,173,179,179,179,194,169,179,173,169,74, +2,6,5,1,2,1,6,2,1,1,2,2,6,2,21,13,13,14,31,34,29,7,33,37,22,17,29,32,22,106,120,116,122,126,132,138,126,119,153,184,141,144,140,36,154,144,117,149,153,154,153,154,127,34,20,15,11,6,6,6,6,2,2,29,24,150,151,144,139,146,138,138,122,11,16,24,18,24,22,145,142,122,140,20,31,17,13,2,5,2,15,17,2,2,2,2,5,2,7,11,2,2,2,1,1,1,1,1,2,5,2,7,15,13,15,17,13,6,6,2,2,10,7,11,13,10,13,5,11,6,2,0,2,13,2,11,11,13,13,11,7,13,13,11,14,11,8,13,11,6,2,6,2,13,13,21,17,13,18,24,33,24,2,2,2,6,2,2,5,1,2,9,9,1,1,1,1,2,2,1,2,2,6,1,2,11,13,17,22,30,109,24,15,36,11,7,13,110,16,22,2,1,2,2,6,1,2,6,1,11,2,2,6,2,2,6,5,29,30,21,78,198,198,179,179,202,179,171,179,171,179,173,171,173,168,194,162,168,168,168,168,169,162,171,171,169,171,177,162,171,162,169,168,168,168,162,162,167,171,162,168,168,162,168,162,171,162,169,168,162,162,168,168,162,162,162,162,162,168,168,169,173,162,171,171,173,171,173,171,179,179,194,173,179,179,194,179,177,179,179,179,179,202,179,179,179,194,179,202,179,179,179,194,179,179,179,179,171,169,74, +2,2,6,2,6,1,2,1,2,5,2,5,1,2,14,16,16,32,46,30,16,7,117,130,114,11,16,109,24,106,33,106,126,126,122,141,126,147,153,151,139,149,128,23,154,151,153,150,154,153,152,152,143,17,24,105,26,6,2,11,2,2,6,7,24,149,144,144,144,144,126,138,34,6,17,17,22,6,24,138,143,128,126,46,33,29,11,6,2,11,8,17,11,2,6,2,2,2,13,6,2,2,5,1,1,1,1,2,6,2,13,16,17,15,15,13,6,2,2,2,7,13,6,14,13,8,2,13,13,2,6,1,1,13,2,13,11,11,2,11,13,14,14,13,13,11,17,15,15,13,2,2,15,21,13,21,29,22,29,18,109,17,11,6,2,2,2,12,9,2,2,1,1,1,1,2,5,2,1,2,5,2,2,2,6,5,13,29,33,109,109,31,13,30,109,33,127,106,114,22,1,2,12,5,21,36,2,2,2,11,6,2,2,2,2,2,12,11,30,196,198,179,179,198,179,179,179,194,179,179,171,179,171,173,171,169,171,162,168,168,168,162,194,162,169,171,171,171,171,171,171,162,168,168,168,168,162,162,168,168,171,162,171,169,162,168,168,168,168,168,168,162,169,168,162,167,169,169,162,171,194,171,173,171,171,171,194,169,179,179,179,198,179,195,179,179,177,179,179,194,179,179,195,202,195,173,179,198,179,198,198,173,198,198,173,198,173,179,179,74, +2,7,32,17,8,2,5,2,1,2,2,2,6,7,29,13,36,45,22,36,24,12,117,132,29,2,22,34,34,110,31,122,126,138,122,123,149,133,139,139,141,144,140,36,153,150,154,186,153,153,152,150,143,20,20,127,18,11,2,2,11,6,2,13,22,123,122,138,144,145,141,126,18,11,11,22,24,3,110,151,144,128,123,32,31,11,2,2,2,13,15,17,6,2,1,2,13,2,7,2,5,2,2,1,1,1,2,1,2,2,15,8,13,15,13,6,11,6,7,6,6,13,7,16,16,13,11,13,11,2,2,1,6,13,13,6,13,7,2,21,21,29,13,11,11,15,17,15,29,11,7,13,14,15,13,13,13,18,22,34,33,6,6,2,6,6,2,2,5,1,1,1,1,1,2,5,2,5,2,1,2,2,5,2,2,2,13,13,34,44,108,18,13,119,19,114,115,47,136,133,11,6,9,11,29,18,11,11,2,11,2,6,2,6,2,2,15,24,200,179,179,179,179,179,179,179,179,179,179,179,179,179,171,179,171,173,171,171,171,171,171,171,171,169,177,168,173,168,194,168,194,168,168,169,169,162,168,169,168,162,171,168,169,168,169,171,171,171,162,169,162,171,169,162,162,162,168,162,168,171,171,169,179,179,177,179,194,173,194,179,194,179,195,198,179,179,179,198,202,194,198,198,179,198,198,198,179,179,179,179,198,195,198,202,198,198,198,179,179,69, +2,13,22,114,33,15,16,11,2,6,9,2,2,12,36,30,47,16,21,33,29,18,47,46,11,6,29,17,18,36,24,122,138,144,109,130,110,136,149,122,123,132,148,24,154,183,186,154,183,153,153,153,142,18,24,127,108,6,1,6,6,2,2,6,114,126,122,136,144,138,144,132,17,6,6,17,110,8,137,150,140,139,33,30,33,6,2,2,5,15,11,6,6,2,2,2,2,2,12,2,2,2,5,1,1,2,5,2,5,2,21,16,29,17,11,11,17,6,8,7,13,13,11,13,16,7,11,13,13,7,1,1,7,21,21,29,17,7,10,13,13,13,11,29,32,32,15,22,15,11,11,13,14,7,13,21,29,17,33,116,116,36,34,34,13,22,2,2,2,1,2,1,1,1,1,2,2,1,1,5,2,5,2,2,5,10,13,13,33,109,33,15,13,109,32,46,33,46,117,133,11,5,10,1,11,11,119,109,1,2,2,11,6,2,29,29,16,179,179,179,179,179,179,194,179,179,179,194,179,179,179,179,179,173,171,171,171,173,168,171,173,173,171,171,169,171,194,171,171,171,168,168,168,169,171,168,169,162,169,168,169,171,162,168,168,169,162,171,171,194,162,171,162,168,162,162,167,171,162,168,171,179,173,179,179,179,179,195,179,198,179,199,198,195,198,179,198,198,179,195,199,196,198,195,198,195,198,196,198,198,198,203,203,198,200,203,195,198,179,74, +1,2,29,34,34,22,17,22,2,2,2,6,1,7,29,30,49,2,14,34,22,18,21,22,8,13,21,22,22,16,33,116,144,144,18,116,106,149,123,146,140,149,154,24,183,153,183,154,153,153,153,153,128,10,18,114,142,11,2,2,11,2,6,6,110,116,126,145,145,150,138,124,6,11,6,30,123,8,138,137,138,119,33,16,13,2,5,2,13,33,11,2,11,6,2,2,6,1,15,11,6,2,2,1,2,5,2,2,2,2,12,16,13,17,11,7,6,6,7,6,7,16,11,13,30,11,13,16,21,11,1,1,13,16,29,29,16,11,2,13,14,29,14,22,30,16,22,16,11,11,13,13,13,13,14,14,14,33,132,125,120,34,13,126,122,138,2,2,2,1,1,2,5,1,1,2,5,2,2,1,2,2,5,2,2,6,13,21,110,20,33,8,17,117,109,116,32,45,47,133,114,10,121,119,10,26,132,70,11,6,2,6,11,8,32,30,194,195,179,179,179,194,202,179,194,198,179,179,179,169,179,173,179,171,171,173,173,171,173,171,171,173,171,169,171,162,171,162,168,168,168,162,162,162,162,168,168,168,169,162,194,161,173,171,171,169,177,162,194,168,169,194,171,169,168,168,162,162,162,194,171,169,194,194,179,179,198,179,198,199,196,199,199,199,199,198,199,199,196,199,199,196,199,199,199,199,198,198,203,200,198,204,201,200,204,200,195,198,198,131, +2,6,21,36,21,6,18,109,15,2,6,1,12,12,13,16,13,11,6,16,18,30,33,17,13,13,11,16,16,13,34,149,138,34,122,149,116,138,138,186,141,186,183,110,185,151,153,153,154,153,153,146,142,8,122,150,125,2,2,11,6,6,11,8,110,144,150,143,146,146,122,24,2,11,11,24,114,22,119,149,123,106,33,18,5,2,2,11,8,110,15,29,106,6,2,2,2,11,13,14,13,6,2,6,2,2,2,6,2,7,22,13,18,29,6,6,6,7,7,13,6,16,11,13,18,1,21,17,13,6,2,1,13,16,29,16,17,7,14,21,29,16,21,29,18,22,22,17,33,8,13,13,13,13,14,29,29,30,125,111,15,11,20,145,126,136,2,2,2,2,5,2,2,2,1,6,1,2,6,1,6,2,2,5,2,2,21,29,117,37,22,11,16,29,36,33,43,22,109,124,21,2,132,37,6,2,182,204,74,11,6,11,20,180,198,203,198,198,179,179,179,179,179,179,179,179,179,194,179,194,169,179,179,194,173,194,169,173,173,171,194,169,173,173,171,171,169,171,168,162,168,162,160,162,168,162,175,169,169,171,171,169,194,168,173,171,169,171,173,171,173,171,169,171,168,168,169,194,169,171,162,194,173,179,179,179,195,179,198,198,196,199,199,200,199,199,195,199,203,203,199,203,199,196,199,200,200,200,200,204,200,198,204,204,200,204,198,203,196,74, +2,2,10,11,1,13,122,114,33,11,2,1,2,6,36,16,13,14,13,7,29,24,22,43,17,13,11,17,16,13,37,140,126,149,149,138,119,149,123,153,152,153,150,24,130,149,153,152,153,153,152,150,142,116,125,128,16,2,2,2,2,6,6,6,116,150,150,143,143,125,136,17,2,11,22,33,18,15,129,144,123,116,33,11,2,6,2,7,13,110,18,13,15,11,16,12,6,7,13,14,14,17,1,1,2,2,11,2,2,29,16,16,22,11,6,7,13,11,13,6,13,22,11,22,17,1,21,29,17,6,2,1,13,29,17,33,29,13,13,16,29,30,21,29,16,30,15,29,17,11,17,14,13,14,29,16,21,18,116,114,3,6,138,127,126,110,6,2,5,1,2,2,5,2,2,2,2,6,1,2,2,2,2,2,2,5,10,29,106,114,106,2,21,68,29,50,106,46,133,188,6,7,29,16,117,130,203,203,172,7,30,130,180,199,198,198,179,198,195,179,179,179,179,179,179,179,179,179,171,171,194,171,173,171,194,179,171,171,173,194,194,179,171,169,173,171,168,162,171,162,162,171,162,162,171,162,171,162,171,168,171,173,173,171,173,168,171,173,173,171,173,171,171,171,169,168,168,171,169,168,171,171,177,179,179,194,173,195,179,196,199,199,199,199,199,199,199,199,199,199,199,200,198,200,200,203,198,204,198,196,204,200,204,204,201,200,200,195,199,74, +2,5,0,2,1,12,106,111,109,29,2,5,2,7,16,11,13,11,13,11,22,33,22,29,13,10,22,46,13,17,36,119,129,149,140,139,138,149,132,149,153,150,147,16,47,133,153,154,152,153,153,153,125,115,122,109,2,6,2,2,11,6,6,6,34,144,128,128,142,138,125,6,13,24,116,120,125,8,22,22,123,125,8,6,2,2,2,13,2,22,29,3,22,16,17,2,6,7,14,29,13,17,6,6,2,2,2,2,6,30,14,17,22,11,7,11,13,13,13,13,13,20,29,32,13,1,13,22,17,17,2,2,21,22,32,30,31,11,13,29,22,16,30,16,16,29,15,17,11,2,21,21,11,13,16,16,16,24,33,125,6,113,145,126,147,119,2,2,2,2,6,2,2,5,2,13,13,2,5,11,2,6,2,2,6,2,12,29,32,122,125,6,16,66,116,141,29,21,106,6,15,43,15,47,47,195,198,202,198,131,47,141,176,198,179,200,202,198,179,198,198,179,202,179,179,179,179,179,171,171,171,171,173,171,171,171,194,171,179,179,179,179,179,173,171,173,162,168,168,162,162,162,162,162,162,162,168,162,168,171,171,194,169,173,194,177,171,177,171,179,177,173,171,173,171,171,171,171,171,179,177,179,194,179,179,179,179,179,173,198,195,195,195,199,195,199,199,198,198,199,196,200,198,204,200,200,200,204,201,200,204,204,204,195,204,204,204,204,196,74, +2,2,5,1,2,7,34,109,108,108,11,2,2,5,11,1,6,2,7,13,16,37,31,13,12,16,29,13,33,106,141,122,120,149,18,106,119,147,129,152,183,152,144,8,22,183,153,154,153,153,153,150,125,138,111,11,2,2,2,2,7,6,6,11,34,143,128,138,128,126,125,17,22,119,122,138,126,11,6,7,136,111,11,6,2,2,2,13,11,18,18,22,11,15,11,2,7,11,13,13,13,6,7,21,11,2,2,11,7,18,15,24,30,2,13,7,11,13,13,11,13,16,30,37,11,1,2,22,18,15,6,2,16,30,22,32,31,11,7,13,17,29,18,29,16,17,30,22,13,11,21,17,6,21,29,29,29,17,34,111,120,140,127,149,144,144,8,2,6,2,2,6,2,2,2,15,11,2,34,37,36,7,13,11,2,2,11,36,34,120,123,121,170,48,124,141,106,4,15,106,11,17,18,106,200,202,195,179,198,179,8,175,198,199,198,179,200,179,198,198,179,179,198,179,198,179,179,179,179,171,171,173,169,179,173,179,174,179,179,179,169,179,173,171,177,171,171,171,162,168,168,162,166,161,162,162,162,171,160,168,168,171,169,194,169,171,177,169,194,179,179,194,179,169,179,169,171,173,173,168,171,194,179,179,194,179,175,179,194,173,198,199,199,200,199,199,195,200,200,198,200,198,204,200,204,201,200,200,204,201,201,195,204,204,200,201,204,201,204,131, +2,5,2,1,1,12,32,37,111,109,18,2,6,26,2,5,1,5,13,15,16,31,31,16,12,16,11,23,130,117,150,148,37,30,8,47,141,132,37,123,144,154,153,8,36,150,147,153,154,184,150,147,125,125,8,11,2,6,2,2,6,6,6,6,138,143,125,127,126,114,122,6,36,132,139,122,24,2,11,11,126,19,6,11,6,2,11,16,11,16,24,16,15,11,2,2,21,13,21,16,22,6,17,6,13,2,2,12,16,32,30,46,13,2,12,11,6,11,7,21,22,17,29,33,1,1,1,13,24,2,13,11,13,31,32,34,31,7,13,16,22,30,17,30,15,17,15,31,15,2,14,29,11,16,30,22,22,46,110,18,114,119,140,140,144,151,116,2,2,1,2,2,2,6,2,11,6,29,46,36,32,13,10,21,10,5,13,36,68,108,123,137,19,6,24,109,106,154,110,43,16,45,190,202,198,198,179,199,195,198,203,203,200,179,198,203,203,199,198,179,198,198,179,179,198,179,179,179,171,171,169,179,171,173,179,169,179,171,173,179,171,171,171,194,169,177,171,177,162,169,168,169,169,169,168,169,168,162,168,162,162,168,169,162,194,171,173,171,171,194,179,177,194,177,179,194,169,173,171,177,173,171,179,194,171,171,173,171,177,194,173,199,199,199,199,204,200,200,200,203,200,203,200,198,200,204,204,204,201,204,201,201,204,205,201,205,201,205,204,74, +2,2,2,1,2,16,30,30,33,37,109,22,0,1,2,2,6,2,2,13,32,2,43,122,16,17,21,22,37,130,137,151,119,123,24,47,149,114,32,133,153,153,152,8,130,147,154,184,153,150,150,143,126,127,8,6,6,2,6,2,11,6,11,14,128,128,128,128,138,114,138,145,109,109,128,136,18,6,6,13,116,11,15,11,2,2,34,15,22,29,22,22,33,18,6,2,17,29,30,33,30,13,36,11,17,2,2,29,16,30,30,32,2,6,2,11,7,7,13,16,29,16,22,29,2,1,2,21,11,17,44,7,10,32,46,24,33,5,10,29,18,33,16,29,16,20,29,111,18,1,13,18,14,30,30,30,22,109,110,109,18,144,132,147,153,150,143,6,2,2,6,2,11,6,6,6,22,23,43,34,34,29,13,1,10,10,13,17,124,142,125,142,140,109,44,30,47,121,165,194,190,200,179,202,198,179,198,179,198,198,179,198,179,198,199,198,198,199,179,203,198,179,198,198,179,179,179,179,179,179,179,179,179,179,179,179,179,179,173,171,179,171,173,173,171,171,171,169,171,168,168,169,171,171,171,162,169,162,162,171,162,168,169,168,168,168,171,171,171,169,179,177,171,194,177,179,194,169,179,179,179,194,179,171,173,173,171,171,171,177,179,194,199,199,200,200,204,204,200,201,200,201,203,200,200,200,204,201,204,201,201,204,201,201,205,201,205,204,201,74, +2,2,2,9,1,7,32,46,36,34,24,29,2,2,5,2,2,2,11,106,20,21,129,130,14,21,16,22,34,119,181,149,106,22,15,130,120,119,110,183,153,153,150,8,152,152,150,150,153,148,147,139,114,127,8,11,2,2,2,2,6,6,6,33,143,150,138,143,128,47,139,148,112,126,138,140,17,11,6,17,116,6,13,8,2,11,119,6,30,30,16,37,17,46,8,11,11,23,30,10,21,21,13,21,13,2,6,16,21,30,30,13,2,2,7,13,21,14,21,34,30,15,30,18,1,1,2,13,15,29,16,2,21,24,46,33,33,11,7,16,29,14,22,17,29,34,114,109,22,2,21,29,8,18,15,13,29,110,116,132,106,126,139,153,150,147,136,10,6,16,11,8,8,8,13,11,30,49,36,29,36,29,17,21,50,172,15,130,114,116,133,129,70,166,130,33,134,177,194,177,194,173,194,179,202,198,194,198,202,179,203,198,198,195,198,199,198,199,195,200,195,198,198,198,171,198,179,179,179,198,179,202,179,179,173,179,179,179,179,179,173,179,169,179,177,171,177,171,169,169,171,169,194,169,173,179,168,162,162,160,162,168,162,162,168,168,171,162,179,171,194,179,177,179,177,171,173,171,179,179,179,179,173,179,194,169,171,173,194,171,173,179,198,199,199,204,204,201,200,200,204,200,200,204,200,200,204,201,205,204,201,201,205,206,204,201,206,201,201,69, +9,1,2,2,9,5,30,109,116,120,109,10,2,6,2,2,5,13,45,130,106,13,14,15,11,45,141,34,47,117,132,144,18,119,109,45,32,120,36,133,153,153,147,24,138,138,150,153,148,126,149,122,123,128,3,11,6,6,2,2,11,6,8,132,149,146,144,149,128,116,144,145,138,126,136,151,116,29,36,48,29,6,11,15,17,16,123,6,16,36,30,36,29,29,18,21,14,30,7,7,11,21,6,7,13,13,21,7,7,30,47,6,2,7,13,17,21,7,17,29,29,16,24,17,2,1,1,11,13,16,5,10,29,34,43,33,44,6,15,16,29,29,43,36,22,46,109,32,31,2,7,15,22,29,11,6,16,132,120,116,110,149,153,150,148,144,140,8,21,17,11,17,18,20,17,2,29,21,29,14,33,132,29,30,46,3,13,106,123,46,11,35,163,162,168,169,171,169,171,194,177,198,179,194,202,179,179,198,202,202,198,203,179,200,179,200,199,195,198,196,203,203,198,198,198,198,179,202,198,179,179,198,198,202,198,202,179,179,179,179,179,179,178,169,171,171,171,171,173,171,177,171,179,194,179,177,179,168,162,162,156,162,162,171,162,162,168,162,168,171,169,194,179,194,194,173,194,179,179,179,179,194,179,194,171,171,173,177,194,173,194,198,179,198,200,200,204,204,204,204,201,204,200,204,204,204,201,204,201,201,201,201,205,201,206,205,201,206,205,74, +2,6,1,2,1,2,29,34,123,111,109,33,116,119,16,6,6,32,130,120,32,21,16,26,2,36,132,132,149,151,140,149,8,126,111,15,106,124,32,117,144,144,106,15,137,144,149,150,144,144,144,111,125,140,17,6,6,2,2,2,11,6,22,133,147,150,145,136,144,140,138,127,126,122,141,141,14,24,19,22,6,6,2,13,13,36,122,1,17,22,30,16,48,31,119,30,30,13,29,16,12,47,2,29,36,29,29,1,30,32,10,2,5,11,13,13,13,14,23,22,16,30,17,24,2,1,2,11,2,16,2,11,22,30,33,32,46,34,31,13,13,21,28,29,22,30,33,33,18,1,12,17,15,7,13,18,33,119,106,116,147,152,150,150,148,140,146,115,109,11,6,6,17,6,2,6,2,13,43,13,30,119,106,106,30,13,32,126,22,159,166,162,162,160,162,162,168,171,171,171,194,169,194,179,202,179,198,179,198,179,200,199,199,195,198,199,199,199,195,196,198,198,200,198,200,203,198,198,179,198,198,179,198,179,179,198,179,202,179,179,179,179,179,179,179,168,173,173,171,171,171,169,194,179,177,179,179,179,168,162,162,162,162,162,162,162,168,168,168,171,171,194,179,179,179,179,173,195,179,179,179,179,173,194,171,194,171,169,179,194,179,179,195,179,200,195,204,200,201,204,200,204,201,201,204,204,201,201,204,201,204,204,201,206,206,201,205,206,201,74, +2,1,2,2,1,5,30,47,126,122,116,46,149,152,34,43,106,132,119,130,15,14,21,12,6,14,22,152,151,120,133,132,15,116,33,13,24,123,133,133,123,145,109,16,137,138,149,153,153,115,47,106,115,142,15,6,6,11,2,6,6,6,34,144,144,144,136,138,138,123,113,126,47,13,122,110,6,16,33,17,8,2,30,32,129,133,130,6,36,30,36,117,120,6,32,32,43,11,45,21,21,50,14,36,29,21,13,33,47,29,1,2,11,2,13,8,13,29,17,30,29,32,46,20,2,1,2,13,13,13,11,11,29,32,31,120,140,46,17,13,17,15,21,13,15,33,109,32,17,6,2,16,11,11,16,30,46,106,106,140,152,148,153,152,150,136,149,113,20,6,2,11,6,18,8,15,11,10,11,11,36,120,119,147,128,108,109,118,141,161,162,160,162,160,171,169,162,171,171,162,171,171,171,169,194,194,177,179,194,198,198,202,200,199,199,198,199,196,203,198,200,203,203,195,198,203,198,198,198,198,179,198,198,198,203,195,203,195,198,202,202,179,179,179,171,173,171,179,171,173,171,173,171,179,179,198,179,179,179,168,162,162,156,161,156,162,162,168,162,173,171,171,169,194,179,179,194,179,179,198,179,179,179,194,179,171,177,194,173,194,179,198,194,198,199,199,200,201,200,204,204,201,204,201,200,204,201,201,204,201,201,205,201,205,201,206,206,201,206,131, +2,2,1,1,2,2,16,36,122,126,116,46,122,116,33,36,139,133,70,15,6,7,7,2,13,13,43,153,147,120,120,4,29,126,109,40,133,137,20,22,33,145,105,31,147,136,153,154,145,125,31,31,18,140,8,6,6,2,2,2,7,6,117,138,144,138,128,137,126,114,109,22,6,22,138,15,6,16,24,18,44,34,29,30,120,18,32,2,29,23,30,117,29,13,30,43,29,29,17,22,15,6,21,29,34,6,36,21,17,10,1,2,5,2,11,15,13,22,22,30,29,34,31,24,2,1,2,14,17,1,5,13,45,47,117,129,120,106,34,106,17,21,11,15,37,31,33,33,20,2,2,29,22,16,17,29,106,110,116,124,152,148,146,142,144,139,139,136,15,6,6,6,6,8,17,15,17,6,2,36,16,119,132,142,125,109,116,149,169,162,162,162,168,167,162,167,171,169,171,169,171,162,168,194,168,177,171,173,194,202,179,199,199,199,203,199,199,199,198,203,200,198,196,203,200,195,198,200,203,198,198,203,179,200,198,203,199,203,199,179,198,198,173,179,179,194,179,169,173,171,171,171,179,179,194,179,198,198,179,179,171,168,168,162,168,162,168,168,171,194,171,177,171,171,177,194,179,179,179,179,179,194,194,179,179,179,179,179,179,179,179,179,198,198,179,200,195,195,200,199,204,200,200,204,204,204,201,204,201,201,205,201,205,201,206,206,201,206,205,74, +82,10,2,2,1,5,16,33,106,126,144,139,136,44,7,132,185,132,46,1,5,1,1,2,16,139,148,153,144,124,17,13,24,153,18,29,34,109,106,24,29,138,114,146,126,147,153,144,150,142,105,15,8,126,4,5,2,2,5,2,11,11,133,149,150,149,126,146,125,126,14,2,6,22,114,5,7,16,13,114,111,115,18,33,29,6,11,2,29,32,17,32,16,33,32,34,47,123,122,31,22,13,13,43,32,2,34,34,29,12,1,2,2,2,13,109,15,31,18,29,17,106,33,17,2,1,2,21,22,6,0,29,45,106,46,109,46,109,34,106,24,5,11,14,24,33,33,29,24,6,6,16,29,16,29,8,47,46,114,142,145,139,150,153,149,147,123,126,2,11,6,6,6,11,18,22,17,13,29,10,29,106,33,140,125,114,131,160,168,168,162,162,162,162,162,162,168,169,171,177,171,169,168,168,171,173,171,169,194,179,179,195,198,198,200,199,196,204,200,200,200,200,200,200,204,203,203,198,196,198,198,199,199,179,195,179,200,179,198,198,179,198,179,179,171,179,179,179,171,194,171,179,173,194,179,198,199,199,179,179,179,179,171,171,168,168,173,171,168,171,171,171,173,194,179,173,179,179,179,194,179,179,179,179,202,179,171,194,179,198,179,198,179,198,179,198,196,199,203,200,200,200,204,201,201,200,204,201,201,205,201,204,201,205,206,201,206,201,201,74, +95,53,6,0,1,2,29,29,47,133,130,136,126,118,21,149,132,141,13,2,2,1,2,13,22,149,138,146,136,46,11,17,109,143,20,16,46,116,148,24,32,154,127,126,144,146,145,128,144,142,105,8,46,128,6,17,13,2,2,2,11,16,133,141,147,144,150,122,113,111,13,6,6,22,109,2,11,13,18,114,33,111,115,31,8,17,6,6,13,16,22,22,30,106,46,37,119,129,120,47,106,31,2,47,43,14,22,15,17,2,2,5,2,11,11,106,11,20,31,15,15,116,110,15,1,1,2,29,18,2,2,21,30,22,17,43,34,111,37,110,30,9,2,34,31,31,24,24,15,1,11,33,30,22,36,29,110,106,127,138,146,145,153,154,147,145,124,144,6,2,2,6,6,13,20,17,17,8,49,39,129,106,106,111,115,164,162,169,168,162,171,169,169,162,168,168,168,171,171,169,168,168,168,168,171,194,171,173,171,177,194,202,203,195,198,204,199,200,200,198,204,204,200,200,204,200,200,203,198,203,198,198,202,199,203,199,203,195,179,198,198,179,198,202,179,179,179,179,194,169,173,179,168,179,179,198,199,199,196,203,198,195,179,179,179,179,168,171,174,173,171,171,171,169,173,194,173,194,179,194,179,179,195,179,194,198,202,179,179,198,179,198,198,198,198,179,198,198,179,200,195,200,204,204,204,201,201,200,201,201,205,201,205,201,206,201,206,206,206,131, +89,84,38,5,2,2,13,21,32,34,139,147,149,130,117,133,149,136,6,2,2,6,2,7,29,110,153,150,111,6,8,114,144,152,4,14,46,24,24,13,16,137,128,3,114,142,150,150,115,142,114,11,109,115,31,110,7,6,2,2,11,16,110,122,145,140,115,137,154,123,6,6,2,47,20,2,6,7,16,109,119,108,126,8,15,17,17,2,21,31,30,16,30,47,34,68,110,48,132,31,46,24,15,34,24,13,16,30,13,2,2,7,2,7,13,18,21,24,31,15,43,20,109,8,2,1,5,11,22,6,2,13,30,32,30,24,106,46,47,32,33,6,2,18,30,36,16,117,6,2,30,37,43,22,30,45,106,132,125,144,153,153,153,153,151,151,149,126,11,2,2,6,6,6,18,31,33,14,13,8,49,47,8,111,164,169,169,169,162,168,162,168,168,169,171,168,171,169,171,168,168,169,168,162,194,169,179,171,171,194,179,179,196,199,200,203,204,199,198,200,200,198,204,198,201,200,199,199,199,199,198,198,179,202,195,203,196,179,198,198,179,202,179,198,179,179,179,179,171,179,171,177,179,179,194,179,199,199,199,199,196,203,195,198,198,179,179,179,179,169,173,174,194,171,179,179,194,169,179,179,179,179,179,198,179,198,194,179,179,198,198,179,198,199,179,198,203,198,198,198,195,203,198,204,201,200,204,201,204,201,205,205,201,201,205,206,201,206,201,74, +89,90,91,90,71,2,7,22,47,119,139,182,149,140,106,132,150,132,11,2,2,2,6,7,16,119,154,151,17,13,29,152,150,140,2,14,119,110,29,1,7,117,33,126,147,128,150,150,105,138,127,6,109,109,128,37,7,2,2,5,6,14,123,144,126,127,128,153,152,125,8,6,6,119,19,5,6,14,34,122,109,111,47,19,13,13,11,6,16,13,13,22,34,106,32,36,106,33,34,18,33,18,31,29,18,13,29,11,2,2,6,2,2,2,12,11,17,108,33,24,109,31,122,6,2,1,2,13,22,8,6,16,34,33,16,46,106,120,116,132,144,109,5,121,16,22,129,122,2,5,36,30,29,29,22,47,36,132,127,139,151,153,153,148,151,137,149,34,2,6,2,11,17,22,21,17,22,109,157,166,171,78,157,166,169,169,169,171,168,168,169,169,169,162,168,168,168,168,168,169,162,168,169,171,171,173,173,171,171,179,202,179,203,200,198,203,200,199,200,198,204,196,204,196,198,196,199,203,199,198,198,203,179,198,179,198,198,203,195,179,198,198,198,179,179,198,173,179,179,194,194,177,179,179,179,198,179,198,199,200,196,203,199,199,198,198,198,202,179,179,198,194,202,179,179,179,179,179,179,173,179,179,198,179,198,179,198,179,198,179,179,198,199,198,198,198,195,198,198,203,195,200,200,203,200,204,201,200,201,205,201,201,205,205,201,201,205,201,206,74, +90,90,91,90,90,38,11,129,130,47,120,133,133,123,29,149,147,125,16,7,11,6,2,11,22,130,146,136,11,6,33,150,137,144,111,24,33,43,114,22,132,119,109,106,8,8,138,148,8,146,125,11,114,18,46,18,2,2,2,2,2,29,116,114,126,145,153,152,144,128,16,6,6,137,20,6,6,6,11,20,109,18,114,22,6,13,11,11,6,6,30,30,29,106,30,30,46,17,36,17,30,24,15,30,15,4,7,6,2,2,2,6,6,2,6,13,1,16,11,8,33,32,136,2,1,2,6,12,17,11,6,30,34,34,46,109,116,124,141,140,141,136,126,8,32,134,149,17,1,2,43,30,16,21,36,133,43,120,125,144,150,183,150,149,146,147,129,6,6,11,8,17,34,17,31,21,24,78,168,162,160,168,162,162,167,171,171,169,168,168,168,168,169,169,168,169,162,169,171,168,168,168,171,171,177,179,179,179,194,179,198,202,199,199,203,198,198,203,199,196,196,199,203,199,199,203,195,199,198,179,198,198,198,198,198,203,179,198,203,195,203,198,196,198,179,179,194,179,179,179,194,179,194,179,179,198,198,198,199,199,199,203,198,198,179,198,179,199,203,196,196,199,179,198,179,179,198,178,173,198,195,198,198,198,198,195,199,198,198,195,179,198,198,198,198,200,203,199,196,198,199,199,196,198,199,203,200,201,204,201,201,205,206,201,205,206,201,206,205,131, +82,90,89,90,91,82,38,30,32,34,132,139,138,133,119,147,137,140,11,13,11,11,13,13,32,124,153,19,11,30,132,126,144,145,115,119,122,21,22,22,17,29,8,6,17,106,143,105,114,150,111,6,33,114,17,34,2,6,2,2,11,16,123,138,126,153,143,143,115,140,8,6,6,135,111,6,6,7,7,24,24,24,114,19,11,13,13,22,2,11,4,16,30,46,17,30,116,22,14,17,16,30,16,45,32,164,2,7,6,7,2,10,9,11,7,14,6,13,24,119,15,34,132,1,1,2,2,11,30,11,7,29,37,24,119,149,149,141,139,144,139,133,136,109,47,130,136,109,5,2,36,30,29,43,120,130,106,120,139,147,148,145,147,141,140,33,6,10,13,16,36,16,21,29,16,68,169,162,156,156,160,162,162,162,168,168,194,162,194,162,168,160,162,168,168,168,169,169,162,168,169,171,173,171,179,179,198,179,179,202,199,179,200,195,196,198,203,200,200,199,198,198,199,198,195,199,203,179,198,179,202,179,194,198,179,179,202,198,179,196,199,199,203,195,198,202,179,179,179,179,198,179,179,202,179,179,198,179,198,199,203,199,198,179,198,203,196,200,199,199,203,196,199,203,198,195,179,198,198,198,179,196,203,198,199,199,199,195,199,198,198,198,199,203,200,195,198,204,198,198,195,200,195,198,199,196,203,198,204,204,201,201,205,205,205,201,205,201,205,74, +89,86,89,89,89,90,86,7,21,116,140,144,139,147,120,144,151,108,13,11,13,13,13,18,43,119,141,11,17,144,138,133,144,128,24,137,125,116,31,13,16,33,17,15,24,24,31,20,142,150,18,29,123,146,144,31,6,11,2,2,7,7,106,137,136,148,138,146,108,136,6,6,13,147,122,6,13,1,7,22,34,17,109,111,13,15,15,18,15,33,44,23,22,33,13,34,47,106,43,22,47,31,35,29,46,40,2,29,13,13,2,1,5,21,13,11,2,119,133,116,15,130,22,2,1,2,2,35,28,2,13,30,119,132,149,183,133,141,133,133,141,132,130,33,132,130,117,43,2,7,21,36,37,47,47,47,120,118,120,138,147,148,146,142,116,13,13,15,30,11,21,28,66,165,29,159,162,162,162,160,162,162,160,169,162,168,162,168,162,162,162,162,160,162,168,162,162,169,169,168,168,169,194,173,194,173,179,202,198,196,179,200,202,199,199,200,198,204,198,204,199,199,199,195,203,195,179,198,198,202,179,198,179,179,179,198,179,198,199,203,199,199,199,203,198,202,198,179,198,198,203,198,179,198,198,198,198,198,179,199,198,203,198,199,195,179,196,198,179,198,198,198,179,199,195,202,203,199,199,199,195,179,199,199,199,203,198,200,200,196,199,200,195,200,203,200,200,198,200,203,199,199,199,195,199,199,199,199,198,201,204,204,201,206,201,205,201,205,200,74, +84,85,85,86,85,89,89,7,32,36,132,130,144,132,139,144,140,19,17,13,13,13,34,111,22,34,142,11,114,144,147,149,144,125,125,140,32,32,31,44,119,114,21,34,109,114,151,18,150,140,6,135,152,144,122,17,30,34,11,2,5,11,133,135,32,138,146,151,108,125,6,6,24,139,109,2,6,13,13,32,34,34,136,31,8,17,17,18,33,46,22,29,34,22,11,106,132,34,118,119,18,120,14,48,46,2,5,5,1,5,2,5,1,2,5,1,11,117,110,33,18,132,11,2,1,2,5,29,13,2,21,130,134,130,141,149,149,133,133,139,133,119,117,46,141,110,47,1,5,5,28,30,110,31,117,106,116,106,109,116,142,142,20,140,32,16,36,15,120,164,162,173,169,171,166,171,194,162,169,168,168,162,171,160,168,162,162,162,160,161,162,169,160,160,98,160,160,160,162,162,168,171,169,171,179,179,198,177,198,203,195,198,199,204,198,200,200,198,200,200,200,199,198,199,203,199,195,179,198,198,179,179,179,179,179,179,179,179,198,195,199,199,198,199,198,179,195,198,198,179,198,199,195,198,179,199,179,198,202,198,179,196,200,203,203,199,178,203,198,195,198,198,203,198,203,198,200,198,200,195,200,195,198,198,198,196,203,203,198,204,200,203,200,204,198,204,200,200,200,200,195,203,200,198,199,199,198,199,199,198,204,201,204,201,201,201,205,201,201,131, +89,89,89,89,90,90,95,26,13,32,132,139,182,138,140,128,125,125,20,11,11,13,17,116,33,130,144,11,116,122,111,109,115,114,111,110,16,29,16,130,109,44,13,34,106,119,126,126,144,132,133,144,144,122,139,109,29,106,13,2,31,21,48,47,16,126,149,146,138,133,16,13,119,116,17,6,6,11,13,22,24,116,120,11,17,46,17,17,24,15,17,36,119,130,6,106,119,132,149,122,130,24,11,37,20,1,2,5,7,2,2,2,5,2,2,6,21,34,34,120,116,15,6,1,2,2,2,30,3,6,30,33,132,46,129,180,133,133,141,132,119,129,120,141,139,149,31,1,2,11,29,22,33,116,119,116,116,129,132,122,145,125,110,18,16,22,16,74,179,169,169,162,171,169,194,169,171,169,175,169,171,169,168,162,160,162,156,159,160,160,169,159,160,160,156,159,160,160,168,162,162,168,173,194,177,179,179,198,179,200,195,179,196,200,204,200,204,204,199,204,199,196,199,198,199,195,203,198,179,202,198,179,179,179,179,202,198,198,179,200,203,179,200,198,198,198,202,179,196,203,196,203,199,195,199,199,195,179,179,198,202,179,199,196,203,195,199,195,203,199,196,198,198,203,200,198,200,200,195,203,203,195,200,199,199,196,198,200,200,204,198,201,201,200,203,198,201,200,204,198,201,199,199,203,199,198,199,199,198,195,200,200,200,204,204,205,201,204,201,74, +89,90,89,90,85,91,90,27,32,119,139,136,137,136,126,127,143,145,109,11,11,14,16,106,126,132,106,17,119,140,18,108,125,114,114,106,24,16,22,119,16,110,21,46,43,110,151,145,33,116,149,126,150,126,138,20,13,13,2,2,5,33,11,6,7,140,151,127,126,34,109,70,34,11,6,6,6,7,14,34,109,119,24,2,44,106,126,43,33,30,30,47,123,11,29,106,147,137,149,136,124,132,11,132,24,1,2,2,5,13,1,2,2,5,2,2,23,46,32,132,132,21,2,5,2,2,2,70,68,16,21,130,133,120,133,117,182,133,133,119,130,120,120,149,133,141,24,1,2,13,21,43,125,118,109,116,132,119,114,124,144,140,36,17,66,168,167,168,168,168,194,171,173,171,171,173,171,171,173,162,194,160,168,160,162,160,160,162,162,162,156,159,160,160,97,156,160,160,162,167,169,171,171,179,177,179,199,179,199,203,199,199,203,195,198,204,200,199,204,199,200,203,203,195,203,179,179,198,202,198,179,179,179,202,179,179,198,179,198,198,199,202,198,198,179,198,198,202,198,203,198,204,199,195,199,195,199,199,195,179,198,202,198,198,199,203,199,199,198,200,199,198,200,198,200,200,200,198,200,198,198,200,198,198,198,203,198,196,198,204,200,200,198,204,200,204,200,204,198,204,198,204,200,198,195,198,200,199,199,199,199,198,200,200,204,200,204,204,200,74, +89,90,91,90,91,90,91,71,133,120,130,114,109,114,119,128,150,146,33,11,13,21,22,46,110,37,24,46,138,126,8,46,144,149,126,34,17,22,30,22,34,22,16,31,34,123,149,126,18,148,108,138,138,126,139,116,2,2,11,6,11,14,2,11,11,123,130,19,148,125,115,15,11,7,7,2,6,7,29,132,133,106,123,6,36,106,120,34,33,15,46,126,116,11,34,183,149,151,139,132,129,124,11,37,13,2,6,10,5,2,2,2,5,2,2,7,43,110,110,133,130,2,2,2,2,9,13,13,2,6,21,130,144,149,145,133,47,139,147,125,132,132,129,141,133,132,33,1,2,35,11,117,120,109,44,114,120,124,118,106,149,31,69,14,78,168,168,168,171,169,171,169,177,194,169,173,171,177,173,173,171,169,162,160,160,159,160,162,160,160,160,159,159,160,156,160,162,160,162,168,168,171,173,194,179,198,179,202,199,196,195,179,196,203,203,204,199,196,203,204,196,199,196,200,203,195,202,198,179,194,179,179,179,177,179,198,198,202,198,179,195,198,198,179,198,198,177,198,199,198,203,198,200,199,203,196,203,203,203,195,179,198,179,198,199,196,203,199,198,196,198,200,200,195,200,195,200,198,204,195,200,195,198,198,200,198,195,198,203,200,204,204,200,201,200,204,201,200,200,203,200,198,204,198,196,196,198,198,200,203,199,198,199,204,200,196,200,200,204,131, +89,89,89,89,89,90,85,71,6,17,125,138,139,137,136,147,150,139,86,60,29,16,22,67,101,92,96,46,126,114,15,116,126,144,132,34,22,120,22,30,47,13,16,129,106,132,144,115,32,150,136,123,144,126,144,18,11,22,123,13,47,13,2,11,24,122,18,139,138,126,143,19,6,6,6,6,2,13,8,116,18,36,110,16,16,106,132,123,33,36,136,181,109,37,120,181,136,141,138,120,33,22,10,30,2,2,2,5,2,11,2,1,2,2,6,5,45,33,120,119,33,1,2,2,2,1,11,21,6,2,30,133,124,47,151,147,31,132,144,149,126,119,132,144,126,144,34,1,11,21,29,117,120,109,109,118,116,124,128,43,45,163,162,98,173,162,168,171,169,169,175,171,169,173,173,169,177,171,177,171,168,162,162,162,162,160,160,162,169,167,169,160,162,159,160,156,169,162,162,168,171,173,194,202,198,198,203,198,199,203,203,195,198,200,200,195,203,198,199,198,204,203,203,198,179,198,179,179,198,179,179,198,198,198,202,179,198,179,198,198,179,198,179,198,177,198,198,179,203,199,199,203,198,199,199,198,200,198,195,203,195,179,198,198,203,196,200,198,204,200,200,198,196,204,195,204,200,204,198,204,204,198,200,204,195,204,204,200,204,198,195,204,201,204,201,201,203,201,203,200,200,204,200,200,203,199,199,203,199,198,200,198,198,200,199,204,198,201,200,74, +89,89,89,85,90,91,89,90,6,13,123,144,140,136,119,140,148,79,89,90,79,75,75,90,92,91,96,59,13,33,138,144,149,182,96,53,22,32,30,34,20,31,26,23,132,144,149,114,22,150,136,122,136,133,150,8,29,114,126,8,119,13,7,2,132,105,119,144,34,16,150,20,11,6,6,2,2,6,29,115,32,114,136,8,22,132,130,133,132,130,141,126,33,130,119,151,110,130,133,138,109,16,14,6,2,5,6,2,10,2,6,1,1,2,7,6,30,123,109,109,15,6,1,2,5,2,2,2,11,1,36,151,123,34,149,144,106,133,141,133,132,116,144,144,145,147,17,2,2,22,31,36,36,116,109,116,122,113,148,169,162,171,169,171,162,171,171,169,171,177,177,168,177,175,171,171,168,169,194,171,169,162,160,162,162,159,169,162,162,162,162,160,162,160,162,160,167,162,162,168,171,202,194,202,179,198,179,196,196,200,199,203,198,200,198,199,198,200,200,203,198,200,198,179,198,198,198,179,179,179,179,179,202,179,198,198,179,198,179,198,199,198,198,198,179,179,198,199,196,198,199,199,199,204,200,198,200,198,200,198,199,198,198,179,198,199,198,205,203,198,200,200,204,198,204,204,204,195,201,204,195,201,195,204,195,204,195,204,195,200,200,198,204,204,201,200,201,200,201,200,203,200,200,204,200,200,198,200,199,196,199,199,196,198,199,203,199,198,200,131, +89,86,89,90,86,88,91,100,6,6,33,126,142,138,122,106,48,90,89,90,86,90,90,91,91,90,92,59,106,116,119,117,48,87,96,96,49,11,32,29,7,33,33,21,47,36,29,11,114,150,144,123,106,138,151,105,34,114,120,29,129,119,123,104,114,18,137,132,11,24,153,19,2,11,6,6,2,7,17,123,106,106,135,20,36,130,110,132,132,120,130,24,24,139,133,130,120,106,136,123,130,116,2,2,2,2,2,11,2,2,2,2,1,2,2,2,34,109,111,33,2,2,6,2,2,5,2,5,7,11,29,136,122,36,133,149,24,141,145,136,136,133,140,141,133,126,8,2,21,36,13,46,109,109,118,118,125,127,140,194,160,171,168,168,168,168,167,168,169,171,171,177,171,171,177,175,173,171,162,168,162,162,162,161,162,169,162,162,168,162,162,162,162,168,162,162,168,162,171,171,194,173,179,198,179,198,203,199,199,196,198,200,196,198,200,203,199,199,198,196,198,203,198,199,195,179,179,179,194,198,179,198,202,179,179,179,202,179,202,179,198,179,198,179,198,179,198,179,199,200,200,203,198,200,198,204,198,200,200,203,203,195,179,198,199,199,200,198,201,203,200,204,195,201,201,204,201,204,200,204,201,204,201,201,201,204,201,201,204,195,204,201,204,204,204,204,204,201,200,200,204,201,203,198,200,200,198,204,199,198,200,199,199,199,195,196,199,203,195,74, +85,85,85,85,89,89,86,90,58,11,126,128,128,132,134,77,95,89,91,90,90,91,86,90,86,91,92,71,66,68,77,100,91,92,91,96,96,62,34,16,30,123,18,13,32,8,11,16,149,150,147,33,106,128,146,144,120,133,31,34,110,133,149,154,148,22,122,105,11,24,145,8,11,7,2,2,7,6,37,125,45,47,106,106,30,117,106,129,136,46,29,24,110,144,109,34,136,120,137,124,126,116,0,6,1,11,2,2,6,6,2,6,1,1,6,2,46,138,125,15,6,2,2,2,6,1,2,2,31,31,30,144,137,117,37,133,30,153,149,145,133,119,138,122,119,124,11,2,2,8,43,111,126,33,33,111,125,115,145,198,168,162,169,168,168,162,168,162,168,168,162,171,169,162,171,171,171,171,168,168,162,168,162,160,168,168,162,168,168,169,162,162,171,162,168,168,162,168,171,173,179,198,198,202,194,198,195,203,199,203,195,198,204,203,196,203,200,199,200,199,198,179,199,198,203,179,198,179,179,179,202,179,179,179,198,179,198,198,198,198,202,179,198,198,202,173,195,199,198,195,198,201,200,198,204,200,200,203,198,200,200,200,203,196,198,199,200,204,204,201,205,201,204,201,204,201,204,201,204,201,204,204,204,201,204,201,201,200,204,201,195,204,204,200,201,204,200,204,204,204,199,200,200,195,200,200,200,198,204,200,203,198,199,203,203,199,198,199,195,74, +89,89,89,85,85,89,89,85,90,61,36,123,121,78,84,89,82,85,85,90,76,90,91,89,91,90,86,90,91,85,91,90,91,91,91,91,92,102,39,11,17,138,17,13,30,7,2,29,123,149,126,20,139,152,151,138,136,125,10,130,147,153,153,144,147,126,144,114,17,106,145,11,7,7,6,2,6,6,119,116,34,106,47,106,33,47,34,47,126,11,8,109,141,143,29,132,116,119,141,144,151,24,2,1,2,11,2,6,2,7,13,2,2,6,1,2,129,122,132,22,2,2,2,5,1,5,2,6,36,129,116,129,141,122,120,132,30,126,133,133,136,140,132,132,110,125,11,2,13,46,110,126,146,127,29,24,150,128,147,169,169,169,168,162,162,162,168,162,168,162,169,169,162,168,171,173,171,169,168,168,168,169,162,162,162,162,162,168,169,162,171,169,162,162,160,162,171,171,171,194,179,202,179,198,198,203,199,198,204,200,200,200,203,198,200,195,198,204,198,196,200,198,203,195,196,198,202,179,179,179,194,202,179,179,202,179,195,179,198,179,198,179,198,179,198,198,179,203,199,203,200,195,204,204,200,198,200,200,204,199,198,196,198,199,204,200,201,201,204,201,201,204,205,201,201,204,201,201,204,201,204,201,201,204,201,204,201,204,204,204,201,200,201,204,204,201,204,204,204,200,199,200,200,200,198,199,202,200,198,200,199,199,200,200,195,200,200,198,200,131, +85,85,86,88,85,89,84,84,89,89,89,82,84,84,82,84,89,85,90,91,90,90,85,89,91,85,90,90,89,90,89,91,89,86,91,91,92,96,62,30,46,122,16,32,30,13,2,24,144,152,148,20,149,144,142,124,106,110,15,120,153,151,144,111,149,139,128,127,8,138,144,6,7,6,2,2,13,7,132,33,106,128,127,108,29,22,116,44,123,8,11,116,136,136,16,124,132,114,153,141,68,11,2,2,5,1,11,2,11,13,21,6,2,2,2,6,117,149,132,13,2,2,5,25,1,2,6,7,47,120,120,120,124,151,105,31,18,132,120,132,133,124,123,110,47,117,6,2,11,33,116,136,140,138,104,113,141,126,130,169,169,168,162,171,169,160,168,168,171,171,171,177,168,171,194,169,177,171,169,162,171,168,169,169,169,169,162,162,169,169,162,168,160,160,159,160,162,171,171,194,173,198,179,202,179,200,198,200,203,199,200,199,200,200,200,200,203,198,200,179,196,199,196,203,179,179,179,179,202,179,198,179,198,198,179,195,179,203,178,202,195,179,196,199,198,179,200,198,198,198,200,200,203,200,198,200,200,204,196,200,204,200,200,200,195,204,201,201,201,206,201,205,201,205,206,201,204,201,204,201,201,201,204,201,201,205,201,204,201,201,204,201,200,200,201,200,201,203,200,204,199,199,202,199,199,199,198,199,203,198,200,202,199,198,198,199,199,202,179,74, +89,89,85,89,82,84,84,82,84,82,84,84,84,84,89,85,86,89,85,85,91,89,90,91,82,91,85,91,88,91,90,90,89,91,90,86,90,86,92,75,130,43,30,29,11,11,7,141,152,151,144,151,138,143,150,128,119,8,43,110,148,147,143,145,115,109,132,126,15,153,128,6,7,14,29,16,11,13,136,15,30,138,143,20,11,34,124,24,132,31,36,133,124,132,34,119,149,119,144,124,6,2,5,2,2,6,6,2,14,47,22,21,13,6,2,2,68,125,33,2,6,10,2,1,2,5,1,13,119,119,15,32,133,116,130,133,33,106,120,110,130,132,139,120,110,6,2,6,13,106,132,119,132,127,140,126,18,69,156,162,162,168,169,169,162,171,169,171,169,171,171,162,194,162,171,171,162,194,168,194,162,171,171,162,171,169,162,169,162,160,162,156,156,156,156,156,160,169,168,171,194,179,179,179,198,198,202,179,200,202,199,199,199,200,200,200,199,200,199,198,199,203,199,200,198,198,179,173,198,198,179,202,179,198,198,203,195,179,202,194,198,203,199,203,199,198,198,199,203,200,200,203,198,198,204,198,200,195,204,204,198,200,204,204,200,201,204,205,205,206,206,201,206,201,206,205,201,201,205,201,204,201,201,201,204,201,201,204,201,200,204,201,204,204,204,204,200,204,204,195,202,194,198,199,198,177,198,179,198,179,179,198,198,179,198,179,198,177,179,74, +89,84,84,85,84,84,84,84,82,84,84,84,84,82,84,84,84,85,89,85,85,90,89,85,91,90,91,89,89,89,89,90,91,90,85,91,90,90,91,91,95,13,13,2,16,17,6,120,151,137,141,144,150,142,142,138,17,13,33,37,153,152,146,145,142,115,110,111,122,124,13,6,7,36,110,114,109,22,47,2,29,129,150,20,23,34,116,47,123,116,117,133,149,126,68,133,141,130,149,125,2,2,2,1,2,2,2,11,106,36,47,22,46,29,31,18,117,139,136,2,2,2,6,2,2,5,2,13,116,29,18,17,36,109,43,116,29,29,119,106,130,123,106,106,132,24,2,2,11,119,110,120,132,144,140,45,159,161,156,162,161,168,162,169,169,162,171,171,171,173,171,171,171,162,169,169,169,171,171,169,171,168,168,171,162,169,162,160,160,156,98,103,98,103,103,156,156,160,162,168,171,171,171,177,179,177,198,177,194,202,179,198,196,199,204,204,204,199,195,198,198,202,198,179,200,179,198,198,179,179,198,198,202,179,195,179,198,198,198,179,199,179,198,203,200,203,199,200,200,200,198,200,200,203,200,195,200,204,200,204,200,204,201,200,203,204,201,204,201,205,201,205,206,206,201,205,205,204,201,205,201,204,201,204,201,201,204,201,204,204,204,201,204,201,200,200,200,198,199,199,198,198,198,179,198,177,194,179,202,179,194,173,179,199,194,173,194,171,171,74, +84,84,84,84,84,84,84,84,82,84,82,84,84,84,84,88,85,85,89,89,89,91,85,90,85,85,85,89,89,89,89,91,90,89,91,90,90,89,90,90,95,12,11,6,22,24,7,130,149,148,145,138,150,143,150,106,15,24,13,47,147,149,127,143,115,17,18,17,132,29,2,11,7,24,109,125,149,106,30,6,16,34,132,15,16,34,138,117,133,140,139,182,186,22,120,149,136,151,37,132,3,5,2,2,2,6,5,6,106,114,48,16,15,22,136,119,181,24,130,6,2,5,2,2,2,2,2,21,116,124,29,34,120,33,110,46,18,29,30,119,120,130,119,47,47,32,6,2,13,43,119,132,133,124,17,87,160,160,156,156,160,162,162,169,162,169,168,168,168,168,168,169,162,160,159,160,162,162,168,168,162,162,162,162,161,160,160,156,103,98,98,98,98,98,98,98,98,98,160,161,168,169,168,171,171,171,171,177,179,179,194,179,179,199,203,199,199,198,198,203,199,179,198,203,198,198,202,179,198,198,198,179,200,199,203,199,179,198,179,198,179,198,198,199,199,200,200,203,196,200,203,200,200,200,200,200,200,200,198,204,200,201,200,204,201,204,200,201,201,204,201,201,206,201,206,201,205,201,201,201,204,201,201,201,204,201,204,201,205,204,201,203,200,198,204,200,203,199,198,194,177,179,179,177,194,194,179,177,194,173,173,194,194,177,179,173,169,160,162,69, +82,84,82,82,84,82,82,82,82,84,82,84,84,84,84,88,89,85,86,89,89,89,86,88,90,85,86,82,85,89,89,85,85,89,89,89,89,89,89,89,95,61,14,129,129,29,34,116,141,149,144,138,145,150,115,4,22,122,15,117,140,127,149,143,150,111,18,192,18,7,2,6,13,13,24,128,126,110,15,2,21,110,126,6,22,130,141,45,133,153,151,144,116,6,181,132,47,120,34,106,20,2,5,11,6,2,6,7,123,122,109,11,22,17,110,123,141,14,20,2,11,6,2,12,2,5,2,13,106,120,30,32,46,106,46,36,106,43,47,120,132,120,120,45,106,24,15,11,29,31,47,149,120,97,87,98,103,159,160,161,156,160,169,162,160,169,156,160,162,168,162,161,160,156,160,156,156,162,168,169,168,162,156,160,156,160,103,98,98,96,102,92,92,92,98,98,98,103,93,159,161,162,162,156,168,162,169,160,173,171,171,173,194,202,194,203,203,200,195,199,199,203,199,179,200,198,198,198,179,198,200,199,202,196,198,200,203,198,199,203,198,179,198,179,196,204,200,204,200,200,200,200,198,200,199,199,199,199,203,200,200,204,200,200,204,204,204,201,200,201,205,204,201,201,205,205,201,206,205,204,201,201,201,205,201,201,201,204,204,200,200,198,199,200,179,198,179,177,179,179,169,194,162,168,177,177,169,194,169,162,171,177,171,173,171,194,162,171,169,74, +84,84,82,82,82,82,84,84,84,82,84,82,82,82,84,85,89,85,85,85,85,85,88,85,85,85,85,88,84,84,84,88,89,84,89,85,86,89,89,89,90,61,14,23,29,29,22,119,106,122,47,34,149,146,146,114,18,46,17,139,150,145,153,152,125,153,114,27,2,11,2,7,7,13,34,146,149,124,6,2,47,153,153,8,45,141,110,106,47,150,148,138,6,120,119,132,22,119,45,47,111,2,31,125,33,13,11,11,117,24,109,15,13,13,106,147,125,36,126,2,21,16,2,1,1,2,11,13,116,47,17,36,43,43,31,43,116,43,43,46,46,47,119,46,133,106,24,34,33,116,132,164,92,97,103,98,98,103,160,160,160,161,160,156,162,160,160,162,168,162,160,156,159,160,156,160,156,162,162,160,161,160,160,161,156,160,98,92,92,92,96,92,96,101,92,92,98,98,98,98,98,103,98,160,156,160,159,160,169,167,169,171,171,171,173,194,179,198,179,199,195,198,202,199,199,198,179,179,198,198,179,200,198,199,200,200,200,195,199,198,179,200,198,203,195,200,200,198,204,204,204,199,203,200,198,199,179,200,179,200,199,199,199,199,204,204,201,204,200,204,204,201,205,205,205,201,205,204,197,205,201,204,204,204,205,201,204,205,200,200,199,179,202,179,199,194,173,194,177,171,169,169,169,169,171,171,177,169,162,168,171,171,168,168,162,168,162,169,162,69, +84,82,81,82,84,81,88,84,82,82,82,84,82,84,84,84,84,84,82,85,89,84,85,84,88,84,84,82,84,82,84,85,85,85,90,85,90,85,89,95,91,82,0,2,11,106,11,106,36,46,22,22,153,145,148,127,17,29,8,149,149,142,153,154,144,153,20,5,2,11,7,6,7,13,34,126,138,32,16,5,36,147,149,8,129,136,31,16,132,146,140,11,33,123,147,141,15,47,29,43,114,4,123,105,182,185,3,13,30,110,33,24,20,126,147,124,136,129,147,2,7,13,2,5,2,2,11,47,130,29,29,47,116,116,124,114,33,31,138,116,136,132,138,114,186,144,120,46,23,35,71,96,96,93,98,98,98,98,160,159,160,156,160,156,160,156,160,156,162,156,160,156,103,156,160,156,162,169,160,160,162,160,160,160,161,98,96,102,92,92,92,92,91,92,92,92,92,96,101,98,98,98,98,98,98,98,103,159,160,160,160,162,162,168,169,168,173,194,179,179,198,179,179,179,179,198,179,194,179,179,198,203,198,198,198,199,204,204,202,196,199,199,179,199,203,195,203,200,200,203,198,203,198,179,179,179,179,198,179,198,179,202,179,198,179,199,199,199,200,200,204,201,204,201,201,205,206,201,204,201,200,201,204,200,201,204,200,200,203,199,198,198,202,194,169,177,171,171,177,168,162,162,162,169,169,169,171,168,168,169,169,169,168,160,162,162,160,162,160,73, +82,82,84,82,84,84,81,82,82,82,81,85,81,84,82,82,84,82,84,84,82,90,89,88,84,84,88,84,84,84,84,85,88,85,88,89,85,90,90,88,89,95,40,2,14,133,2,45,30,47,11,29,150,146,142,142,33,11,43,144,152,151,126,140,123,152,109,2,5,6,6,7,6,11,13,110,109,17,30,2,21,144,133,11,20,114,109,36,133,149,128,22,138,141,144,122,30,33,33,23,116,144,128,130,136,136,6,11,33,106,120,123,109,141,146,123,129,119,116,0,5,72,64,2,2,6,7,37,22,7,117,120,130,120,129,120,120,43,119,130,132,130,31,138,154,149,111,120,77,95,95,91,97,102,98,98,98,98,103,160,159,103,97,160,156,160,156,161,160,160,156,160,160,156,160,160,162,162,156,169,169,160,156,160,156,98,98,96,92,91,91,91,91,91,91,91,92,92,91,92,92,92,98,92,98,98,98,98,156,156,156,160,156,160,160,162,162,169,171,168,168,168,169,168,173,179,179,179,179,171,179,199,198,179,198,198,198,179,200,202,203,198,203,200,203,203,200,199,204,202,200,199,198,179,169,171,173,173,171,177,179,194,177,194,173,198,198,198,198,199,200,204,200,201,201,204,201,205,201,201,204,201,201,201,204,203,199,198,179,198,177,177,179,177,162,162,168,168,168,162,168,162,167,168,162,162,160,169,162,171,162,162,162,162,160,160,160,159,159,73, +84,84,82,84,82,82,84,84,84,81,85,83,85,81,82,84,82,84,82,84,88,85,85,82,84,84,84,84,84,84,84,88,84,89,88,88,89,88,85,90,90,88,54,7,43,33,6,5,33,20,13,16,148,150,143,148,122,16,47,144,120,122,15,106,46,138,33,2,2,11,6,6,6,7,13,31,33,14,30,5,7,119,124,11,37,106,120,36,151,153,127,111,124,138,132,33,30,30,22,43,114,186,140,147,132,17,6,21,118,30,116,137,132,136,130,110,36,139,120,2,5,6,2,38,2,11,11,43,2,11,119,37,120,36,120,47,124,110,47,47,132,31,46,144,154,119,46,85,89,89,90,85,92,87,98,98,98,103,98,156,103,159,103,156,160,156,156,160,162,160,156,160,156,160,160,160,162,161,156,160,156,160,160,98,103,98,96,92,92,91,101,91,90,91,91,91,92,91,92,92,92,101,92,93,98,98,103,98,103,98,98,98,98,103,156,160,103,156,156,160,156,98,103,159,156,169,171,173,179,179,179,194,179,179,179,194,179,198,198,179,198,179,179,198,179,199,200,200,199,203,199,199,198,179,168,168,162,162,169,168,162,169,169,171,168,171,177,198,179,202,200,204,201,203,201,205,204,201,201,204,201,201,203,204,200,202,179,198,177,194,173,171,169,171,162,162,168,162,162,162,162,162,162,162,160,168,162,162,162,160,162,160,162,160,156,160,156,156,156,71, +81,84,81,84,81,81,84,82,81,81,85,81,81,82,81,84,81,88,84,84,84,84,88,85,84,84,84,82,84,84,84,88,85,85,88,88,85,88,88,88,85,85,85,7,5,2,2,6,29,17,17,138,153,152,150,144,125,112,24,132,119,20,109,34,120,127,13,2,11,2,7,6,6,11,17,46,33,16,116,1,2,130,126,3,45,130,114,106,151,148,127,125,126,125,128,31,109,18,36,116,151,183,153,132,46,13,115,125,136,33,47,130,141,150,120,8,119,133,17,1,6,2,2,25,1,2,12,1,6,37,132,47,120,118,106,132,141,109,29,106,20,113,140,124,120,130,65,90,89,90,86,90,91,91,92,98,98,98,98,103,98,98,103,160,156,160,160,160,156,160,156,161,160,156,160,160,156,160,161,156,160,160,98,103,98,98,98,96,92,91,90,91,91,91,91,102,91,92,96,91,102,91,96,102,92,101,98,98,92,101,96,96,91,96,96,98,98,98,102,96,92,92,92,92,98,98,160,169,169,173,171,173,173,173,171,171,171,169,173,179,173,173,171,173,179,198,202,179,179,198,202,179,179,173,169,160,160,156,159,160,156,160,162,160,160,169,171,179,194,203,198,204,201,200,204,204,204,204,204,204,200,204,200,179,198,198,177,171,168,169,169,168,162,160,162,161,162,162,162,162,162,169,169,162,162,162,162,160,162,162,162,160,160,160,160,103,98,103,98,72, +81,81,84,84,81,81,85,81,81,81,81,81,82,84,82,84,82,84,84,84,82,84,84,82,82,84,82,84,81,84,84,84,84,84,88,85,84,84,84,88,88,88,95,51,2,2,5,2,13,22,109,150,153,150,128,125,139,153,122,132,132,31,18,110,132,15,5,2,2,11,2,7,14,123,126,116,37,11,106,2,6,106,144,22,30,116,110,34,145,144,132,127,125,151,151,24,106,33,45,141,149,142,153,122,15,21,138,153,142,132,114,147,114,132,138,130,138,110,6,2,2,9,2,2,2,6,5,2,2,130,130,44,130,117,47,47,123,33,33,136,153,124,149,30,65,86,90,86,84,88,90,91,90,91,91,87,97,96,98,98,98,103,98,159,103,159,160,161,160,160,160,98,103,160,161,161,160,161,156,160,156,98,103,98,92,96,98,101,92,92,91,92,91,101,92,102,92,91,92,92,92,91,91,92,92,92,92,91,91,92,91,91,90,79,92,91,92,92,87,92,91,90,91,92,92,87,98,98,159,97,160,161,168,162,160,168,162,162,156,169,173,162,169,169,171,173,194,202,194,179,179,194,162,167,156,156,98,98,98,160,156,98,98,97,159,156,173,194,202,179,198,199,198,200,202,200,200,200,200,200,200,199,199,202,194,169,171,162,162,162,160,156,162,156,160,156,162,156,160,162,162,160,169,160,156,160,160,160,161,160,156,161,156,103,98,156,98,98,98,72, +81,81,81,56,84,81,81,81,81,85,80,81,85,84,81,82,81,81,82,82,84,84,84,81,88,84,82,81,84,84,84,84,84,88,84,84,84,88,85,88,85,88,90,84,1,5,2,2,13,34,123,152,150,145,152,126,126,153,142,114,51,11,18,33,18,2,2,5,6,2,10,6,106,124,126,24,34,8,31,11,2,47,116,15,30,110,15,47,138,137,114,126,183,183,125,46,34,33,36,144,137,128,154,145,15,11,133,136,124,126,141,148,183,116,151,136,140,149,164,75,11,2,2,6,1,6,2,2,2,47,109,106,119,46,114,116,114,13,141,137,140,43,87,82,91,85,90,84,84,86,90,91,85,90,90,90,91,92,96,92,103,98,103,98,159,156,160,156,161,160,98,160,103,160,156,160,160,161,160,161,156,103,103,97,96,92,102,92,96,91,91,91,92,101,101,92,96,91,91,92,91,91,91,91,91,92,91,91,90,86,92,91,91,90,90,91,90,91,90,89,91,90,91,91,91,92,92,92,97,101,98,98,98,156,98,98,159,160,98,156,160,160,156,162,162,160,171,179,173,169,177,169,162,160,98,98,97,92,98,98,103,98,98,98,156,162,169,194,179,198,202,179,198,198,202,179,199,203,203,196,198,179,198,179,177,169,162,162,162,160,162,160,160,160,156,160,160,160,162,156,162,160,156,160,160,156,160,160,160,156,160,156,98,98,98,98,101,101,92,71, +81,81,81,81,56,81,81,81,81,85,83,81,81,85,81,81,85,84,81,82,82,81,82,84,81,84,81,84,81,84,84,84,84,84,84,84,84,88,88,81,88,88,89,100,5,2,2,5,21,120,126,150,144,145,141,35,144,153,145,125,110,17,24,32,6,6,1,2,11,6,7,11,22,122,124,7,12,29,23,11,2,36,109,8,16,22,18,110,138,128,142,145,149,153,19,34,43,22,29,130,153,143,153,110,111,151,8,130,144,133,153,153,151,137,37,117,45,67,62,38,9,2,5,25,5,11,11,2,2,47,124,120,126,111,46,142,140,17,120,132,183,131,90,90,85,85,85,82,85,89,90,90,85,90,85,91,91,92,92,98,103,98,103,160,160,160,156,98,103,98,103,103,98,98,98,101,98,103,98,160,98,98,102,98,96,91,92,92,91,92,92,91,92,102,92,101,91,91,91,91,91,95,92,91,91,90,91,91,91,89,86,90,86,95,90,90,89,90,85,90,91,89,90,82,91,91,91,91,92,92,98,98,101,96,101,92,98,98,98,98,96,98,98,160,156,160,168,162,171,171,171,168,160,98,96,92,92,96,96,98,93,98,98,160,160,161,162,177,173,173,179,198,179,202,179,202,202,179,202,179,202,179,171,171,168,168,160,160,160,160,156,160,160,156,160,161,160,156,160,156,160,160,160,160,156,160,160,159,103,98,103,98,98,93,102,92,96,92,92,62, +81,81,81,81,81,81,56,81,81,83,85,81,81,81,56,85,81,81,85,81,81,84,81,84,84,84,84,81,84,82,84,84,84,81,84,84,84,84,84,84,88,88,89,100,25,2,5,2,2,106,144,124,144,148,3,22,185,148,122,188,197,121,11,6,5,2,1,7,7,10,2,2,29,126,125,6,21,22,106,11,2,48,136,11,22,114,132,123,153,186,186,154,151,143,125,22,31,21,13,136,154,153,138,45,46,46,116,144,132,110,183,133,123,132,29,46,60,85,82,58,12,9,1,10,5,5,29,11,2,30,46,47,114,111,20,133,15,46,130,184,185,86,89,85,90,86,90,85,88,85,86,88,88,85,89,91,91,91,101,92,98,103,98,103,98,98,98,98,98,96,91,92,97,96,91,91,92,98,98,96,101,98,87,91,91,95,90,91,91,91,91,91,91,91,87,91,91,91,91,86,95,91,91,91,91,91,90,89,85,91,90,91,90,89,76,91,85,90,89,90,89,89,90,91,91,90,91,91,92,96,92,92,92,92,92,92,101,92,97,92,91,92,98,156,103,162,162,162,168,168,162,161,97,97,92,92,92,92,96,101,101,98,98,160,159,162,169,171,171,171,179,173,194,179,179,194,173,194,173,194,177,171,171,169,162,160,160,156,156,156,103,156,156,159,160,159,160,103,156,98,160,162,156,160,156,98,98,98,98,98,101,101,97,102,92,92,96,96,90,58, +56,81,56,81,81,56,84,81,81,56,81,81,81,85,81,81,81,88,81,81,85,81,81,81,81,81,81,88,81,84,84,84,84,81,88,84,84,84,84,84,84,85,88,90,53,2,2,2,5,31,127,144,150,140,8,14,132,138,11,36,138,8,1,6,11,2,1,10,12,11,11,5,119,151,29,13,37,17,117,2,2,130,136,6,37,137,132,151,186,186,153,186,145,150,142,8,11,6,17,139,144,149,114,14,47,46,141,147,126,134,153,19,24,131,29,81,90,88,88,90,40,58,28,5,10,2,26,9,21,134,182,182,191,120,67,34,46,47,141,191,87,90,86,90,90,89,91,85,85,90,85,86,89,90,86,90,91,91,91,92,96,93,98,98,98,98,98,96,101,91,91,91,91,92,85,91,91,91,91,89,91,91,90,90,90,86,90,91,91,91,91,92,91,91,90,91,91,91,91,91,86,91,90,91,92,91,91,90,92,90,92,91,85,91,89,90,91,85,86,89,89,89,90,91,90,91,90,91,91,87,101,92,92,91,92,92,91,91,91,91,91,87,101,98,98,160,156,103,156,160,169,156,102,92,92,92,96,92,92,96,98,98,103,93,156,156,156,169,169,169,169,173,173,171,171,173,171,177,173,171,168,169,168,168,162,162,156,160,160,103,97,98,98,98,98,156,103,159,103,160,156,160,156,103,97,98,97,101,98,97,97,101,98,97,97,92,92,97,96,58, +81,81,81,81,81,81,81,81,81,81,56,81,81,81,56,88,81,81,56,85,81,81,81,85,81,82,82,81,84,84,84,84,84,84,81,84,88,85,84,84,88,84,88,85,85,26,2,5,2,30,144,151,146,153,148,34,132,10,2,5,1,2,1,5,2,2,1,13,1,10,12,8,187,45,2,21,50,2,126,11,2,133,32,2,30,119,132,149,186,153,153,144,141,138,151,6,6,6,6,148,119,148,45,30,46,106,145,140,30,136,130,115,136,44,59,71,89,84,88,90,63,95,61,13,5,5,5,14,148,180,180,45,151,141,144,181,31,149,193,158,90,91,89,91,91,90,90,85,85,91,85,90,90,90,85,89,90,90,85,91,90,90,92,92,91,92,92,91,91,95,90,91,90,89,91,90,90,91,89,91,90,90,85,85,86,90,85,90,91,91,92,91,90,91,91,91,91,91,91,91,91,91,91,92,92,91,90,90,86,91,90,92,90,90,90,91,85,89,85,85,89,89,91,89,90,79,91,91,90,91,91,91,89,91,90,92,91,91,91,91,90,91,92,98,98,92,98,101,103,156,160,160,97,92,96,92,92,96,98,98,98,98,98,98,103,98,156,160,156,162,169,169,169,162,169,173,171,177,171,169,162,168,162,162,168,162,160,160,156,98,98,98,98,98,98,98,103,98,98,98,103,156,98,103,98,98,97,93,102,92,98,98,98,98,96,93,102,91,92,71, +81,80,82,81,81,81,56,82,81,81,81,81,81,80,81,81,81,81,81,81,81,81,81,81,81,85,81,84,81,82,84,84,81,84,85,84,81,81,88,84,84,84,88,88,85,99,2,2,12,30,132,144,148,150,122,141,5,6,2,2,5,1,2,2,12,2,1,2,5,6,2,14,140,110,2,21,29,2,137,17,2,130,20,2,43,106,147,153,186,154,144,136,108,139,116,2,13,11,11,151,132,144,8,29,119,133,124,109,30,119,132,149,93,96,95,90,85,88,88,88,88,89,100,40,5,11,26,40,197,182,141,119,185,130,182,154,187,149,158,85,91,85,90,89,91,91,91,90,91,89,91,89,85,88,89,89,91,85,90,86,90,89,91,88,91,91,91,95,90,89,89,90,89,91,90,89,91,89,91,90,85,86,85,91,90,82,86,90,91,91,91,91,91,96,92,91,91,91,90,90,91,91,92,92,91,91,91,91,91,89,91,90,86,90,91,89,85,89,89,89,85,86,90,91,90,85,91,89,92,91,91,90,91,91,91,91,91,91,91,85,91,91,91,92,91,91,92,92,97,98,160,156,98,96,102,92,92,92,96,97,98,97,92,96,96,96,98,98,98,156,161,162,168,169,169,171,173,171,173,169,169,168,162,162,160,161,156,160,156,98,98,98,98,98,103,93,156,98,97,101,98,98,101,97,97,101,98,101,92,96,97,92,97,97,101,102,93,93,101,71, +81,81,56,82,82,81,81,81,83,56,81,81,83,85,81,81,81,81,81,56,81,81,81,85,81,81,81,85,84,84,84,84,84,84,83,85,85,81,88,85,84,85,84,88,85,83,21,26,13,16,106,151,142,143,94,26,9,2,5,2,1,2,1,2,10,2,1,6,10,12,6,106,151,114,2,10,13,5,130,8,2,37,114,2,21,48,153,154,153,145,125,138,132,116,124,7,145,114,17,124,130,148,13,34,124,136,136,30,24,132,134,91,91,91,89,91,89,85,85,84,84,84,84,99,71,72,13,13,181,186,191,121,117,147,149,141,70,87,90,86,90,90,91,91,91,90,92,89,89,90,85,89,89,84,89,88,85,88,90,90,90,89,89,88,89,89,89,85,91,89,88,91,85,91,85,91,85,95,90,85,89,90,90,90,89,85,90,91,91,91,91,90,91,92,91,92,91,91,91,90,91,92,96,92,92,91,91,90,86,92,91,91,90,89,85,89,88,85,85,89,89,89,90,90,91,90,90,90,91,90,91,92,92,91,91,91,92,91,91,91,90,90,91,91,90,79,91,91,92,98,103,98,103,92,92,92,91,92,96,92,96,92,92,92,92,92,92,96,98,98,161,156,162,162,169,169,168,168,168,162,162,162,162,160,159,156,98,98,98,98,98,98,97,97,98,98,103,98,97,97,98,97,97,102,92,101,92,97,101,92,101,102,93,92,97,93,101,102,93,71, +81,81,80,81,81,56,84,82,81,81,81,56,81,81,56,81,81,81,56,84,56,81,81,81,82,81,81,81,82,84,82,82,85,81,85,81,81,81,85,81,81,83,85,81,88,85,59,21,22,32,153,93,71,69,85,6,2,2,2,9,5,1,2,11,2,2,1,2,5,9,21,141,132,21,6,1,2,2,36,113,2,47,37,2,36,120,154,153,145,146,150,31,106,116,15,11,144,145,115,140,133,31,13,36,34,141,22,15,36,69,95,90,91,90,90,85,85,88,88,84,84,84,84,88,90,85,63,64,40,130,180,185,147,67,130,192,90,88,85,91,90,91,89,90,86,91,90,89,91,85,95,89,89,85,89,85,84,88,89,88,89,82,84,84,88,85,89,89,84,89,91,85,90,89,91,90,90,86,85,91,85,91,95,85,86,90,91,91,90,90,89,92,91,96,96,91,91,91,91,91,91,92,92,96,102,91,90,89,91,90,90,85,85,89,89,85,86,89,84,89,84,90,86,89,90,90,89,89,91,91,90,89,86,90,92,91,92,90,91,88,90,86,88,90,89,90,91,91,97,98,98,98,98,96,91,91,92,91,91,92,92,91,91,92,91,91,91,92,98,98,98,98,156,160,169,169,168,162,160,156,160,162,160,98,156,98,97,98,102,93,98,98,97,98,98,97,98,97,98,103,98,97,97,92,92,92,92,92,101,97,97,101,92,97,102,93,97,98,97,71, +81,56,81,81,56,81,81,81,56,82,56,81,56,81,81,81,80,81,81,81,81,85,83,85,85,82,81,85,81,85,84,81,81,81,88,81,88,81,81,81,85,90,81,81,88,88,63,50,85,85,86,84,84,84,80,6,7,2,6,2,2,2,5,1,11,1,2,2,6,10,37,133,181,8,2,6,6,7,43,130,11,45,30,5,30,130,136,136,148,144,140,6,32,124,11,13,136,146,147,116,147,24,34,33,132,29,36,65,64,58,89,89,85,90,89,85,89,88,85,84,84,84,85,90,85,90,86,100,57,11,129,131,77,76,86,86,89,89,90,90,91,85,91,90,91,91,91,89,90,91,85,89,89,89,85,88,84,89,90,85,86,88,88,84,85,86,89,88,89,89,85,91,89,95,89,86,90,90,85,90,89,85,85,91,85,91,85,91,85,91,91,91,91,92,92,91,91,91,91,91,97,96,101,91,91,91,91,90,86,95,91,89,89,89,89,85,85,85,85,88,85,90,85,86,90,86,88,91,85,91,90,90,90,91,85,92,90,86,89,89,85,89,88,90,89,85,91,92,92,92,96,101,92,91,91,91,91,91,91,91,91,91,91,89,90,76,96,91,92,98,98,103,156,156,161,162,160,160,159,103,156,156,103,98,98,97,92,92,92,101,98,98,97,92,96,101,101,97,98,98,98,98,91,91,91,91,91,91,92,101,91,92,92,101,91,92,101,97,92,72, +56,81,82,81,56,81,56,56,81,80,81,81,81,81,56,81,81,84,56,81,81,81,81,81,83,56,85,81,81,85,80,85,81,88,81,81,81,88,81,81,81,81,83,85,81,81,81,88,81,88,85,85,88,85,90,6,2,2,7,2,2,5,2,5,21,34,2,5,1,21,132,140,148,18,22,11,11,10,21,132,11,27,39,10,16,116,136,138,144,122,148,29,29,22,2,30,146,140,136,136,144,130,141,34,151,44,40,95,84,88,90,89,89,89,88,88,88,88,85,88,85,84,88,85,90,91,90,85,91,82,85,85,90,90,85,89,89,89,88,95,90,90,88,91,90,91,90,90,91,85,91,85,84,85,89,85,89,90,85,89,84,89,85,89,85,90,85,89,90,85,90,90,91,89,91,90,85,91,85,91,90,90,91,90,85,89,91,85,91,90,89,92,92,92,92,91,92,92,91,91,91,92,92,91,91,91,91,89,91,85,85,89,84,84,88,88,84,88,82,84,88,85,90,85,85,85,90,90,90,85,89,89,89,89,90,90,90,85,89,89,89,85,86,89,89,90,91,91,91,87,96,91,92,92,85,90,91,91,91,91,91,91,89,79,95,89,86,92,92,92,98,98,103,98,98,98,98,103,98,98,97,98,92,92,92,92,91,91,91,92,96,98,92,96,96,96,96,92,101,92,97,101,97,91,91,91,91,92,91,91,91,92,92,92,92,101,92,97,97,72, +81,81,80,81,81,84,81,81,56,81,81,56,81,56,84,56,82,81,81,81,81,84,81,81,81,83,85,83,81,83,85,81,81,81,83,85,83,81,81,81,81,81,81,81,81,83,85,88,81,81,88,81,88,81,83,11,2,2,9,5,2,2,2,2,5,29,2,2,6,22,139,120,17,124,114,16,11,2,123,190,2,12,9,2,29,106,106,106,136,144,43,29,119,29,11,123,125,142,133,133,116,133,138,110,22,21,58,88,84,84,88,84,88,88,85,84,84,85,88,84,88,89,89,88,89,90,90,82,89,85,88,88,89,88,85,89,90,82,88,88,88,85,90,90,85,90,86,95,90,90,90,85,85,88,88,88,89,90,90,91,85,89,85,90,85,86,90,84,88,90,86,95,89,90,85,91,88,85,91,85,91,91,85,85,89,90,89,89,86,85,90,91,92,91,90,91,91,85,92,91,91,92,96,91,90,91,92,90,89,91,85,86,88,84,84,84,84,84,84,84,82,84,88,90,82,88,88,89,89,85,88,90,89,90,91,85,89,89,88,89,89,85,90,86,89,88,90,90,90,90,86,91,90,89,91,79,90,91,91,91,92,90,92,90,90,90,92,91,91,92,92,96,97,98,101,92,96,92,92,92,101,92,92,91,91,91,86,91,91,91,92,98,96,92,92,92,92,92,91,92,91,92,101,92,92,91,91,91,91,91,91,91,91,91,91,92,92,91,92,71, +56,81,56,81,56,81,56,81,84,81,56,81,81,81,81,81,81,56,82,81,81,81,81,81,81,81,81,81,81,56,81,83,81,81,81,81,81,81,81,56,85,81,81,81,81,81,81,81,83,81,83,81,83,81,99,10,25,6,2,2,2,6,2,2,2,30,2,6,1,36,144,136,132,116,11,15,6,11,16,11,11,11,2,2,11,13,31,46,125,17,33,47,180,43,134,108,109,132,114,149,123,147,46,66,75,57,84,82,84,81,85,84,84,88,84,84,88,88,85,88,88,89,89,85,88,85,88,88,85,88,89,85,90,90,88,85,88,88,85,84,84,88,90,83,90,90,90,88,91,90,89,89,85,88,84,84,88,90,89,85,90,90,85,91,90,90,85,89,90,88,90,90,85,89,88,84,89,90,91,90,89,85,91,90,86,89,90,90,90,90,91,91,92,92,90,92,90,91,90,91,92,92,101,91,91,91,90,86,90,90,90,82,85,84,84,84,84,84,84,82,82,84,84,88,84,84,84,84,88,84,84,88,90,86,90,89,89,89,89,84,85,88,85,89,89,89,90,85,91,90,90,85,91,90,90,91,90,90,92,90,92,85,91,85,91,89,79,90,91,91,92,97,92,92,92,92,91,91,92,92,92,92,91,91,91,91,91,91,91,91,92,96,92,92,91,91,91,91,91,91,91,91,92,92,86,91,86,91,91,92,92,91,91,91,91,91,91,91,91,62, +81,56,82,56,81,56,81,56,56,81,81,80,56,82,56,82,84,81,56,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,83,84,81,81,83,81,81,81,81,81,81,81,90,1,2,9,2,5,9,2,2,2,12,119,17,2,5,117,147,116,122,8,15,24,17,13,29,10,2,12,9,5,21,17,29,47,110,14,134,24,34,138,46,29,33,151,144,144,119,116,35,91,82,56,81,81,88,81,81,83,84,81,88,84,81,88,84,84,88,84,88,84,84,84,84,88,88,88,88,88,89,89,85,89,89,88,84,85,81,90,81,88,85,90,81,88,85,90,85,88,85,88,85,85,90,89,90,88,89,89,90,90,86,85,88,90,81,88,88,89,85,84,85,84,84,88,90,85,91,90,89,85,90,90,90,85,86,88,91,85,90,86,91,91,90,91,85,90,86,92,96,91,90,86,90,90,90,85,85,85,88,82,84,88,85,82,84,85,84,84,84,88,85,84,84,84,84,84,84,84,89,85,90,90,86,89,89,89,89,89,84,89,89,89,89,85,86,89,89,89,85,89,85,90,86,91,82,91,89,95,89,91,89,95,89,91,91,91,92,92,91,91,91,91,91,91,87,92,91,91,91,91,91,91,91,91,91,91,96,96,92,91,91,90,91,91,91,91,91,91,92,92,91,91,91,91,92,92,91,91,91,91,92,91,92,91,91,58, +56,81,80,82,81,81,56,84,81,56,81,81,81,81,81,81,56,84,82,84,81,81,81,81,81,81,56,84,81,81,81,81,81,81,81,81,81,81,80,81,81,81,81,81,81,81,81,81,81,81,81,81,83,81,83,2,5,9,2,2,2,21,6,6,2,43,126,3,2,30,17,34,29,2,15,127,127,125,109,10,13,2,2,2,7,106,140,133,21,21,106,142,146,151,109,10,37,151,140,36,48,74,57,83,81,80,81,84,81,81,81,81,81,81,81,88,88,84,81,81,88,85,85,88,85,88,84,84,84,84,84,84,88,89,90,88,88,85,84,88,85,81,88,81,85,81,88,85,88,88,88,81,88,85,81,88,88,85,88,85,88,90,88,90,90,88,85,81,88,85,88,85,88,81,84,84,88,91,85,91,90,89,91,90,85,88,85,85,89,88,90,90,91,90,90,91,85,89,89,90,90,90,96,90,92,91,85,91,90,89,89,88,88,85,84,81,88,81,85,81,88,81,84,82,84,84,84,84,84,84,84,88,90,89,86,89,85,89,89,89,90,89,89,89,89,89,86,88,85,85,89,89,85,86,90,90,85,91,91,90,90,86,95,85,91,89,92,85,91,91,91,91,91,91,89,91,91,91,91,91,91,91,91,91,91,92,91,92,96,92,92,92,92,92,91,79,89,91,91,91,91,86,91,91,91,91,91,92,91,91,91,91,92,91,91,87,91,91,91,58, +81,81,81,81,56,56,81,56,56,84,56,81,84,56,81,81,56,81,81,56,81,81,80,81,81,56,81,56,81,81,81,81,81,80,82,81,81,81,81,81,81,81,81,81,84,56,81,81,81,80,81,81,81,81,88,26,9,9,5,2,10,21,11,2,2,22,138,15,10,30,129,6,2,2,24,125,128,124,126,109,106,106,6,6,48,149,138,130,30,21,109,122,181,182,8,5,119,136,33,50,63,81,81,81,80,81,81,81,81,81,81,81,81,81,89,81,81,81,83,88,88,81,81,81,81,85,81,84,85,88,85,84,84,88,88,84,84,85,83,85,88,85,88,85,85,88,81,81,88,85,88,85,83,85,81,81,81,83,88,88,85,83,85,88,81,81,81,81,81,81,81,88,81,88,85,85,84,88,90,89,90,90,84,84,85,88,90,81,84,84,89,89,89,90,86,85,90,89,90,85,90,91,88,91,89,90,91,85,86,89,84,84,84,84,84,81,81,81,83,85,80,85,84,84,84,84,84,84,84,84,84,84,89,88,85,90,89,89,90,89,88,85,89,89,89,90,85,91,90,91,85,89,85,90,86,91,90,89,92,85,86,90,90,91,90,89,85,89,91,91,91,91,79,90,79,90,90,91,91,91,91,91,86,92,92,92,92,92,91,92,92,92,91,91,91,91,91,91,92,91,91,91,86,91,91,91,91,91,92,92,92,91,91,91,91,91,91,91,86,58, +56,81,56,82,81,84,81,56,81,81,56,81,56,81,80,82,81,81,56,56,84,81,81,81,84,81,56,82,81,81,82,81,81,81,56,81,56,56,81,81,81,81,81,81,81,81,80,81,80,81,80,81,81,81,56,81,6,10,7,9,12,7,9,11,2,12,21,10,12,21,13,11,5,11,116,132,145,115,123,46,130,109,21,119,116,116,43,46,26,21,130,137,184,118,2,6,106,132,60,81,81,81,81,81,80,81,81,83,81,81,81,81,81,81,81,81,81,84,81,81,81,81,88,81,81,88,81,85,83,82,84,81,85,84,84,82,88,88,85,81,81,81,81,85,83,81,81,81,81,81,81,81,88,81,81,81,81,81,83,81,81,81,90,80,81,81,81,81,81,81,81,81,81,81,88,81,88,85,85,88,85,88,85,84,84,84,81,85,84,81,88,89,89,90,90,89,84,88,85,89,91,88,89,85,91,90,85,90,85,89,89,88,84,84,81,88,81,81,81,81,88,84,84,84,85,84,81,82,84,82,84,84,84,89,89,88,85,86,88,89,86,89,86,89,90,85,85,89,90,86,91,89,90,90,91,91,86,91,82,91,90,91,85,91,91,90,90,85,90,90,91,91,90,90,90,91,91,91,91,91,91,91,91,86,91,91,92,91,92,92,91,91,91,91,91,91,91,82,91,86,91,91,91,91,91,91,91,91,91,92,91,91,91,91,91,91,86,86,95,57, +81,81,84,56,81,56,84,81,81,56,81,56,81,56,81,81,56,81,81,56,81,81,56,56,81,56,81,81,80,80,56,81,81,81,81,80,82,80,82,56,81,81,80,80,80,61,81,81,81,81,81,81,80,81,80,99,10,2,10,2,2,29,32,2,6,9,27,10,2,5,10,13,10,11,119,116,122,116,111,21,47,18,110,120,106,181,144,45,39,26,30,181,138,8,2,21,149,66,58,81,81,80,81,81,81,81,81,84,80,81,80,81,81,81,81,81,83,81,81,81,83,81,81,88,81,81,88,81,81,90,84,83,81,85,88,85,81,81,81,88,81,88,88,81,83,85,88,80,81,81,81,81,81,81,83,80,56,81,81,81,81,83,81,81,81,83,80,81,81,85,81,81,83,81,81,83,85,83,89,88,88,89,85,84,84,88,81,85,88,85,84,88,88,88,85,88,85,88,85,88,84,88,85,84,88,91,88,88,85,88,85,84,84,81,84,85,81,81,81,81,85,81,84,84,84,85,85,84,84,84,82,84,84,88,82,90,89,89,85,91,85,85,90,90,89,86,91,91,91,91,90,79,91,91,91,90,91,90,89,91,90,86,92,91,91,91,90,90,86,91,91,91,91,91,91,90,90,91,91,91,86,91,91,91,91,91,92,92,92,92,91,91,91,91,91,86,91,91,86,91,91,91,91,91,91,91,92,91,92,86,91,91,86,90,91,91,92,90,89,58, +81,56,56,81,56,81,81,81,56,82,56,56,56,81,81,61,81,56,84,56,81,56,81,56,81,81,81,56,81,81,81,81,81,81,80,56,56,61,83,82,56,82,80,80,82,56,56,80,82,80,81,80,81,80,81,81,54,2,2,9,10,17,106,17,2,6,5,5,2,62,40,15,11,9,6,46,138,147,109,11,141,32,138,46,141,132,119,46,11,2,29,132,141,11,2,22,77,81,81,80,81,81,80,80,81,80,80,61,81,81,81,80,81,80,81,81,80,84,81,81,81,81,81,90,83,81,81,81,81,81,81,81,81,84,81,81,81,88,81,88,85,88,81,81,81,81,83,85,83,85,81,81,81,81,81,81,81,81,80,81,81,81,83,81,81,83,81,81,83,81,83,85,81,81,81,81,81,81,81,88,88,85,88,85,88,81,81,81,85,81,88,84,84,84,84,88,85,84,84,81,84,84,84,84,89,90,89,85,84,84,84,84,84,84,84,80,81,88,81,81,81,88,84,82,88,82,88,85,89,89,84,84,84,84,89,88,89,85,91,85,92,91,90,91,86,90,91,91,91,91,91,91,91,91,91,86,90,86,91,91,91,92,91,101,96,92,92,92,92,92,92,92,91,91,91,86,91,86,90,79,90,91,91,86,92,91,91,91,92,91,91,91,91,91,91,91,91,91,91,91,91,91,92,92,91,91,91,91,91,91,90,89,86,91,90,86,86,86,91,58, +56,84,82,81,82,81,56,81,56,80,81,56,82,56,56,80,61,80,56,81,81,56,82,81,56,80,56,82,56,81,56,81,56,80,56,80,80,80,56,80,80,80,81,80,80,80,80,81,80,80,61,81,81,81,81,81,81,6,9,5,5,43,130,136,6,53,26,54,2,2,2,18,22,2,6,36,136,126,118,13,141,34,120,43,136,136,134,30,26,2,141,119,29,2,117,187,80,80,61,81,80,81,81,81,81,81,81,80,80,81,81,80,80,61,83,81,81,81,81,81,81,81,81,81,81,81,81,81,88,81,88,81,81,81,81,81,81,81,90,80,81,81,81,81,81,81,81,83,81,81,83,85,81,81,81,80,81,81,80,80,81,83,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,88,85,88,81,88,81,81,85,83,81,81,85,88,84,84,84,84,88,85,84,88,82,84,84,84,85,90,89,84,84,84,84,84,84,81,84,81,81,81,88,81,84,81,84,82,84,88,85,85,84,89,84,85,84,84,84,89,89,90,90,86,90,91,89,92,91,91,91,91,91,91,92,91,91,91,91,91,91,92,91,91,92,92,92,92,96,92,92,92,91,92,92,91,91,91,91,91,91,91,90,90,90,86,91,91,91,90,86,91,91,91,91,91,91,91,91,91,91,91,91,91,92,92,91,91,91,91,91,91,89,91,90,91,86,90,89,91,89,90,85,62, +56,81,81,80,56,56,56,81,56,61,56,80,56,56,82,56,81,56,56,63,80,80,56,56,63,80,56,61,63,81,80,61,80,80,61,80,56,80,61,81,80,80,61,81,80,56,80,61,81,80,80,56,80,61,81,80,81,51,2,2,9,46,123,136,42,88,82,83,2,6,2,29,111,112,16,116,133,182,111,29,132,119,130,139,46,43,48,197,147,122,49,120,32,26,78,80,56,81,80,56,80,81,61,83,56,80,82,80,56,83,80,80,83,80,61,56,81,81,81,81,81,81,81,81,81,80,80,81,81,81,81,84,81,81,83,81,81,81,83,88,83,81,81,85,81,81,85,81,83,81,81,81,81,83,81,80,81,81,81,56,80,81,56,81,81,81,81,81,81,83,81,81,81,81,56,81,81,81,81,81,81,88,81,81,81,81,83,81,88,82,84,84,84,85,84,84,88,84,81,84,81,84,84,84,88,85,84,84,82,84,82,81,81,84,81,81,56,81,81,85,81,84,84,84,84,84,88,88,85,85,84,84,85,89,85,85,91,90,91,82,91,90,91,90,90,91,90,91,91,91,86,91,90,91,91,91,92,91,92,91,92,92,92,92,92,91,91,92,92,92,101,92,96,93,92,92,96,91,91,86,91,90,90,92,86,79,91,95,90,91,91,90,86,91,91,91,91,91,87,92,91,92,91,92,91,91,91,91,91,90,79,89,85,86,91,86,89,91,85,58, +81,56,56,56,82,56,81,56,81,56,80,56,82,56,56,80,82,56,61,56,56,63,80,56,61,80,56,80,80,56,56,81,80,56,80,80,80,56,80,80,56,80,56,80,80,80,56,56,80,80,56,80,80,56,80,80,61,83,26,2,2,129,124,132,77,80,80,85,26,1,2,5,29,18,132,32,110,141,114,47,138,32,70,138,120,44,193,134,176,180,17,130,82,81,80,80,80,56,80,82,80,56,80,80,80,80,80,80,80,81,56,81,83,80,80,81,83,81,81,80,81,81,81,81,81,81,80,81,80,81,81,56,84,81,81,81,81,81,83,81,90,83,81,83,81,83,81,81,83,81,81,81,81,81,83,81,81,81,81,83,81,56,84,81,80,81,81,81,81,81,81,80,56,82,81,80,81,81,81,88,81,84,81,56,81,81,81,81,84,84,84,84,88,88,84,84,84,84,84,81,88,85,84,84,84,84,88,84,81,84,81,84,82,81,84,81,81,81,83,81,85,84,84,84,82,84,84,84,84,84,88,84,85,82,89,89,89,89,85,90,85,85,89,85,89,89,90,91,90,90,89,91,91,92,90,91,86,86,92,91,91,91,91,91,91,79,91,91,91,92,92,92,97,96,92,97,92,92,91,91,89,86,92,90,90,85,85,90,85,86,85,90,90,91,85,91,91,91,91,91,92,91,91,91,86,91,91,79,91,90,90,91,91,89,91,89,92,90,85,58, +81,82,81,81,81,56,56,56,56,84,56,80,56,81,56,56,56,56,56,80,56,56,56,80,80,56,56,56,81,80,80,56,56,80,80,56,81,80,80,56,80,80,80,80,56,81,80,80,56,80,80,81,80,80,80,56,80,80,81,11,5,119,133,157,80,80,81,81,54,29,1,12,2,43,123,120,120,126,29,119,69,61,29,192,188,130,132,129,120,43,58,56,80,81,80,80,56,80,80,80,81,80,81,80,56,81,80,80,56,56,81,80,80,81,81,81,81,81,80,81,81,80,81,81,80,81,80,81,81,80,81,83,81,81,84,81,81,81,81,81,83,81,81,81,81,81,81,81,83,81,83,80,81,81,81,81,56,81,81,81,80,83,81,80,81,81,81,81,81,81,81,81,81,80,81,81,80,81,82,80,81,81,81,81,81,81,81,81,81,88,84,84,84,84,82,84,84,84,88,81,81,81,88,84,84,84,81,82,81,84,81,81,81,81,84,81,81,81,81,81,81,84,81,81,84,84,84,84,84,85,84,84,88,88,89,84,84,88,89,88,84,85,84,88,82,89,89,85,90,89,90,91,90,86,91,91,90,86,86,92,91,90,91,91,91,91,90,91,91,91,92,92,92,96,96,96,96,91,91,91,91,90,85,86,89,89,90,91,90,82,91,85,86,86,90,91,91,91,91,91,91,87,92,91,91,91,86,95,90,90,79,89,90,90,90,91,89,91,82,57, +82,82,81,84,82,56,82,81,81,56,56,56,56,56,81,56,80,56,56,56,56,56,80,56,56,80,56,56,56,56,56,80,56,80,56,80,56,80,56,80,56,56,80,56,80,56,80,56,80,56,80,56,56,80,56,80,56,80,56,56,38,67,72,56,80,56,56,81,56,35,141,33,2,10,45,132,144,141,64,82,80,56,80,52,38,65,65,85,58,80,56,80,56,80,56,81,80,56,80,56,80,56,80,56,80,56,80,56,80,56,80,56,81,80,80,81,80,83,80,81,81,81,81,81,81,80,81,80,83,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,80,81,81,81,81,81,80,81,81,80,81,81,80,81,81,81,83,80,80,81,80,81,81,81,81,80,81,80,81,81,81,81,88,84,81,81,88,81,82,81,84,82,82,81,81,81,81,81,88,84,84,82,84,81,84,81,81,81,81,81,81,81,81,81,81,81,81,88,81,84,81,88,84,84,84,84,84,84,84,88,84,84,84,88,85,84,84,84,84,84,84,84,89,84,89,89,85,90,90,90,85,91,90,91,89,92,79,90,91,91,91,91,91,91,91,91,92,92,92,92,92,91,91,91,91,90,86,85,89,85,86,85,86,91,89,85,90,85,90,91,82,86,91,90,91,91,91,91,91,91,91,91,91,79,91,90,91,79,90,91,79,90,91,89,58, +82,81,82,81,81,56,81,56,56,56,81,56,81,56,56,56,56,80,80,80,56,80,56,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,56,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,81,80,6,14,28,39,133,149,157,80,80,80,56,80,80,81,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,81,80,81,80,81,83,80,80,56,80,80,81,83,56,81,80,81,80,81,81,83,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,80,80,80,81,81,80,81,81,81,56,83,80,56,80,83,56,83,81,80,80,81,81,81,83,81,80,81,81,81,81,81,80,81,81,81,81,81,81,84,81,81,84,84,81,84,84,84,81,81,81,81,81,84,84,84,84,81,84,81,84,81,81,82,81,81,81,81,56,81,81,81,81,81,81,84,81,84,81,82,81,82,84,84,81,81,84,82,84,84,84,84,84,84,84,84,84,84,84,84,84,89,89,90,89,89,85,89,90,90,90,90,90,91,90,91,90,90,91,91,92,92,92,91,92,91,91,91,90,90,90,90,90,85,90,89,89,90,85,89,89,85,89,85,89,90,90,85,91,90,86,90,90,86,90,85,86,90,85,85,90,90,90,90,86,90,90,90,90,58, +}; + +MWIMAGEHDR image_zion208 = { + 320, 200, /* width, height*/ + 1, 8, /* planes, bpp*/ + 320, 1, /* pitch, bytesperpixel*/ + 1, 256, /* compression, palsize*/ + -1L, /* transcolor*/ + palette, + imagebits, +}; Index: bmp/makebmp.c =================================================================== --- bmp/makebmp.c (nonexistent) +++ bmp/makebmp.c (revision 174) @@ -0,0 +1,136 @@ +/* + * Copyright (c) 1999 Greg Haerr + * + * Framebuffer data to .bmp file converter + * + * 10/4/1999 g haerr + */ +#include +#include + +#define BI_RGB 0L +#define BI_RLE8 1L +#define BI_RLE4 2L +#define BI_BITFIELDS 3L + +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef long LONG; + +#pragma pack(1) +/* windows style*/ +typedef struct { + /* BITMAPFILEHEADER*/ + BYTE bfType[2]; + DWORD bfSize; + WORD bfReserved1; + WORD bfReserved2; + DWORD bfOffBits; + /* BITMAPINFOHEADER*/ + DWORD BiSize; + LONG BiWidth; + LONG BiHeight; + WORD BiPlanes; + WORD BiBitCount; + DWORD BiCompression; + DWORD BiSizeImage; + LONG BiXpelsPerMeter; + LONG BiYpelsPerMeter; + DWORD BiClrUsed; + DWORD BiClrImportant; +} BMPHEAD; +#pragma pack() + +int MakeBMP(FILE *ifp,FILE *ofp); + +int +main(int ac,char **av) +{ + FILE *ifp; + FILE *ofp; + + if(ac < 3) { + fprintf(stderr, "Usage: makebmp \n"); + exit(1); + } + ifp = fopen(av[1], "rb"); + if(!ifp) { + fprintf(stderr, "Can't open file: %s\n", av[1]); + exit(1); + } + ofp = fopen(av[2], "wb"); + if(!ofp) { + fprintf(stderr, "Can't create file: %s\n", av[2]); + exit(1); + } + if(!MakeBMP(ifp, ofp)) { + fprintf(stderr, "Conversion failed: %s\n", av[2]); + fclose(ofp); + unlink(av[2]); + exit(1); + } + fclose(ifp); + fclose(ofp); + return 0; +} + +/* create a bmp file*/ +int +MakeBMP(FILE *ifp, FILE *ofp) +{ + BMPHEAD bmp; + int i, j; + int cx, cy, extra, bitdepth, ncolors; + + cx = 640; + cy = 480; + extra = (cx + 3) & 3; + bitdepth = 8; + if(bitdepth <= 8) + ncolors = 1<0; --i) { + long base = sizeof(bmp) + ncolors*4 + (long)i*cx; + fseek(ofp, base, SEEK_SET); + for(j=0; j
bmp/pngtest.png Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/car8.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/car8.bmp =================================================================== --- bmp/car8.bmp (nonexistent) +++ bmp/car8.bmp (revision 174)
bmp/car8.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/Makefile =================================================================== --- bmp/Makefile (nonexistent) +++ bmp/Makefile (revision 174) @@ -0,0 +1,64 @@ +############################################################################## +# Microwindows template Makefile +# Copyright (c) 2000 Martin Jolicoeur, Greg Haerr +############################################################################## + +ifndef TOP +TOP = ../.. +CONFIG = $(TOP)/config +endif + +include $(CONFIG) + +#all: $(TOP)/bin/convbmp +#HOSTCC=gcc +#HOSTCFLAGS=-I../../include + +######################## Additional Flags section ############################ + +# Directories list for header files +INCLUDEDIRS += +# Defines for preprocessor +DEFINES += + +# Compilation flags for C files OTHER than include directories +CFLAGS += +# Preprocessor flags OTHER than defines +CPPFLAGS += +# Linking flags +LDFLAGS += + +############################# targets section ################################ + +ifeq ($(MICROWIN), Y) + +# If you want to create a library with the objects files, define the name here +LIBNAME = libmwimages.a +LIBNAMESO = libmwimages.so + +# List of objects to compile +OBJS = car8.o min4.o max4.o close4.o under4.o\ + zion208.o cs1.o rle8.o microwin.o penguin.o + +all: $(TOP)/bin/convbmp $(TOP)/bin/makebmp default + +convbmp: convbmp.c + $(HOSTCC) $(HOSTCFLAGS) $< -o $@ + +endif + +######################### Makefile.rules section ############################# + +include $(TOP)/Makefile.rules + +######################## Tools targets section ############################### + +realclean: clean + $(RM) car8.c min4.c max4.c close4.c under4.c zion208.c cs1.c rle8.c \ + microwin.c penguin.c + +$(TOP)/bin/convbmp: convbmp.c + $(HOSTCC) $(HOSTCFLAGS) $< -o $@ + +$(TOP)/bin/makebmp: makebmp.c + $(HOSTCC) $(HOSTCFLAGS) $< -o $@ Index: bmp/layout =================================================================== --- bmp/layout (nonexistent) +++ bmp/layout (revision 174) @@ -0,0 +1,21 @@ +0000000 4d42 00e6 0000 0000 0000 0076 0000 0028 + [BM] [fbSize ] [r1] [r2] [bfOffbi] [biS +0000020 0000 0010 0000 000e 0000 0001 0004 0000 + ize] [biWidth] [Biheigh] plan bpp comp +0000040 0000 0070 0000 0000 0000 0000 0000 0010 + ress imagesize xpelsperm ypelsperm colo +0000060 0000 0010 0000 0000 0000 0000 00bf bf00 + ruse clrimport +0000100 0000 bf00 00bf 00bf 0000 00bf 00bf bfbf +0000120 0000 c0c0 00c0 8080 0080 0000 00ff ff00 +0000140 0000 ff00 00ff 00ff 0000 00ff 00ff ffff +0000160 0000 ffff 00ff 0000 0000 0000 0000 88f8 + bitmap-> +0000200 8888 8888 8088 77f7 7777 7777 8077 70f7 +0000220 0000 0000 8077 70f7 7777 7077 8077 70f7 +0000240 7777 7077 8077 70f7 7777 7077 8077 70f7 +* +0000300 7777 7077 8077 70f7 0000 0000 8077 70f7 +0000320 0000 0000 8077 77f7 7777 7777 8077 ffff +0000340 ffff ffff f0ff +0000346 Index: bmp/car8.c =================================================================== --- bmp/car8.c (nonexistent) +++ bmp/car8.c (revision 174) @@ -0,0 +1,438 @@ +/* Generated by convbmp*/ +#include "device.h" + +/* MWIMAGEHDR image_car8 converted from car8.bmp*/ + +static MWPALENTRY palette[256] = { + RGBDEF( 0, 0, 0 ), /* pal 0*/ + RGBDEF( 165, 0, 0 ), /* pal 1*/ + RGBDEF( 132, 0, 8 ), /* pal 2*/ + RGBDEF( 140, 0, 8 ), /* pal 3*/ + RGBDEF( 16, 16, 16 ), /* pal 4*/ + RGBDEF( 24, 16, 16 ), /* pal 5*/ + RGBDEF( 41, 16, 16 ), /* pal 6*/ + RGBDEF( 49, 0, 16 ), /* pal 7*/ + RGBDEF( 66, 8, 16 ), /* pal 8*/ + RGBDEF( 90, 8, 16 ), /* pal 9*/ + RGBDEF( 16, 16, 24 ), /* pal 10*/ + RGBDEF( 16, 24, 24 ), /* pal 11*/ + RGBDEF( 24, 24, 24 ), /* pal 12*/ + RGBDEF( 49, 16, 24 ), /* pal 13*/ + RGBDEF( 74, 24, 24 ), /* pal 14*/ + RGBDEF( 99, 24, 24 ), /* pal 15*/ + RGBDEF( 132, 8, 24 ), /* pal 16*/ + RGBDEF( 16, 24, 33 ), /* pal 17*/ + RGBDEF( 41, 41, 33 ), /* pal 18*/ + RGBDEF( 49, 33, 33 ), /* pal 19*/ + RGBDEF( 74, 33, 33 ), /* pal 20*/ + RGBDEF( 99, 107, 33 ), /* pal 21*/ + RGBDEF( 107, 24, 33 ), /* pal 22*/ + RGBDEF( 115, 33, 33 ), /* pal 23*/ + RGBDEF( 132, 24, 33 ), /* pal 24*/ + RGBDEF( 140, 16, 33 ), /* pal 25*/ + RGBDEF( 156, 8, 33 ), /* pal 26*/ + RGBDEF( 156, 16, 33 ), /* pal 27*/ + RGBDEF( 33, 33, 41 ), /* pal 28*/ + RGBDEF( 41, 41, 41 ), /* pal 29*/ + RGBDEF( 107, 41, 41 ), /* pal 30*/ + RGBDEF( 140, 33, 41 ), /* pal 31*/ + RGBDEF( 33, 41, 49 ), /* pal 32*/ + RGBDEF( 33, 49, 49 ), /* pal 33*/ + RGBDEF( 41, 49, 49 ), /* pal 34*/ + RGBDEF( 74, 49, 49 ), /* pal 35*/ + RGBDEF( 140, 49, 49 ), /* pal 36*/ + RGBDEF( 148, 140, 49 ), /* pal 37*/ + RGBDEF( 148, 148, 49 ), /* pal 38*/ + RGBDEF( 49, 57, 57 ), /* pal 39*/ + RGBDEF( 49, 66, 57 ), /* pal 40*/ + RGBDEF( 90, 99, 57 ), /* pal 41*/ + RGBDEF( 107, 115, 57 ), /* pal 42*/ + RGBDEF( 132, 107, 57 ), /* pal 43*/ + RGBDEF( 49, 66, 66 ), /* pal 44*/ + RGBDEF( 57, 66, 66 ), /* pal 45*/ + RGBDEF( 90, 66, 66 ), /* pal 46*/ + RGBDEF( 123, 66, 66 ), /* pal 47*/ + RGBDEF( 140, 66, 66 ), /* pal 48*/ + RGBDEF( 66, 74, 74 ), /* pal 49*/ + RGBDEF( 74, 82, 74 ), /* pal 50*/ + RGBDEF( 90, 74, 74 ), /* pal 51*/ + RGBDEF( 140, 148, 74 ), /* pal 52*/ + RGBDEF( 156, 165, 74 ), /* pal 53*/ + RGBDEF( 74, 82, 82 ), /* pal 54*/ + RGBDEF( 74, 90, 82 ), /* pal 55*/ + RGBDEF( 115, 99, 82 ), /* pal 56*/ + RGBDEF( 123, 82, 82 ), /* pal 57*/ + RGBDEF( 140, 74, 82 ), /* pal 58*/ + RGBDEF( 57, 82, 90 ), /* pal 59*/ + RGBDEF( 66, 82, 90 ), /* pal 60*/ + RGBDEF( 66, 90, 90 ), /* pal 61*/ + RGBDEF( 66, 90, 107 ), /* pal 62*/ + RGBDEF( 66, 99, 115 ), /* pal 63*/ + RGBDEF( 66, 107, 123 ), /* pal 64*/ + RGBDEF( 74, 90, 90 ), /* pal 65*/ + RGBDEF( 82, 107, 115 ), /* pal 66*/ + RGBDEF( 82, 107, 123 ), /* pal 67*/ + RGBDEF( 82, 115, 123 ), /* pal 68*/ + RGBDEF( 82, 115, 140 ), /* pal 69*/ + RGBDEF( 90, 107, 107 ), /* pal 70*/ + RGBDEF( 90, 107, 115 ), /* pal 71*/ + RGBDEF( 90, 115, 123 ), /* pal 72*/ + RGBDEF( 99, 82, 90 ), /* pal 73*/ + RGBDEF( 99, 115, 107 ), /* pal 74*/ + RGBDEF( 99, 115, 115 ), /* pal 75*/ + RGBDEF( 107, 90, 90 ), /* pal 76*/ + RGBDEF( 107, 107, 115 ), /* pal 77*/ + RGBDEF( 115, 123, 115 ), /* pal 78*/ + RGBDEF( 131, 102, 94 ), /* pal 79*/ + RGBDEF( 123, 107, 123 ), /* pal 80*/ + RGBDEF( 156, 115, 123 ), /* pal 81*/ + RGBDEF( 99, 123, 132 ), /* pal 82*/ + RGBDEF( 99, 123, 140 ), /* pal 83*/ + RGBDEF( 107, 132, 132 ), /* pal 84*/ + RGBDEF( 123, 132, 132 ), /* pal 85*/ + RGBDEF( 139, 152, 111 ), /* pal 86*/ + RGBDEF( 148, 165, 132 ), /* pal 87*/ + RGBDEF( 123, 148, 140 ), /* pal 88*/ + RGBDEF( 156, 140, 140 ), /* pal 89*/ + RGBDEF( 82, 123, 148 ), /* pal 90*/ + RGBDEF( 99, 140, 148 ), /* pal 91*/ + RGBDEF( 107, 132, 148 ), /* pal 92*/ + RGBDEF( 107, 140, 148 ), /* pal 93*/ + RGBDEF( 132, 148, 148 ), /* pal 94*/ + RGBDEF( 82, 123, 156 ), /* pal 95*/ + RGBDEF( 99, 132, 156 ), /* pal 96*/ + RGBDEF( 107, 140, 156 ), /* pal 97*/ + RGBDEF( 132, 156, 156 ), /* pal 98*/ + RGBDEF( 123, 156, 165 ), /* pal 99*/ + RGBDEF( 148, 165, 165 ), /* pal 100*/ + RGBDEF( 99, 140, 173 ), /* pal 101*/ + RGBDEF( 115, 148, 173 ), /* pal 102*/ + RGBDEF( 123, 156, 181 ), /* pal 103*/ + RGBDEF( 132, 165, 181 ), /* pal 104*/ + RGBDEF( 148, 173, 181 ), /* pal 105*/ + RGBDEF( 107, 148, 189 ), /* pal 106*/ + RGBDEF( 115, 156, 189 ), /* pal 107*/ + RGBDEF( 132, 173, 189 ), /* pal 108*/ + RGBDEF( 123, 173, 198 ), /* pal 109*/ + RGBDEF( 140, 181, 198 ), /* pal 110*/ + RGBDEF( 123, 189, 206 ), /* pal 111*/ + RGBDEF( 132, 173, 206 ), /* pal 112*/ + RGBDEF( 156, 189, 206 ), /* pal 113*/ + RGBDEF( 140, 189, 214 ), /* pal 114*/ + RGBDEF( 123, 156, 222 ), /* pal 115*/ + RGBDEF( 123, 173, 222 ), /* pal 116*/ + RGBDEF( 140, 198, 231 ), /* pal 117*/ + RGBDEF( 156, 206, 231 ), /* pal 118*/ + RGBDEF( 156, 206, 239 ), /* pal 119*/ + RGBDEF( 165, 0, 24 ), /* pal 120*/ + RGBDEF( 198, 0, 24 ), /* pal 121*/ + RGBDEF( 173, 0, 33 ), /* pal 122*/ + RGBDEF( 181, 0, 33 ), /* pal 123*/ + RGBDEF( 206, 0, 33 ), /* pal 124*/ + RGBDEF( 214, 0, 41 ), /* pal 125*/ + RGBDEF( 222, 0, 41 ), /* pal 126*/ + RGBDEF( 231, 0, 41 ), /* pal 127*/ + RGBDEF( 231, 0, 49 ), /* pal 128*/ + RGBDEF( 165, 8, 24 ), /* pal 129*/ + RGBDEF( 173, 8, 33 ), /* pal 130*/ + RGBDEF( 198, 8, 41 ), /* pal 131*/ + RGBDEF( 214, 8, 41 ), /* pal 132*/ + RGBDEF( 222, 8, 41 ), /* pal 133*/ + RGBDEF( 222, 8, 49 ), /* pal 134*/ + RGBDEF( 239, 8, 49 ), /* pal 135*/ + RGBDEF( 173, 16, 0 ), /* pal 136*/ + RGBDEF( 173, 16, 33 ), /* pal 137*/ + RGBDEF( 165, 16, 41 ), /* pal 138*/ + RGBDEF( 206, 16, 41 ), /* pal 139*/ + RGBDEF( 222, 16, 41 ), /* pal 140*/ + RGBDEF( 231, 16, 41 ), /* pal 141*/ + RGBDEF( 181, 24, 33 ), /* pal 142*/ + RGBDEF( 165, 24, 41 ), /* pal 143*/ + RGBDEF( 206, 24, 41 ), /* pal 144*/ + RGBDEF( 247, 24, 41 ), /* pal 145*/ + RGBDEF( 189, 24, 49 ), /* pal 146*/ + RGBDEF( 222, 24, 49 ), /* pal 147*/ + RGBDEF( 206, 33, 41 ), /* pal 148*/ + RGBDEF( 239, 33, 41 ), /* pal 149*/ + RGBDEF( 181, 41, 33 ), /* pal 150*/ + RGBDEF( 165, 41, 49 ), /* pal 151*/ + RGBDEF( 214, 41, 57 ), /* pal 152*/ + RGBDEF( 189, 49, 49 ), /* pal 153*/ + RGBDEF( 165, 66, 66 ), /* pal 154*/ + RGBDEF( 206, 66, 66 ), /* pal 155*/ + RGBDEF( 189, 74, 66 ), /* pal 156*/ + RGBDEF( 181, 99, 37 ), /* pal 157*/ + RGBDEF( 173, 90, 66 ), /* pal 158*/ + RGBDEF( 189, 99, 74 ), /* pal 159*/ + RGBDEF( 214, 74, 74 ), /* pal 160*/ + RGBDEF( 222, 74, 74 ), /* pal 161*/ + RGBDEF( 206, 90, 82 ), /* pal 162*/ + RGBDEF( 165, 107, 99 ), /* pal 163*/ + RGBDEF( 181, 107, 99 ), /* pal 164*/ + RGBDEF( 222, 90, 82 ), /* pal 165*/ + RGBDEF( 222, 99, 74 ), /* pal 166*/ + RGBDEF( 222, 99, 90 ), /* pal 167*/ + RGBDEF( 231, 66, 66 ), /* pal 168*/ + RGBDEF( 239, 41, 57 ), /* pal 169*/ + RGBDEF( 239, 90, 82 ), /* pal 170*/ + RGBDEF( 247, 66, 74 ), /* pal 171*/ + RGBDEF( 247, 90, 90 ), /* pal 172*/ + RGBDEF( 255, 41, 66 ), /* pal 173*/ + RGBDEF( 255, 57, 74 ), /* pal 174*/ + RGBDEF( 255, 74, 82 ), /* pal 175*/ + RGBDEF( 255, 90, 82 ), /* pal 176*/ + RGBDEF( 255, 90, 90 ), /* pal 177*/ + RGBDEF( 255, 99, 82 ), /* pal 178*/ + RGBDEF( 255, 99, 99 ), /* pal 179*/ + RGBDEF( 181, 139, 78 ), /* pal 180*/ + RGBDEF( 198, 107, 107 ), /* pal 181*/ + RGBDEF( 222, 123, 123 ), /* pal 182*/ + RGBDEF( 222, 132, 115 ), /* pal 183*/ + RGBDEF( 247, 107, 99 ), /* pal 184*/ + RGBDEF( 247, 132, 115 ), /* pal 185*/ + RGBDEF( 255, 107, 107 ), /* pal 186*/ + RGBDEF( 255, 132, 115 ), /* pal 187*/ + RGBDEF( 255, 140, 123 ), /* pal 188*/ + RGBDEF( 222, 156, 132 ), /* pal 189*/ + RGBDEF( 239, 140, 132 ), /* pal 190*/ + RGBDEF( 255, 148, 140 ), /* pal 191*/ + RGBDEF( 255, 165, 140 ), /* pal 192*/ + RGBDEF( 198, 148, 148 ), /* pal 193*/ + RGBDEF( 173, 140, 156 ), /* pal 194*/ + RGBDEF( 193, 181, 65 ), /* pal 195*/ + RGBDEF( 189, 185, 90 ), /* pal 196*/ + RGBDEF( 208, 208, 90 ), /* pal 197*/ + RGBDEF( 230, 226, 82 ), /* pal 198*/ + RGBDEF( 243, 251, 82 ), /* pal 199*/ + RGBDEF( 255, 255, 107 ), /* pal 200*/ + RGBDEF( 255, 255, 115 ), /* pal 201*/ + RGBDEF( 231, 222, 123 ), /* pal 202*/ + RGBDEF( 247, 255, 123 ), /* pal 203*/ + RGBDEF( 247, 173, 148 ), /* pal 204*/ + RGBDEF( 255, 173, 148 ), /* pal 205*/ + RGBDEF( 255, 189, 148 ), /* pal 206*/ + RGBDEF( 165, 173, 156 ), /* pal 207*/ + RGBDEF( 181, 198, 156 ), /* pal 208*/ + RGBDEF( 247, 181, 156 ), /* pal 209*/ + RGBDEF( 192, 186, 170 ), /* pal 210*/ + RGBDEF( 185, 185, 197 ), /* pal 211*/ + RGBDEF( 173, 206, 222 ), /* pal 212*/ + RGBDEF( 198, 214, 214 ), /* pal 213*/ + RGBDEF( 222, 181, 181 ), /* pal 214*/ + RGBDEF( 231, 206, 206 ), /* pal 215*/ + RGBDEF( 255, 181, 156 ), /* pal 216*/ + RGBDEF( 255, 231, 156 ), /* pal 217*/ + RGBDEF( 255, 181, 165 ), /* pal 218*/ + RGBDEF( 255, 181, 173 ), /* pal 219*/ + RGBDEF( 255, 189, 173 ), /* pal 220*/ + RGBDEF( 255, 206, 181 ), /* pal 221*/ + RGBDEF( 255, 214, 198 ), /* pal 222*/ + RGBDEF( 255, 222, 202 ), /* pal 223*/ + RGBDEF( 255, 231, 214 ), /* pal 224*/ + RGBDEF( 255, 247, 222 ), /* pal 225*/ + RGBDEF( 165, 206, 231 ), /* pal 226*/ + RGBDEF( 165, 214, 239 ), /* pal 227*/ + RGBDEF( 181, 222, 239 ), /* pal 228*/ + RGBDEF( 206, 222, 239 ), /* pal 229*/ + RGBDEF( 222, 231, 239 ), /* pal 230*/ + RGBDEF( 255, 247, 239 ), /* pal 231*/ + RGBDEF( 231, 239, 247 ), /* pal 232*/ + RGBDEF( 165, 247, 255 ), /* pal 233*/ + RGBDEF( 173, 222, 255 ), /* pal 234*/ + RGBDEF( 189, 239, 255 ), /* pal 235*/ + RGBDEF( 206, 239, 255 ), /* pal 236*/ + RGBDEF( 222, 247, 255 ), /* pal 237*/ + RGBDEF( 247, 255, 255 ), /* pal 238*/ + RGBDEF( 255, 255, 255 ), /* pal 239*/ + RGBDEF( 0, 0, 0 ), /* pal 240*/ + RGBDEF( 191, 0, 0 ), /* pal 241*/ + RGBDEF( 0, 191, 0 ), /* pal 242*/ + RGBDEF( 191, 191, 0 ), /* pal 243*/ + RGBDEF( 0, 0, 191 ), /* pal 244*/ + RGBDEF( 191, 0, 191 ), /* pal 245*/ + RGBDEF( 0, 191, 191 ), /* pal 246*/ + RGBDEF( 192, 192, 192 ), /* pal 247*/ + RGBDEF( 128, 128, 128 ), /* pal 248*/ + RGBDEF( 255, 0, 0 ), /* pal 249*/ + RGBDEF( 0, 255, 0 ), /* pal 250*/ + RGBDEF( 255, 255, 0 ), /* pal 251*/ + RGBDEF( 0, 0, 255 ), /* pal 252*/ + RGBDEF( 255, 0, 255 ), /* pal 253*/ + RGBDEF( 0, 255, 255 ), /* pal 254*/ + RGBDEF( 255, 255, 255 ), /* pal 255*/ +}; + +static MWUCHAR imagebits[] = { +54,54,54,55,54,54,54,54,54,55,54,55,54,55,54,55,54,54,54,55,55,54,54,55,54,54,54,49,55,54,54,54,54,54,54,54,54,54,54,55,54,55,54,54,55,54,55,54,54,54,54,54,54,54,54,49,55,54,54,54,54,55,54,54,54,55,54,55,55,54,54,54,54,55,54,54,54,54,54,54,54,54,54,54,54,54,54,55,54,54,54,55,54,54,54,54,55,55,54,54,54,55,54,55,55,55,54,55,60,54,55,54,54,54,54,54,54,54,54,55,54,54,54,49,54,54,54,54,50,55,54,49,54,54,54,50,54,55,54,50,54,49,55,54,49,54,54,55,55,54,54,54,49,55,54,55,54,55,54,54,54,54,50,54,54,54,54,49,50,54,49,54,49,54,54,49,54,49,54,49,54,54,49,54,54,49,49,54,54,54,54,49,54,49,49,49,54,49,49,54,49,49,49,54,49,54,49,54,49,54,54,54,49,54,54,49,54,54,49,49,54,54,49,54,54,54,49,54,54,49,59,49,59,49,49,49,54,49,49,54,54,49,49,49,59,49,54,49,49,59,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,49,49,49,49,45,49,49,49,49,44,49,45,49,45,49,49,49,45,49,49,45,45,49,49,45, +54,54,54,54,55,54,54,54,55,54,54,54,55,54,55,54,54,55,54,54,49,55,54,54,54,54,54,54,54,54,54,54,54,55,55,54,54,54,55,54,54,54,54,54,54,54,55,54,55,54,55,49,55,54,54,54,59,54,54,54,54,54,54,54,54,54,54,54,49,55,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,55,54,54,54,54,49,54,55,54,54,54,54,49,55,54,54,54,54,54,54,54,54,54,54,54,54,49,50,55,54,54,54,54,54,50,54,49,49,54,54,54,54,49,54,49,54,54,54,49,54,49,54,54,55,49,49,49,54,49,54,49,54,49,54,49,49,54,54,54,49,54,49,54,49,54,54,49,54,54,49,50,49,54,49,54,49,54,49,54,49,54,49,54,49,49,54,54,49,54,49,54,54,54,54,49,54,49,54,54,54,49,54,49,54,54,49,54,54,49,54,49,54,49,54,54,49,54,54,49,49,49,49,49,54,59,49,54,54,49,54,49,59,49,49,49,59,49,49,49,54,49,49,59,49,49,49,49,59,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,45,49,49,49,49,49,44,49,49,49,45,49,49,49,45,49,49,49,45,49,45,49,45,45,45,49,45,45,45, +54,54,55,55,54,55,54,55,54,54,55,54,54,54,54,54,55,54,54,55,54,55,54,54,54,55,54,54,54,55,54,54,55,49,55,55,54,54,54,55,54,55,54,54,55,54,54,54,55,49,59,54,54,55,54,54,55,49,54,54,54,54,54,55,54,54,55,49,59,54,54,55,54,55,54,54,54,54,54,55,54,54,54,54,54,54,54,54,54,54,54,55,54,54,54,54,55,49,54,55,54,55,54,55,55,54,54,54,54,55,54,54,54,54,55,49,54,54,54,54,54,49,54,54,49,54,49,54,54,54,54,55,50,54,55,54,54,54,49,54,55,49,54,54,54,49,49,54,54,54,55,54,54,54,54,54,54,54,54,54,54,49,54,49,54,54,49,54,49,50,49,50,49,54,49,49,54,49,54,49,54,54,49,54,54,49,54,54,50,49,54,49,54,49,49,49,49,49,54,54,49,49,49,54,49,54,49,49,54,49,54,54,49,54,49,49,50,49,49,49,49,49,54,54,54,49,49,49,54,49,49,49,49,49,49,54,49,49,49,49,59,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,45,49,45,49,45,49,49,49,45,49,49,49,49,49,45,45,49,45,45,49,45,45,45,49,45,49,45,45,45,49,45,45,49,49,45, +55,54,54,54,54,54,55,54,54,54,54,54,55,54,54,54,54,54,54,54,54,54,54,55,54,54,54,54,55,54,54,54,54,54,49,54,54,54,54,54,54,54,55,49,54,54,54,54,54,54,54,54,54,49,54,54,54,55,49,54,49,55,54,54,55,54,54,54,55,54,54,54,55,49,59,54,55,55,49,59,54,55,54,59,54,55,55,54,54,55,49,54,54,55,54,54,54,54,54,54,54,54,54,54,54,54,54,55,54,55,54,54,54,54,54,54,54,49,49,54,54,54,54,54,54,54,54,49,54,49,54,49,50,49,49,54,50,55,50,54,49,54,50,49,55,49,54,49,54,49,49,54,49,54,49,54,49,54,54,54,54,49,54,49,54,49,54,50,49,49,54,49,49,49,54,49,49,54,49,54,49,54,54,49,54,54,49,54,49,49,49,54,49,54,49,54,49,54,49,54,49,54,49,54,49,49,54,54,49,54,49,54,49,54,49,54,49,54,49,54,49,54,49,49,54,54,49,54,54,49,54,59,49,59,54,49,59,49,49,49,49,49,59,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,49,49,45,49,49,49,45,49,45,49,45,49,45,49,49,45,49,45,49,49,45,49,45,49,45,45,49,45,49,45,45,49,45,49,45,45,49,45,45,45,45, +54,54,54,54,54,54,54,54,55,54,55,55,54,54,55,54,54,55,54,54,55,54,54,49,55,54,54,55,54,54,55,54,49,55,54,54,54,54,54,55,54,54,54,54,54,54,55,54,54,54,54,55,54,55,54,49,55,55,54,54,59,49,54,54,54,54,54,54,54,54,54,54,54,54,55,54,49,54,54,54,54,54,54,54,54,54,49,55,54,54,54,54,54,49,55,54,55,54,54,55,49,55,54,54,54,55,54,54,54,54,54,55,54,54,55,54,54,54,54,54,54,49,50,54,54,54,49,54,54,54,54,50,54,50,54,54,54,49,54,49,54,54,54,54,49,54,54,54,54,54,54,54,54,54,49,54,54,49,54,54,54,49,54,49,49,54,49,49,49,54,50,49,54,54,54,54,49,49,54,49,49,49,54,54,49,49,54,49,50,54,54,49,54,49,54,54,49,54,49,54,49,54,54,49,54,49,54,49,49,54,49,54,54,49,54,49,54,49,49,54,49,49,49,49,49,49,54,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,45,49,45,49,49,45,49,45,49,45,49,45,49,45,49,45,49,45,45,45,49,45,45,49,45,49,45,45,45,49,45,45,45,45,45,45, +54,55,54,54,55,54,55,54,54,54,54,54,54,54,54,54,54,54,54,54,49,55,54,54,54,49,55,49,55,54,54,54,55,54,54,54,54,55,54,54,54,54,49,55,54,54,54,54,49,54,54,54,54,49,54,54,54,49,49,55,54,54,54,54,54,54,54,54,54,59,54,49,55,54,54,55,54,54,54,54,54,54,54,54,54,54,54,59,54,55,54,49,55,54,54,49,54,54,54,49,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,49,54,54,54,54,54,50,54,54,50,54,50,54,54,54,49,54,50,49,54,54,54,50,54,49,54,49,54,49,49,54,50,54,50,54,49,54,49,54,54,49,54,54,49,54,49,54,49,54,54,49,50,50,50,49,49,54,54,49,50,49,49,54,50,49,49,54,49,50,49,54,49,49,54,49,49,54,49,54,49,49,54,49,54,49,54,49,50,49,54,49,54,49,54,49,54,49,49,54,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,59,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,45,49,49,49,49,49,49,49,45,49,49,45,45,49,49,45,49,45,45,49,45,49,45,45,45,45,45,49,45,45,49,45,45,45,45,45,45,45,45,49,45,45,45,45,45,45,45, +54,49,55,54,54,54,49,55,54,54,54,54,55,54,54,54,54,54,54,55,54,54,54,54,54,55,49,54,54,55,54,54,54,54,54,55,54,49,54,54,54,54,54,54,54,55,54,54,54,54,54,54,54,54,54,54,54,54,54,49,54,49,54,54,55,54,54,54,54,54,54,54,54,54,54,54,55,49,54,55,54,54,55,49,54,54,54,55,49,54,54,54,54,54,54,54,54,54,55,54,54,55,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,49,54,54,54,49,54,54,49,54,54,54,49,54,55,49,54,54,50,50,54,54,54,49,54,54,49,54,54,49,54,54,49,54,49,54,54,54,50,50,54,49,54,49,54,49,54,49,49,50,49,49,49,50,49,49,49,49,49,49,50,49,49,50,50,49,49,49,54,49,54,49,49,50,49,49,49,49,49,54,49,49,49,49,49,49,49,54,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,49,49,49,49,45,45,45,45,49,45,45,49,45,49,45,45,49,45,49,45,45,45,49,45,45,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +55,49,54,54,54,55,49,54,55,54,54,54,54,55,55,54,50,55,50,49,55,54,54,55,54,54,54,50,49,54,54,54,54,50,54,54,54,55,49,54,54,55,55,54,54,54,54,54,55,54,54,54,54,54,55,49,54,55,49,54,54,54,55,54,54,54,55,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,55,55,49,54,55,54,55,49,54,54,49,54,49,54,54,54,54,54,55,49,54,50,54,49,54,54,54,54,49,54,54,50,49,54,50,49,54,54,54,54,49,54,50,54,55,49,50,54,54,49,54,50,54,50,49,54,49,54,54,49,54,50,49,54,54,50,49,54,49,54,49,49,50,49,50,50,50,49,49,49,50,49,50,49,50,50,49,50,49,49,49,50,49,49,50,49,49,50,49,50,50,49,50,49,50,49,54,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,49,49,49,49,45,49,45,45,49,49,49,49,49,49,49,45,49,45,45,45,45,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,49,45,45,45,45,45,45,45,45,45, +49,55,54,54,54,54,55,54,54,54,50,55,50,49,49,55,50,54,49,54,49,55,54,49,54,50,54,54,54,54,54,49,50,54,49,55,54,54,54,54,54,54,54,50,54,55,54,54,54,49,55,50,54,54,54,54,54,49,55,55,54,54,49,54,54,54,54,55,54,55,54,59,49,55,54,54,54,55,54,54,54,54,54,54,54,54,54,54,49,49,49,49,49,55,49,54,54,54,54,55,54,54,54,54,54,54,50,54,50,54,50,55,54,54,54,50,54,54,54,54,49,54,54,54,54,49,54,49,54,49,54,49,49,54,49,49,54,49,54,54,49,54,54,49,54,49,49,54,49,54,49,50,50,49,49,50,50,49,54,49,50,49,49,49,49,49,50,49,49,50,49,50,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,50,49,50,49,49,50,49,49,49,49,49,50,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,45,45,49,49,49,45,49,45,49,45,49,49,49,45,49,45,49,49,49,49,49,49,45,49,49,49,45,49,45,49,49,49,49,49,45,45,45,45,45,45,45,45,45,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +54,54,55,54,55,55,49,55,54,54,49,55,49,55,54,49,55,54,55,54,54,54,49,55,49,55,54,54,55,50,54,54,54,54,54,49,55,54,55,54,54,54,50,54,50,49,55,54,54,54,55,49,54,54,55,49,55,55,49,50,49,55,54,54,55,54,54,49,54,54,54,54,54,54,49,54,54,49,55,49,55,54,54,49,49,55,49,54,54,54,55,54,54,54,54,54,54,54,49,54,49,55,54,54,49,54,54,49,54,49,54,49,50,54,50,49,50,50,50,54,50,54,54,54,50,50,49,50,54,54,54,54,54,50,50,54,54,54,49,50,50,50,49,50,50,50,50,50,50,50,49,50,49,50,49,50,49,50,50,50,49,50,50,50,49,50,49,49,50,49,50,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,50,49,45,50,49,45,50,49,49,49,50,45,50,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,49,49,45,49,49,45,49,49,45,45,49,49,49,49,49,45,49,45,49,49,45,49,45,49,49,45,45,49,45,45,45,45,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,39,45,45,45, +54,54,49,55,49,49,54,54,54,55,55,49,55,49,55,49,55,49,54,55,49,55,49,49,55,50,49,50,49,55,50,55,50,50,49,55,49,50,49,54,55,50,55,49,54,54,49,54,55,49,49,54,55,49,49,55,49,49,55,49,49,54,55,54,49,54,54,54,54,55,54,55,54,55,54,55,49,54,49,54,54,54,55,54,54,54,54,54,55,49,49,54,49,54,55,55,54,54,54,55,49,50,54,55,54,50,54,54,54,54,50,54,50,50,54,50,54,54,50,50,49,50,49,50,49,50,50,49,50,50,50,49,50,49,50,49,50,49,50,50,49,49,50,49,49,50,49,50,45,50,50,49,50,50,49,50,49,49,49,49,49,50,45,49,49,49,50,49,45,49,49,49,49,49,49,49,49,50,45,49,49,49,49,49,49,50,50,45,49,49,49,49,49,45,50,45,49,49,45,49,45,50,45,50,45,50,45,49,49,45,49,45,49,45,45,49,45,45,45,45,49,45,45,45,49,45,45,45,45,45,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,44,45,45,45,45,45,45,45,45,45,45,45,45,45,45,44,45, +55,55,54,55,55,55,55,55,55,49,55,49,54,54,55,49,55,49,55,49,55,49,55,49,49,49,54,55,55,49,50,50,49,55,49,54,49,54,50,50,49,49,50,54,49,54,54,49,54,54,54,54,49,55,55,49,54,55,49,55,54,49,49,54,54,54,54,55,49,54,49,54,54,49,54,54,54,55,54,55,49,55,49,55,49,55,49,54,49,55,49,54,55,49,49,49,54,54,49,49,50,49,50,49,49,49,50,50,49,50,50,49,49,49,49,50,49,49,49,50,50,50,50,50,50,49,50,49,50,49,50,49,50,50,50,50,49,49,49,50,50,50,50,50,50,49,50,50,50,49,50,49,49,49,50,45,50,49,49,49,50,49,50,49,50,45,50,50,50,45,50,45,49,49,49,45,45,45,49,49,45,49,45,49,45,45,45,50,45,45,45,45,49,45,49,45,45,50,45,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,44,45,45,45,45,45,45,45,45,45,45,45,45,45,44,45,45,45,39,39,39,45,39, +49,49,55,49,55,49,55,49,55,50,49,49,55,55,49,55,49,49,55,49,49,50,49,50,55,49,54,49,49,54,49,49,55,49,54,50,54,49,54,54,50,49,54,49,55,50,49,55,54,49,54,49,55,49,49,55,49,55,49,49,54,54,55,55,54,54,49,49,55,55,54,49,55,54,54,49,55,54,49,49,55,49,49,49,49,49,49,49,54,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,50,50,50,49,50,49,49,49,49,49,45,50,49,49,49,50,45,50,45,50,50,45,50,45,50,50,50,45,45,50,45,50,45,50,45,50,45,50,45,46,49,49,45,50,45,45,50,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,40,45,45,45,45,45,45,45,40,45,45,40,45,45,45,45,45,45,45,45,45,45,45,40,45,45,39,45,39,45,39,45,45,45,45,45,45,45,45,45,45,45,45,45,39,45,45,45,45,40,45,45,45,45,45,45,45,44,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,44,45,45,45,45,45,45,45,44,45,45,45,44,45,45,39,45,45,45,44,39,44,39,45,44,39,45,39,45,44,45,45,39,39,45,45,45,44,45,44, +49,49,55,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,55,49,49,55,50,54,54,49,50,49,50,49,50,49,50,50,54,49,54,49,54,49,49,54,49,49,54,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,55,49,55,49,49,49,54,54,49,49,55,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,49,45,49,49,49,49,45,49,49,49,45,45,49,45,50,45,49,49,45,50,45,50,45,49,49,45,50,45,49,49,45,40,50,40,50,45,45,45,50,40,45,45,45,45,45,40,45,45,45,40,45,45,45,45,45,45,45,45,40,45,45,40,45,40,40,39,45,45,45,45,45,40,45,40,45,45,45,39,45,39,39,45,45,39,45,39,40,45,45,39,45,39,39,45,45,39,40,39,45,45,39,45,45,45,45,45,39,45,45,45,39,45,39,45,45,45,45,45,39,45,45,39,45,45,39,39,39,45,39,45,39,45,44,44,44,45,45,45,45,44,45,45,45,45,45,45,45,44,45,44,45,45,45,44,45,45,39,39,45,45,45,44,45,39,39,45,44,45,45,44,45,45,44,39,45,39,39,39,45,45,39,44,44,39,39,44,39,44,39,44,39,44,39,44,39,44,45,39,39,44,44,39,39,39,39,39, +49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,50,49,50,49,50,50,50,49,50,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,55,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,49,49,49,49,45,49,49,45,49,49,45,45,49,49,45,45,49,40,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,40,49,45,45,45,45,45,45,45,45,45,40,45,45,45,45,40,45,45,45,39,45,45,45,40,45,45,45,45,39,45,45,45,45,45,45,40,40,40,39,45,45,40,45,45,39,45,39,45,45,40,39,45,45,45,40,39,45,45,39,45,45,45,39,45,45,39,45,39,45,39,45,39,45,39,44,45,45,45,39,45,45,39,45,39,45,39,39,45,39,39,45,45,39,45,45,39,39,45,39,45,45,45,45,45,44,45,45,45,45,44,45,45,45,45,45,45,45,45,45,45,44,45,45,45,44,45,44,39,44,44,45,39,44,44,45,39,44,45,39,44,39,39,44,39,44,44,44,44,39,39,39,39,39,39,44,39,39,39,39,39,39,39,44,39,39,39,39,39,39,39,44,39,39,39,39, +49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,50,50,49,50,49,50,49,50,49,49,49,49,49,50,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,49,49,49,49,49,49,49,49,49,49,45,49,49,49,49,49,49,49,49,49,45,49,45,45,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,40,45,45,45,45,45,45,45,45,45,45,40,39,45,45,40,45,45,45,45,45,40,45,45,45,45,45,40,39,45,45,45,39,45,40,40,45,45,40,40,40,39,45,39,40,39,40,40,45,39,40,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,45,39,39,39,45,39,39,39,39,39,39,39,45,39,44,45,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,45,39,44,45,39,44,44,44,45,44,39,45,44,44,44,44,44,44,45,44,44,44,39,44,45,44,39,44,45,39,44,39,44,39,44,39,39,39,44,39,44,39,39,34,39,44,34,44,44,44,44,39,44,44,34,39,39,44,44,44,39,44,39,44,44,44,44,39,44,34,39,39,44,34,34, +49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,50,50,49,50,50,49,49,49,49,49,49,50,49,50,50,49,49,49,49,49,49,49,49,49,45,49,49,49,49,49,45,49,49,49,45,49,45,49,45,45,49,45,45,45,49,45,45,45,49,45,45,45,45,45,49,45,45,45,45,45,45,45,45,45,45,45,39,40,39,45,40,45,40,40,40,40,39,40,39,40,45,44,45,39,45,40,45,39,40,40,45,39,39,40,39,45,39,39,39,40,45,45,40,45,39,39,40,39,40,39,39,45,39,39,45,39,40,45,39,39,40,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,44,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,44,39,39,44,39,39,44,45,39,44,44,44,44,39,44,44,44,44,44,39,39,44,39,39,44,39,44,39,45,39,39,44,44,39,44,44,44,44,44,44,39,39,34,44,44,39,44,34,44,34,34,34,34,34,34,34,44,34,44,34,34,34,44,34,34,34,34,34,34,39,34,34,34,34,34,34,34, +49,45,49,49,45,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,40,50,49,40,45,50,45,50,45,50,45,45,45,45,45,49,45,49,45,45,45,45,45,49,45,45,45,45,45,45,45,49,45,45,45,45,45,45,49,45,45,45,45,45,45,45,45,40,45,45,45,39,45,40,40,40,45,39,39,40,39,39,39,39,39,40,39,40,39,39,39,40,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,44,39,39,39,39,39,39,39,39,39,39,39,39,39,44,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,44,39,39,39,39,39,39,39,39,39,39,34,39,39,34,39,39,39,34,39,34,39,34,39,39,39,39,44,34,39,39,39,39,39,39,34,39,39,39,39,39,44,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,34,34,39,34,39,39,39,39,44,39,39,39,44,39,39,39,44,44,44,44,44,39,44,44,44,45,45,39,45,39,44,39,44,39,44,39,39,39,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34, +49,49,45,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,40,49,49,49,49,40,49,49,40,49,49,49,45,40,50,45,45,45,50,40,45,40,40,45,40,40,45,40,39,40,39,40,40,40,40,40,39,40,40,40,40,40,45,45,45,40,45,45,45,45,45,45,40,40,45,44,45,45,40,45,45,44,45,40,40,40,39,39,39,39,39,39,39,39,39,39,39,39,34,39,39,34,39,39,39,34,39,39,39,39,39,39,39,39,39,39,39,34,39,39,39,39,34,39,34,39,39,39,39,34,39,39,39,34,39,39,39,39,39,39,34,39,34,39,34,39,34,39,39,39,34,39,39,39,39,39,34,39,39,34,39,34,39,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,39,34,34,34,34,34,34,34,34,34,39,34,34,34,34,39,39,39,34,34,34,34,34,34,34,34,34,34,39,34,39,34,34,39,39,34,34,34,34,34,34,39,34,34,34,34,34,34,34,39,34,34,39,34,39,39,39,39,39,39,39,34,44,34,39,39,39,39,34,34,34,39,34,39,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,32,34,34,32,34,34,34,34,34,34,34,32,34,34,34,32,34,34,34,34,34,34,34,34,34, +49,45,49,45,45,49,45,49,45,45,49,49,40,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,45,45,45,45,39,40,39,39,39,39,39,39,34,34,34,34,34,34,34,29,34,29,29,28,34,29,33,28,28,28,33,28,28,28,28,28,28,28,28,28,28,28,33,28,28,28,28,28,28,28,28,28,28,28,28,32,34,28,28,32,28,28,32,28,28,32,32,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,18,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,18,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,17,28,17,28,17,28,17,28,17,17,17,28,17,28,17,17,17,28,17,17,17,28,17,17,17,17,17,12,28,17,12,28,17,12,28,17,17,17,17,12,17,12,17,17,12,17,17,12,28,17,17,17,17,28,17,12,28,17,17,28,17,17,17,17,17,11,11,10,12,11,10,10,12,10,10,10,12,12,12,12,17,12,12,12,10,12,11,11,10,11,10,12,11,12,12,17,17,17,28,17,28,28,17,28,17,28,28,28,28,28,28,28,28,28,28,29,29,32,32,34,34,28,34,34,32,29,32,32,34,32,29,28,34, +49,49,45,49,49,49,49,49,49,49,49,49,49,49,49,45,40,39,39,34,34,34,29,29,28,28,28,28,12,17,17,12,12,12,12,11,11,10,10,11,10,4,11,10,12,10,4,11,12,10,11,10,10,4,10,4,10,4,10,4,10,4,10,4,10,4,11,10,12,11,12,11,17,12,11,17,12,17,12,12,17,11,4,10,4,10,10,4,11,10,4,10,11,10,4,11,10,4,11,10,4,11,10,10,4,11,10,10,10,4,10,4,11,4,10,10,4,10,10,10,4,4,10,4,10,10,4,10,11,4,10,10,4,10,10,10,4,10,4,10,4,4,10,4,10,4,10,4,12,10,4,10,4,10,4,12,4,10,10,10,4,10,4,10,4,10,4,10,4,10,10,4,10,10,4,10,4,10,4,10,10,4,10,4,12,10,4,4,10,4,10,4,10,4,10,4,10,4,4,11,4,10,10,4,4,10,4,4,10,10,4,10,11,4,10,10,12,4,10,4,11,4,10,5,10,4,11,11,10,4,10,10,4,10,4,11,10,10,4,10,4,10,12,17,10,10,12,17,12,17,11,17,17,17,17,17,17,17,17,17,12,10,10,10,10,10,11,10,4,10,10,10,11,4,10,10,10,10,5,10,11,10,10,11,10,10,10,10,10,10,17,17,17,13,28,17,29,29,28,28,28,28,28,32,29,28,34,28, +45,45,49,45,40,40,40,40,39,29,29,28,17,12,10,4,10,4,10,4,4,4,4,4,4,4,4,4,10,4,4,10,4,10,4,10,4,10,11,4,10,11,10,10,4,10,11,4,10,11,4,10,4,11,10,11,4,10,4,11,10,11,10,11,10,11,11,17,17,12,17,12,12,17,12,11,17,12,17,17,12,18,17,12,11,10,11,10,10,10,10,11,10,4,11,10,11,10,10,11,10,10,4,10,11,10,4,11,4,10,11,10,10,11,10,4,10,10,4,10,4,10,10,10,12,10,10,10,5,10,10,4,12,10,4,10,12,10,10,10,12,10,10,10,12,10,10,10,10,10,12,10,10,5,10,10,10,12,4,12,10,12,10,10,10,12,10,12,10,4,10,12,10,4,12,10,10,10,10,12,4,10,10,10,4,10,10,12,10,12,4,11,10,12,10,10,10,11,10,10,10,11,4,10,10,10,10,11,10,11,10,5,10,10,4,10,10,11,12,11,10,4,11,10,11,10,10,10,4,11,10,10,11,10,10,10,10,10,10,4,28,32,17,17,12,17,17,11,17,12,12,12,12,12,12,17,17,12,17,17,17,17,12,11,10,11,10,10,11,12,10,11,10,10,11,4,12,10,10,11,10,4,11,10,4,11,10,12,10,12,12,12,12,17,17,18,17,17,29,28,28,28,28,28,28,28,28,32, +45,45,40,35,40,40,29,29,33,18,17,12,12,12,10,12,10,10,4,10,10,10,11,10,10,12,11,10,4,11,10,10,11,4,11,4,11,4,10,11,4,10,11,4,10,11,4,10,11,4,10,11,11,4,10,4,10,11,10,10,11,10,10,11,17,28,17,17,11,17,17,17,17,12,11,11,17,17,17,17,17,17,12,17,28,11,12,10,11,10,11,10,10,11,10,12,4,10,11,4,10,11,10,11,10,10,10,4,11,10,10,12,10,4,10,10,10,10,12,10,12,4,12,10,4,10,12,10,10,10,12,10,10,12,10,10,10,12,10,10,4,10,10,4,10,10,12,10,12,10,12,10,12,10,12,10,12,10,12,10,5,10,12,12,10,10,4,10,12,10,12,10,10,12,10,4,12,12,4,10,12,10,12,10,12,10,12,10,4,10,10,10,4,10,10,4,10,10,10,10,10,10,12,10,10,12,10,10,10,5,10,10,10,10,12,10,10,10,10,10,10,12,10,11,4,10,11,10,10,10,11,10,10,11,10,12,4,4,10,44,45,32,10,17,17,11,17,12,17,17,17,17,17,17,17,17,17,17,12,17,12,12,28,17,12,12,11,11,10,11,10,4,11,10,11,10,11,10,11,4,10,10,5,10,10,10,10,10,12,12,12,17,18,17,17,17,28,17,17,28,28,28,28,28,28,28,28,28, +40,40,40,40,39,40,29,29,29,29,18,17,12,12,12,10,12,4,10,12,4,10,10,4,12,10,10,10,10,10,12,4,10,10,10,10,5,11,4,10,10,11,10,10,11,10,10,11,5,10,4,10,10,10,11,10,4,10,4,11,5,11,11,28,17,11,11,11,11,240,240,240,11,11,33,33,12,4,240,240,240,11,11,11,12,28,17,12,11,11,10,11,10,4,10,10,11,11,10,10,11,4,10,10,4,10,12,10,10,12,10,10,10,12,10,12,10,12,10,5,10,12,10,12,10,12,10,5,10,12,10,12,10,12,12,12,12,5,12,12,12,12,12,12,10,12,4,12,10,12,12,10,12,12,10,12,10,12,10,10,12,10,10,12,10,12,10,12,12,10,10,12,10,5,10,12,10,10,12,10,12,10,10,12,10,12,10,10,12,10,12,10,12,10,10,12,10,10,10,12,10,4,10,12,4,10,5,10,12,10,12,10,4,12,10,10,12,4,12,11,4,10,10,10,11,10,4,11,11,11,10,11,4,10,10,240,17,44,59,45,12,10,12,17,12,12,17,11,4,240,240,240,240,240,240,240,240,4,17,17,17,17,12,17,17,17,10,10,11,10,11,10,10,11,10,11,10,10,10,10,10,10,10,10,10,12,12,12,12,17,17,17,17,17,28,17,28,28,17,28,17,28,28,28,28,28,28,28, +40,40,35,40,39,39,39,29,29,29,33,18,28,12,12,12,12,12,12,10,10,12,10,10,10,10,4,12,10,12,4,10,10,5,10,4,10,4,10,10,4,12,10,10,5,10,10,4,10,11,10,11,5,11,4,10,11,10,11,10,11,17,28,12,11,11,4,4,11,49,94,113,212,229,235,228,228,212,105,78,44,10,4,4,11,17,28,17,17,10,11,10,11,10,11,11,10,10,10,12,10,10,12,10,12,10,10,10,5,10,12,4,12,10,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,12,12,12,12,12,12,12,12,10,12,12,12,12,12,10,12,10,12,10,12,12,4,12,12,12,4,12,12,12,10,5,10,12,10,12,4,12,12,10,5,10,12,12,10,10,12,12,10,10,4,10,12,10,12,10,10,12,10,12,10,10,12,10,12,4,10,10,10,10,4,10,4,10,11,4,11,44,49,60,34,10,17,12,17,12,17,11,4,4,17,49,74,85,94,94,89,78,65,33,4,240,11,17,17,12,12,28,17,12,10,11,10,12,10,10,10,4,10,10,10,10,10,12,12,12,12,12,17,12,17,17,13,17,17,17,29,17,29,17,28,28,28,17,28,28,28,28,28,28, +39,40,39,39,39,39,19,39,18,29,29,29,28,28,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,5,12,10,12,12,10,12,12,5,12,10,4,10,10,5,10,10,10,10,10,4,11,10,10,11,4,11,10,4,28,17,11,17,4,4,49,103,255,236,229,118,107,97,96,96,102,109,228,229,237,236,93,33,4,12,11,17,34,28,11,11,10,11,10,4,10,12,11,11,12,10,10,12,10,12,12,12,12,12,12,12,12,5,12,12,12,5,12,12,12,12,12,5,12,12,12,12,5,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,5,12,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,12,12,5,12,12,12,12,10,12,12,12,12,10,12,5,12,10,12,5,12,12,5,12,12,4,12,10,12,4,10,12,10,4,10,12,10,10,4,10,10,11,10,11,4,10,54,49,17,10,10,12,12,17,12,11,4,17,66,113,237,236,233,227,227,227,227,235,255,255,230,74,28,4,4,17,17,17,12,28,17,12,11,11,10,10,12,10,12,12,12,12,12,12,17,17,17,17,17,17,17,17,17,17,13,28,17,29,17,29,28,17,28,28,28,28,28,28,28,28, +40,39,40,39,39,39,39,29,39,19,29,29,29,28,28,13,12,12,12,12,5,12,5,10,10,10,10,5,10,5,4,10,5,5,12,4,5,5,5,10,4,10,10,4,4,4,4,10,4,5,4,10,10,4,11,4,10,4,12,28,17,11,18,4,33,83,237,229,114,63,44,39,39,33,33,28,28,33,33,44,90,235,235,212,62,4,11,17,11,34,17,10,11,11,11,12,11,4,10,5,10,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,5,12,12,12,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,12,12,5,5,12,10,12,10,4,12,10,4,10,10,4,4,11,34,28,12,12,12,17,11,17,17,4,12,49,102,235,234,116,106,101,101,101,101,106,106,116,119,229,238,230,74,33,4,12,17,17,12,17,17,4,10,12,12,12,12,12,12,12,12,17,17,17,18,17,13,18,17,28,28,29,17,17,17,17,18,28,17,28,28,28,28,28,28,17,28,28,28, +39,40,39,39,39,39,39,39,39,39,29,29,18,18,12,12,5,12,7,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,8,20,8,9,20,14,20,9,14,14,12,10,12,4,11,4,10,10,11,17,28,11,11,240,44,110,255,228,106,63,4,240,11,11,11,11,11,11,11,4,240,44,64,109,235,237,96,4,11,17,12,28,28,5,10,10,10,10,10,12,12,12,4,12,4,5,5,5,5,5,12,5,5,5,5,5,5,5,12,5,5,5,5,5,5,5,5,12,5,5,5,5,5,5,5,5,5,5,5,5,12,5,12,5,12,5,12,12,5,12,12,5,12,12,5,12,12,5,5,12,5,5,12,12,5,5,12,5,12,12,5,12,12,12,12,5,12,5,12,12,10,12,5,12,5,12,5,12,4,12,5,12,5,12,12,12,12,5,12,5,5,12,5,5,12,4,5,12,5,5,12,5,12,5,12,12,12,5,12,12,10,5,5,12,12,10,12,12,10,12,10,11,10,11,12,10,10,17,10,12,12,17,240,33,64,119,119,106,64,59,59,49,44,44,49,59,65,69,95,115,117,235,255,105,39,11,12,17,12,17,28,17,12,17,12,17,17,12,17,17,18,12,18,17,17,17,17,17,18,28,13,17,18,29,29,17,17,28,28,28,29,28,28,28,28,28,17,28,28, +39,40,39,40,39,39,40,19,6,20,20,20,20,22,22,22,22,22,23,23,24,24,24,24,24,24,31,31,25,31,138,24,31,31,138,31,138,31,138,31,138,31,31,31,31,143,31,31,143,24,12,4,4,11,10,4,11,12,28,11,11,4,49,226,235,109,119,64,90,103,59,240,4,18,12,18,11,4,28,68,68,59,234,101,111,255,68,240,12,17,17,34,17,12,12,12,12,12,12,5,12,13,13,13,13,13,13,13,19,12,13,13,13,13,13,13,13,13,13,13,13,13,19,13,13,19,6,13,19,13,19,13,19,13,13,19,13,19,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,13,13,13,13,13,12,13,13,13,12,13,12,13,13,13,13,12,13,13,12,13,13,13,12,6,12,13,12,13,12,13,12,13,12,12,13,12,12,13,12,5,13,12,12,12,5,12,5,5,12,12,5,5,12,4,10,5,5,5,4,10,10,4,10,4,11,10,4,10,12,17,12,17,17,4,44,96,227,117,117,64,55,240,4,12,5,12,12,12,5,240,44,212,237,226,117,236,230,49,12,12,17,12,17,28,12,12,17,17,17,17,17,28,17,17,17,17,18,28,17,28,17,17,17,29,17,17,17,28,28,28,28,17,17,17,28,28,17,28,28,28,28, +39,40,39,39,39,40,20,164,164,2,3,129,137,142,138,138,131,131,130,131,131,122,131,122,130,123,123,122,122,122,138,122,122,130,138,122,138,122,138,130,138,138,130,130,130,130,138,26,138,31,9,10,10,10,4,11,10,17,12,12,4,11,228,237,113,90,212,96,61,49,68,97,29,5,40,18,12,61,66,40,44,101,82,64,106,118,227,60,240,11,11,28,28,17,17,17,12,12,5,13,20,23,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,15,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,15,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,23,23,23,23,23,23,23,22,22,23,22,23,22,23,22,23,22,23,22,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,20,13,5,12,10,10,10,4,10,4,12,12,11,17,11,240,45,96,116,112,95,235,44,44,91,28,4,17,18,17,5,240,65,102,59,63,236,116,114,237,237,44,4,12,17,12,17,28,28,17,18,28,28,28,28,17,29,29,28,29,17,29,18,29,28,28,28,17,29,28,29,28,28,28,28,28,29,28,28,28,28,18,17,28, +39,39,40,39,40,35,24,185,231,223,187,179,187,186,171,169,126,147,134,144,134,134,146,134,131,131,131,131,131,131,131,146,123,123,123,123,123,123,123,122,123,123,123,123,123,123,123,130,25,25,22,10,4,11,10,4,12,12,11,12,240,93,237,212,235,82,4,240,99,93,11,55,93,65,18,44,66,59,11,70,118,33,240,49,116,229,233,227,39,4,17,12,17,12,4,10,12,4,12,22,24,25,31,138,138,138,138,130,131,138,142,146,146,138,146,142,138,138,138,138,137,138,26,122,27,26,27,27,130,129,26,26,129,120,120,120,120,120,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,3,3,3,3,3,2,2,2,2,3,2,2,2,2,2,2,2,2,2,16,16,16,16,16,16,16,16,16,24,16,16,24,23,24,24,24,24,24,16,16,16,24,16,24,24,24,24,16,24,24,24,24,24,24,24,16,16,24,24,24,24,24,23,24,24,24,24,24,24,24,24,13,4,12,10,10,10,12,10,17,10,10,12,4,33,90,116,116,212,62,44,211,66,33,93,49,240,4,240,34,99,97,44,62,119,96,102,255,228,237,229,44,4,17,12,12,17,28,28,17,28,28,28,28,29,17,28,17,28,28,18,17,17,18,18,17,29,17,29,17,29,17,28,28,28,17,28,17,28,17,17,28,17, +39,39,39,39,40,35,151,1,160,255,168,124,147,132,131,123,131,131,123,131,131,123,123,122,123,123,123,122,123,122,122,122,130,122,122,130,122,138,130,122,122,130,130,130,130,130,130,138,25,31,9,4,11,5,11,10,17,11,12,240,44,234,101,117,237,65,39,29,4,105,229,59,44,70,82,65,59,49,113,237,18,18,44,44,114,235,95,117,109,11,4,12,17,17,12,10,10,4,13,31,25,138,26,130,131,131,132,134,147,147,169,168,174,175,170,177,179,179,186,186,187,186,187,188,188,187,188,190,191,191,191,191,191,218,219,219,220,219,219,222,221,221,221,221,221,221,220,220,220,220,219,218,219,219,216,204,205,204,209,191,191,190,191,190,190,185,185,185,183,186,183,186,167,167,167,161,167,161,161,161,161,160,155,152,155,152,152,152,144,146,146,146,131,146,146,146,130,146,130,131,123,138,122,138,130,122,138,26,122,138,138,26,26,138,26,26,26,26,26,26,25,16,24,25,25,31,24,5,12,4,5,10,4,12,10,12,12,17,10,68,106,117,237,107,59,18,61,255,211,90,102,59,45,82,108,103,97,229,230,11,63,59,232,232,227,237,105,39,4,10,11,17,28,28,18,28,29,28,28,28,28,29,29,29,28,28,28,29,17,28,29,17,29,17,17,28,28,28,28,28,28,28,28,28,28,28,17,28, +39,39,39,39,39,19,30,27,137,255,129,129,26,122,122,138,138,138,138,138,26,26,26,26,26,26,26,138,25,26,138,26,26,138,26,26,26,138,138,138,26,138,26,138,26,138,138,25,24,143,9,4,10,4,4,12,11,12,12,11,114,235,49,33,114,75,55,40,18,240,93,237,103,90,69,97,103,236,255,240,5,29,70,59,114,33,44,106,119,66,240,11,12,28,12,10,12,10,13,27,143,138,138,123,131,131,131,132,131,131,131,132,131,131,124,124,124,124,124,124,132,132,132,139,134,132,134,147,147,147,152,169,168,168,161,168,168,172,172,172,172,186,186,186,186,185,186,185,185,188,188,188,188,188,188,191,191,191,191,205,205,205,205,216,216,218,218,218,220,223,223,221,216,191,188,188,188,188,188,186,187,188,187,187,187,187,187,186,186,184,186,179,184,184,172,172,175,175,171,171,175,171,171,169,169,169,147,134,134,132,139,132,132,139,139,132,132,132,131,131,132,139,131,26,138,25,25,12,5,12,10,10,10,17,12,12,17,240,49,101,116,106,227,227,95,65,240,59,255,255,237,113,108,212,237,255,255,231,240,18,82,69,238,118,116,118,238,72,12,11,12,17,28,29,28,28,12,12,12,12,12,12,17,18,29,19,34,34,29,34,29,34,29,29,34,29,34,28,28,28,28,28,28,28,28,28,28,28, +34,39,39,39,39,39,39,23,179,155,9,25,138,25,25,24,16,24,16,16,24,16,24,24,24,24,16,24,16,24,16,24,24,24,16,24,24,16,24,16,24,16,24,24,25,16,25,24,24,143,13,10,4,10,10,12,12,12,240,62,228,102,18,240,66,93,72,74,5,18,240,66,255,228,228,119,237,255,240,4,40,45,82,82,103,240,12,59,117,119,18,4,11,17,17,5,12,4,13,143,138,138,122,122,122,123,131,131,131,134,131,144,131,131,131,139,139,139,134,131,139,139,132,139,132,131,132,132,132,132,131,124,131,124,124,124,124,124,124,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,124,140,169,175,177,175,168,135,126,124,124,124,121,121,121,121,121,121,121,121,121,121,121,121,124,123,124,123,124,123,124,123,123,124,131,131,131,131,132,131,131,132,131,131,131,132,131,131,131,131,131,131,132,134,122,26,138,25,12,10,10,4,4,12,17,12,17,12,17,91,107,83,17,64,235,106,96,5,4,63,237,237,255,255,255,238,255,88,240,5,67,97,102,212,59,95,116,119,212,49,4,12,10,28,17,4,10,10,10,4,4,13,14,13,13,18,17,12,13,18,29,34,34,34,39,39,34,34,32,34,32,32,32,32,32,28,32,28,28, +29,34,34,34,39,40,29,8,192,161,16,24,24,24,24,24,23,16,23,24,16,23,16,16,24,16,23,24,16,16,23,24,16,16,23,24,16,23,24,24,24,24,24,16,24,24,16,24,24,143,8,4,10,12,12,17,11,12,4,108,234,49,4,4,33,110,93,99,29,240,5,59,235,237,229,232,255,113,34,4,4,70,101,102,68,240,17,34,63,112,72,240,11,12,17,12,5,12,12,143,138,122,138,122,123,123,123,123,123,123,131,131,131,131,131,131,131,131,144,131,139,139,139,131,139,139,139,139,139,139,139,131,139,139,139,139,139,139,139,139,139,146,134,139,139,139,139,139,139,139,139,139,131,134,139,139,139,131,131,131,131,131,139,131,131,131,131,131,131,131,131,123,123,123,134,152,168,171,171,171,169,168,147,152,132,131,123,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,123,131,123,131,123,131,131,123,131,123,123,123,123,123,122,122,123,122,122,131,123,26,138,31,7,5,10,12,10,12,17,12,12,240,60,102,103,17,240,17,236,235,117,4,240,97,238,229,232,232,255,255,55,240,12,12,112,227,117,70,11,63,106,115,234,92,12,10,12,17,28,10,11,4,10,10,13,30,24,24,23,24,22,22,20,20,13,13,13,13,12,29,39,39,34,34,34,34,34,34,32,34,32,32,32, +34,34,29,29,34,29,29,19,183,36,31,25,24,24,24,24,24,23,16,23,23,23,23,23,23,23,16,23,23,23,24,23,23,24,24,23,24,24,24,24,24,16,24,24,24,24,24,24,25,25,13,4,11,5,17,12,12,240,49,119,91,33,4,11,4,99,107,110,55,33,99,98,69,255,255,255,212,63,110,72,34,107,106,114,39,4,12,17,44,106,114,4,11,12,28,17,10,12,5,143,130,138,138,122,122,122,122,123,123,123,123,123,123,123,122,123,123,123,123,123,123,123,123,131,123,131,123,131,123,131,131,131,131,131,131,131,131,131,131,131,131,144,146,139,131,139,131,139,146,131,131,131,131,131,146,131,123,131,131,123,131,123,123,131,123,123,123,123,131,123,123,123,131,123,123,123,122,122,122,122,131,144,152,169,169,168,169,152,134,131,124,131,123,123,122,122,123,122,123,122,123,122,123,122,122,122,122,122,122,122,122,122,138,138,138,138,138,26,138,26,26,26,138,26,138,138,25,5,12,5,4,12,17,17,12,10,10,83,101,65,4,17,240,110,255,237,28,39,83,229,230,237,238,228,114,68,18,240,33,237,238,235,4,10,54,66,107,116,110,45,4,17,10,32,10,10,11,10,10,13,24,24,23,24,16,16,23,24,23,16,23,22,22,14,13,12,39,39,34,39,34,34,34,34,34,34,34,32, +29,29,29,29,29,29,29,20,15,48,167,3,31,24,24,24,23,24,23,24,24,24,24,24,24,24,24,24,24,24,16,24,24,24,24,24,24,16,24,24,24,24,24,24,24,24,24,24,24,138,13,4,5,4,17,12,12,240,93,109,59,18,11,18,240,55,114,109,97,65,99,102,110,105,88,105,99,111,103,82,62,117,112,102,4,11,17,12,28,63,112,49,240,12,28,12,12,5,12,31,138,138,130,130,122,122,122,123,122,123,122,122,123,123,123,123,123,123,123,123,123,123,123,122,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,122,123,123,122,123,123,123,123,123,123,122,122,122,122,138,122,122,122,122,123,122,123,122,123,122,123,122,123,123,122,123,122,122,122,122,138,122,26,138,146,152,152,169,152,152,144,144,131,131,122,122,138,122,138,122,138,122,138,122,122,122,138,122,138,138,138,31,24,24,24,24,24,24,24,138,138,25,138,138,24,4,5,12,10,12,17,17,12,4,34,102,97,17,5,17,240,90,255,235,96,97,97,109,255,232,237,237,110,96,102,70,92,255,255,105,240,12,28,59,69,101,116,67,4,12,12,28,12,10,4,12,4,13,24,24,24,24,23,23,16,23,16,23,23,23,23,22,22,14,19,45,39,39,39,39,34,34,34,34,34,34, +33,29,29,29,29,29,18,35,15,79,255,1,16,31,24,24,24,24,24,24,24,24,24,16,24,24,24,24,24,24,24,24,16,24,24,16,24,24,24,24,24,24,24,25,24,24,24,24,138,31,7,10,10,12,17,12,5,11,114,96,29,12,12,12,4,33,93,103,117,70,64,228,34,240,5,240,12,63,111,59,111,111,106,49,29,40,11,17,17,32,107,84,240,17,17,28,5,12,12,25,138,130,138,122,122,122,122,123,146,142,146,152,146,153,146,146,153,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,131,142,131,131,138,131,123,131,122,123,131,130,123,130,122,122,122,122,122,122,122,122,122,26,122,122,138,122,130,122,130,122,122,122,122,122,138,122,122,122,122,138,26,26,26,138,24,16,16,23,23,16,24,143,153,168,171,148,131,122,122,122,122,26,138,138,138,138,138,138,138,26,26,138,138,138,24,25,31,25,138,25,138,25,138,138,16,10,12,10,5,12,17,12,12,4,66,92,49,240,17,17,4,44,236,115,67,97,234,65,240,4,10,55,232,229,83,62,212,255,238,33,4,17,11,28,59,69,107,102,29,10,12,17,17,5,10,10,4,13,24,23,16,23,16,24,23,16,23,16,23,23,23,22,22,15,19,45,44,44,44,44,39,34,34,34,34,34, +28,29,28,29,29,29,18,29,24,9,255,210,3,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,24,25,24,24,24,24,24,24,25,25,138,13,4,4,12,12,12,4,39,112,68,28,11,11,18,5,44,93,102,101,109,97,40,18,39,52,41,41,18,49,102,106,103,103,70,40,28,10,11,17,18,101,104,240,12,12,28,12,12,5,31,138,130,122,122,122,122,130,138,143,143,25,138,27,25,143,143,27,138,27,31,138,143,27,143,143,138,138,138,143,143,143,143,143,143,143,143,151,146,151,146,151,143,151,151,146,151,146,146,151,146,146,146,146,146,146,153,153,153,155,153,153,152,146,152,146,146,142,138,138,26,122,138,138,130,138,122,138,122,138,26,26,26,138,138,25,138,25,25,24,24,24,23,22,15,22,14,15,151,152,173,152,146,122,122,138,138,26,138,26,26,26,138,26,26,26,138,138,138,25,138,25,138,25,25,26,138,23,4,5,12,12,17,17,12,17,240,96,101,39,4,17,10,12,44,64,101,83,97,34,5,39,17,17,4,10,229,104,72,235,234,103,11,10,17,17,28,45,67,101,107,39,4,17,17,17,12,10,4,10,13,24,24,23,24,23,16,23,16,23,23,23,16,23,22,22,22,13,45,45,44,44,44,39,44,39,39,34,39, +28,34,29,29,29,29,29,18,20,2,214,255,3,16,31,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,24,24,25,25,25,25,25,24,25,138,6,4,12,12,17,12,240,49,103,61,18,12,12,5,44,71,68,64,108,237,88,4,39,53,197,198,41,44,34,113,229,103,69,82,65,39,4,11,11,11,90,108,4,5,12,28,12,12,10,24,138,130,130,122,122,122,26,25,25,138,27,138,138,138,27,138,138,138,27,138,26,138,138,26,138,27,26,27,26,138,138,26,138,27,138,27,138,27,138,27,138,25,138,25,27,25,25,25,138,25,25,25,25,138,25,25,138,138,143,143,138,151,143,151,146,151,143,31,143,143,143,138,138,26,26,138,26,26,138,138,138,25,138,25,138,25,24,24,24,24,23,22,22,20,14,14,19,5,6,14,36,152,173,152,123,26,138,26,26,138,26,138,26,25,138,25,138,138,26,25,138,25,138,138,26,138,23,4,12,5,12,12,17,12,11,10,96,97,28,12,17,12,44,62,101,96,72,40,18,50,33,52,196,28,39,44,112,109,112,116,83,49,18,11,12,17,34,63,96,106,60,5,12,12,17,10,4,12,4,13,24,24,24,16,16,23,16,23,16,23,23,23,23,23,22,22,14,35,45,44,44,44,45,44,44,44,39,39, +28,29,28,28,29,29,29,18,20,2,164,255,36,16,25,24,25,24,24,25,24,31,24,25,24,25,24,25,25,24,24,25,24,25,25,24,25,31,25,25,25,25,25,31,25,24,25,24,138,25,13,4,5,17,17,12,4,49,99,59,5,11,17,49,70,68,113,255,238,255,70,40,50,197,21,196,52,55,33,108,255,237,237,113,63,65,39,4,4,11,67,109,11,11,12,28,12,12,5,25,138,130,130,122,122,138,25,138,138,25,138,27,138,26,138,27,26,138,138,138,138,26,25,138,26,138,138,138,138,27,130,138,27,138,27,138,27,138,27,138,138,27,138,27,138,138,138,138,138,27,138,138,138,27,138,138,27,27,27,27,138,27,26,27,27,138,25,138,25,25,25,138,138,26,138,138,138,138,25,138,25,138,31,25,24,24,24,24,23,23,22,22,14,20,14,14,14,14,19,6,4,240,20,31,152,173,146,130,26,26,138,25,26,138,138,138,25,26,25,31,138,24,25,26,138,138,16,10,5,12,12,17,29,10,11,11,103,108,11,11,17,44,59,115,101,95,113,12,39,39,53,198,53,197,17,18,62,255,114,106,96,65,54,28,11,12,32,65,95,101,65,240,17,12,17,5,10,10,4,13,24,24,16,23,23,24,23,24,23,16,23,23,16,22,22,22,20,13,4,39,49,44,45,44,44,44,45,44, +28,29,28,18,29,29,29,29,35,2,36,231,158,3,25,31,25,25,25,25,25,25,25,31,25,24,25,31,24,25,25,25,31,24,25,31,25,25,25,31,25,31,25,25,25,138,25,138,25,143,13,10,4,12,17,12,4,49,102,49,5,12,45,49,105,229,211,238,99,69,65,40,88,52,196,197,73,75,18,66,69,114,228,104,236,104,44,33,11,11,68,110,4,5,17,18,12,5,10,24,138,123,122,130,130,138,24,138,138,138,138,138,25,31,138,138,138,25,138,25,138,138,138,138,138,26,138,25,26,138,25,138,138,138,138,138,138,138,138,138,25,138,138,138,138,27,26,138,25,138,138,138,138,25,138,27,138,138,138,138,138,27,138,138,27,138,138,26,138,31,138,24,25,138,138,25,138,25,138,24,25,24,24,24,24,24,22,23,22,14,20,20,14,14,14,19,8,19,6,13,6,5,6,4,5,14,151,169,152,138,26,138,25,138,25,25,138,25,31,138,25,138,138,26,26,138,23,4,12,5,12,17,17,12,12,4,103,113,17,12,49,33,119,227,107,114,114,4,55,40,198,37,38,203,49,18,59,212,255,114,112,102,44,49,33,10,17,60,90,96,65,5,17,17,18,10,10,12,4,20,24,24,23,24,16,16,23,16,23,23,16,23,23,23,23,15,15,20,4,4,49,45,44,44,45,44,44,44, +28,29,29,33,29,28,18,29,12,159,181,89,255,159,154,151,151,153,151,143,31,31,31,25,25,25,24,25,24,25,31,25,25,25,25,25,25,31,25,25,25,25,31,25,25,25,25,25,138,143,8,4,5,12,12,12,4,44,102,61,29,33,70,213,255,40,240,68,102,97,94,40,61,211,208,213,255,18,40,108,102,111,40,240,44,255,213,49,33,29,69,108,4,12,17,28,12,12,12,25,138,130,130,26,138,25,16,138,25,138,138,25,138,25,138,25,25,138,31,138,25,138,25,138,25,138,31,138,31,138,31,138,25,138,25,138,25,138,25,138,138,27,31,25,138,31,25,138,138,138,138,25,138,138,31,138,138,138,138,25,138,138,138,25,138,25,138,25,25,138,25,138,16,24,138,25,31,24,24,24,24,24,24,23,22,22,22,20,15,15,20,14,20,14,14,14,19,8,12,6,6,5,13,5,5,10,240,7,23,169,146,26,26,26,138,138,25,138,25,25,25,25,25,138,26,138,24,10,5,12,12,17,28,12,11,4,103,109,59,39,44,114,255,33,82,115,112,28,39,74,42,196,196,53,39,18,59,62,99,84,44,119,211,65,44,39,44,49,69,96,62,240,17,12,17,12,4,10,10,8,24,24,24,16,23,23,23,24,23,16,23,16,23,23,23,22,22,14,14,40,33,49,49,44,44,45,45,45, +33,28,18,28,29,29,29,29,5,81,213,80,105,49,6,6,13,13,20,22,31,31,31,143,143,151,143,25,138,25,25,25,25,25,24,25,25,25,25,25,25,138,25,25,24,138,25,25,26,138,13,4,12,12,17,12,4,18,104,61,32,72,232,87,240,4,18,33,110,103,93,45,4,70,237,213,12,55,70,91,102,99,240,12,240,240,213,213,66,33,96,99,240,12,12,28,12,5,12,31,130,122,26,138,138,16,23,25,25,25,25,25,25,24,25,24,25,24,25,24,24,24,25,24,25,24,25,25,25,24,25,31,25,31,25,31,25,24,31,24,25,31,25,31,24,138,31,31,25,31,25,31,25,25,25,31,25,25,25,31,25,25,138,31,31,138,31,138,31,138,25,31,24,24,24,24,24,24,24,24,23,23,22,22,22,20,15,20,14,20,14,14,14,14,14,14,19,13,13,5,13,5,13,12,13,5,12,5,4,7,151,173,138,26,25,138,31,138,25,138,24,138,25,138,26,138,25,5,5,5,12,17,28,12,12,4,96,113,83,82,211,229,240,240,240,96,212,105,18,105,208,87,87,65,11,28,72,92,66,240,4,4,93,237,113,32,33,61,67,96,65,240,12,17,17,10,12,10,5,20,24,24,23,16,24,24,24,16,23,16,23,23,16,23,23,22,15,6,211,255,231,4,49,49,44,44,45,44, +28,28,28,29,28,28,29,29,18,20,24,154,222,23,2,30,20,14,13,13,8,7,7,7,13,9,22,24,31,143,143,146,143,31,138,138,25,25,138,25,25,25,25,25,138,25,25,138,27,143,9,10,4,12,18,12,12,11,110,66,88,229,240,240,18,18,18,18,70,33,34,49,84,55,33,11,70,88,40,29,40,55,5,11,4,240,240,55,237,66,96,72,240,12,28,29,12,12,5,31,131,138,138,26,24,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,24,23,23,23,23,23,23,23,23,24,23,24,23,24,23,24,23,24,24,24,24,24,24,24,24,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,24,25,25,25,24,24,24,24,23,22,22,22,22,22,22,22,20,22,14,15,14,20,14,20,14,20,14,14,14,19,6,19,6,6,13,5,12,5,5,12,5,12,6,5,5,4,7,152,146,26,25,138,25,25,31,138,25,138,25,138,138,25,12,5,12,12,17,29,12,12,240,64,228,113,255,50,240,4,240,240,66,109,108,49,18,55,74,49,4,18,49,72,72,72,240,12,5,240,11,237,230,44,60,67,96,45,4,17,17,17,12,10,5,4,20,24,24,16,24,23,16,23,16,24,23,16,16,23,23,23,22,22,9,20,100,235,49,44,49,45,59,45,45, +18,28,18,29,28,29,29,29,29,20,137,136,215,221,1,129,137,143,143,143,25,31,23,22,14,13,7,7,7,7,13,13,9,22,24,31,143,146,143,143,138,138,138,26,25,25,26,138,27,146,15,4,10,12,17,12,12,240,93,83,70,49,33,59,65,66,66,70,65,65,65,55,61,97,83,91,82,44,55,70,65,62,82,90,90,83,83,33,44,49,106,49,240,12,17,18,12,5,12,27,138,122,130,138,31,23,22,24,23,23,22,22,22,22,22,22,22,15,22,22,15,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,24,23,23,23,24,23,24,23,23,23,23,22,23,22,22,15,22,22,15,20,14,20,14,14,20,14,20,14,20,14,20,14,14,19,8,19,6,6,13,5,5,12,5,13,12,12,12,5,12,12,6,5,4,4,138,138,138,25,25,25,138,25,25,25,138,138,138,31,7,4,12,12,12,28,17,17,5,49,237,88,4,240,39,65,85,88,71,44,54,84,65,240,240,240,19,54,65,62,70,66,29,29,28,12,240,240,100,100,62,72,97,17,12,17,18,17,4,12,12,5,22,24,24,24,24,24,23,16,23,23,16,23,23,23,23,16,23,22,22,8,19,49,49,59,49,44,45,45,45, +28,28,28,28,29,29,29,18,18,19,150,192,238,238,255,150,129,142,138,138,138,138,143,138,143,143,138,31,24,22,9,8,13,7,8,7,7,7,9,22,24,143,31,146,146,146,138,138,138,131,24,4,5,12,12,17,12,240,59,98,40,62,235,255,238,237,234,212,102,66,65,61,61,90,91,101,66,55,65,61,90,212,234,236,255,255,255,119,59,63,114,4,10,12,29,17,12,12,13,143,122,122,130,130,138,25,25,138,138,138,143,143,138,143,138,31,138,31,31,25,31,24,24,24,23,23,24,22,22,22,22,22,15,22,15,22,22,22,22,15,22,15,15,20,22,22,22,22,15,15,22,22,15,22,15,22,15,22,22,20,22,22,22,22,15,22,22,22,22,15,22,14,22,14,20,14,20,20,14,14,14,14,20,14,14,14,14,14,19,14,14,14,14,19,13,6,13,5,13,5,12,5,12,12,5,5,12,5,12,5,5,6,5,4,138,138,25,138,25,25,25,138,25,138,26,26,138,13,10,5,12,12,28,28,12,12,17,119,212,229,237,235,236,255,255,255,226,97,61,232,229,90,99,97,65,70,62,65,54,54,60,61,64,69,67,40,45,72,67,92,12,17,17,17,12,5,10,5,12,22,24,24,16,24,24,24,24,16,16,23,24,16,16,23,23,23,22,22,20,20,60,49,45,45,59,45,59,44, +28,28,18,28,28,29,28,28,18,19,24,142,225,255,238,225,1,123,137,138,130,130,138,138,138,138,27,138,138,138,138,143,138,31,25,23,22,20,13,7,13,7,7,7,8,9,24,31,143,146,146,5,5,5,17,28,12,5,4,110,66,108,228,237,255,255,255,255,237,236,84,65,49,97,212,228,66,55,63,101,237,255,255,237,232,213,114,235,82,96,93,240,12,17,34,12,5,10,13,143,131,122,122,122,130,25,138,122,130,122,122,130,122,130,122,130,138,130,130,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,143,143,143,25,31,143,31,31,25,25,24,24,24,24,24,23,23,23,22,22,22,22,22,15,22,22,22,20,22,14,22,14,20,14,20,20,20,20,14,20,14,14,14,14,14,14,14,14,14,14,19,14,14,14,14,14,13,19,13,13,13,6,13,5,5,5,12,12,12,12,12,12,12,5,12,12,12,12,12,4,9,31,25,31,138,25,25,25,138,25,138,26,143,8,4,5,12,10,28,28,12,12,240,101,236,228,255,255,255,255,255,255,255,229,83,113,229,117,235,90,70,65,61,33,61,97,212,237,236,237,117,83,60,67,83,65,240,17,17,28,11,10,12,10,13,23,24,24,24,16,24,16,24,23,24,16,23,24,23,24,16,23,23,22,15,14,49,59,49,44,49,44,45,49, +28,28,28,28,18,28,29,18,29,18,19,27,136,216,255,255,185,121,147,123,131,130,130,122,130,138,138,138,138,138,138,138,138,138,138,146,138,143,143,143,138,24,22,22,8,8,13,7,8,14,8,12,4,12,12,29,12,12,240,72,107,103,105,240,240,34,34,40,49,237,212,68,49,88,207,210,59,65,90,230,210,11,4,240,18,240,28,90,90,114,28,4,12,28,29,12,12,4,20,131,122,123,122,123,130,25,138,122,122,122,122,122,122,122,122,122,122,130,122,138,122,130,122,130,138,122,130,138,138,138,130,138,138,138,138,138,138,138,138,130,138,138,138,138,138,138,138,138,138,138,138,138,138,138,143,138,138,138,138,143,138,143,31,138,31,25,31,24,24,24,23,23,22,22,22,22,20,22,14,20,20,20,14,13,14,13,13,13,13,12,13,13,13,13,12,12,10,10,4,10,4,4,4,4,4,4,4,10,4,5,5,5,4,4,20,31,25,25,25,25,138,25,25,138,25,138,143,9,4,12,5,12,12,28,28,17,6,44,235,236,96,33,55,75,94,99,255,236,97,92,255,235,227,72,65,60,34,113,229,255,232,229,210,101,228,61,66,67,102,17,12,17,17,28,10,10,5,10,13,24,24,24,24,24,24,24,24,16,24,24,24,16,24,24,23,23,23,22,22,13,50,49,49,49,49,59,44,44, +28,18,28,28,28,28,18,29,18,18,28,19,25,144,144,156,162,184,185,132,1,123,131,123,122,122,138,122,130,130,130,138,138,130,130,130,130,138,130,130,138,138,146,131,146,138,138,142,138,25,25,23,5,5,12,17,17,12,5,240,99,97,44,5,5,5,19,18,4,240,101,119,112,18,240,240,49,106,227,99,240,5,18,12,11,4,34,59,116,55,240,12,17,29,12,12,12,4,22,144,123,123,122,123,130,26,138,123,122,122,122,122,122,122,122,122,122,122,122,123,122,122,122,122,122,122,122,122,130,122,130,122,130,130,130,138,130,130,138,130,138,130,138,130,138,130,130,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,130,138,130,130,138,122,130,130,130,130,130,130,138,26,138,138,130,138,138,138,138,138,138,138,31,26,138,31,25,25,24,24,24,24,24,23,23,22,22,22,22,20,20,20,14,14,13,13,13,14,23,25,138,25,138,25,138,25,138,138,26,138,138,143,24,10,5,12,12,17,32,28,17,17,5,69,237,105,4,240,240,240,240,11,72,83,103,63,240,18,71,65,32,236,213,240,240,240,240,240,17,67,69,66,96,60,240,17,17,28,17,5,12,10,5,9,24,25,24,24,24,24,24,16,24,24,24,16,24,24,16,23,24,23,23,22,14,35,49,49,59,49,49,49,49, +28,28,28,29,18,18,28,28,18,18,29,18,20,31,27,120,120,120,160,187,185,121,1,123,131,123,131,123,122,122,122,131,130,130,122,130,130,130,130,122,130,130,123,130,122,131,130,130,131,138,144,146,13,4,12,12,29,28,12,5,11,114,71,49,12,11,11,18,40,18,28,235,233,66,5,4,101,233,238,4,18,39,28,17,11,12,59,102,99,240,12,12,34,34,12,12,12,6,151,149,139,131,131,123,123,25,138,123,123,122,123,123,122,123,123,123,122,122,122,122,123,122,122,122,123,122,122,122,122,122,122,130,122,130,130,122,122,122,122,122,122,130,130,130,122,122,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,122,138,138,138,138,122,138,138,122,138,138,138,138,138,138,25,138,138,122,122,138,122,138,138,130,122,138,122,122,138,122,130,122,122,122,130,130,122,122,146,130,130,131,130,130,138,138,138,138,138,138,138,26,26,26,26,26,138,138,26,26,26,138,26,138,143,7,12,5,12,12,28,32,28,17,17,4,114,234,93,28,4,12,12,4,39,97,96,114,240,12,34,62,114,238,240,240,12,12,11,12,45,72,67,67,92,240,12,17,28,28,4,10,10,5,12,23,24,24,16,25,16,24,24,24,24,24,24,24,24,24,24,24,16,23,23,22,15,29,65,59,49,49,44,49,44, +28,28,28,12,28,28,18,28,18,28,18,17,18,19,23,31,142,137,120,123,188,190,184,121,1,123,123,123,131,130,122,122,122,122,123,123,122,122,122,122,130,122,122,122,123,130,130,131,130,131,123,131,22,4,4,12,17,34,12,12,240,62,97,61,40,12,18,11,18,40,4,113,237,105,240,11,228,255,213,240,18,17,12,11,12,39,106,212,240,5,12,17,29,17,5,12,5,12,31,151,151,153,148,152,169,143,148,147,148,144,131,131,131,123,123,123,123,122,122,123,122,122,122,122,122,122,123,122,122,122,123,122,122,122,122,130,122,122,123,123,122,122,122,122,123,122,122,122,122,122,123,122,122,122,130,122,122,122,122,122,122,130,130,130,130,122,130,130,130,130,130,122,130,130,122,122,138,26,26,122,138,138,122,138,122,138,138,138,138,138,122,138,138,138,138,138,138,138,138,138,138,122,138,138,138,138,138,138,138,138,138,122,138,138,26,138,26,26,26,26,26,26,26,138,26,138,26,146,9,4,12,12,12,12,34,32,17,17,5,32,234,234,72,12,18,28,12,4,83,106,237,78,240,32,96,255,210,240,17,12,12,12,44,69,72,64,108,12,4,17,17,28,17,10,12,12,4,13,24,24,25,24,24,25,16,24,24,16,16,16,24,16,24,24,16,24,16,23,22,22,14,60,49,59,49,49,49,49, +28,28,28,28,28,28,18,28,28,28,18,18,18,18,18,20,31,143,138,26,1,131,205,221,186,1,123,131,123,123,131,123,131,123,123,123,123,123,123,123,122,123,123,123,123,123,123,123,122,123,123,142,27,7,10,5,12,28,28,17,12,240,114,102,59,29,55,12,11,12,240,63,255,232,240,49,238,255,65,240,12,17,17,18,40,64,117,11,4,12,17,34,28,5,12,12,5,5,13,8,13,13,13,12,13,13,20,22,22,31,31,31,151,146,151,146,146,147,144,146,139,134,131,131,131,123,123,123,122,122,122,122,122,122,122,123,122,122,138,122,122,122,123,123,122,122,123,122,123,122,122,122,122,123,122,122,123,122,122,122,122,122,122,122,122,122,123,122,122,122,122,122,122,122,122,122,130,138,26,138,122,122,122,122,122,122,122,122,122,138,122,122,122,138,122,138,122,138,122,138,122,138,138,122,138,122,138,138,138,122,138,138,138,26,138,26,26,138,26,26,138,26,26,138,26,138,26,138,24,12,5,12,5,12,17,34,28,12,17,240,60,235,117,49,84,29,4,4,32,119,227,211,240,32,235,255,5,4,12,17,17,45,82,63,63,109,34,240,12,28,17,17,12,4,12,10,4,22,24,25,25,25,24,24,24,25,25,31,24,24,16,24,16,24,24,24,16,23,23,22,14,49,49,59,49,59,45,49, +28,28,28,28,28,28,28,28,28,28,28,18,29,18,18,17,20,146,148,153,143,129,3,164,220,209,144,1,1,123,131,142,123,123,131,123,123,123,123,123,123,123,123,123,123,123,123,123,131,123,123,131,146,14,4,5,12,10,34,28,12,4,240,110,99,61,12,5,5,12,5,240,236,255,240,98,255,238,240,5,12,17,12,33,90,119,39,240,12,17,39,34,12,12,5,12,4,22,143,31,25,31,24,22,22,13,8,13,13,13,14,8,8,13,13,13,13,13,20,22,22,22,24,31,138,146,153,146,147,148,152,132,144,139,131,123,131,123,131,122,123,123,122,122,123,122,123,122,122,122,122,123,123,122,123,123,122,123,122,123,123,122,122,123,123,122,122,122,122,122,122,122,122,122,122,122,122,130,26,138,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,138,122,122,122,122,122,122,122,138,138,122,138,138,122,138,138,122,26,138,122,26,138,26,26,26,26,26,138,143,7,12,5,12,5,28,34,34,32,17,17,240,61,235,116,59,34,12,12,4,90,234,230,240,67,234,62,240,12,12,28,60,83,62,67,109,44,240,17,28,17,28,17,5,10,12,5,6,23,25,25,25,16,25,25,25,25,25,25,25,25,24,24,24,24,24,16,24,23,23,22,14,49,54,49,49,44,45,49, +28,28,28,28,28,28,28,28,28,28,18,17,29,29,18,18,18,13,184,147,152,148,151,36,23,204,225,255,209,150,1,120,123,142,142,131,123,131,123,123,131,123,123,123,123,131,123,123,137,143,123,123,131,25,11,12,5,12,28,34,29,12,4,240,93,108,91,18,4,4,12,4,44,255,40,213,255,33,4,12,4,4,44,112,233,59,240,12,17,34,29,12,12,12,12,5,13,31,138,137,138,138,143,142,131,31,143,142,146,143,143,31,31,24,24,22,22,9,20,8,8,13,8,14,14,13,7,13,13,8,20,22,23,31,31,151,146,146,148,147,152,147,134,152,144,144,131,131,131,123,131,123,123,123,122,123,123,122,123,123,123,123,123,122,123,123,123,123,123,123,122,123,123,122,122,123,123,122,138,26,123,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,138,138,138,138,138,138,138,138,138,138,138,122,122,138,122,138,26,130,23,4,12,12,12,17,34,34,34,28,12,17,240,59,234,116,64,39,29,34,34,102,114,28,104,101,17,5,17,34,63,67,62,69,109,44,240,10,28,17,28,32,4,12,12,12,4,20,25,25,26,25,25,25,25,25,25,25,25,25,25,25,25,25,25,24,24,24,16,23,22,22,35,60,49,59,49,59,45, +28,28,28,28,28,28,28,18,28,28,28,29,17,18,18,18,18,11,56,188,132,124,132,138,36,24,24,210,255,255,222,166,148,121,129,142,142,123,131,123,123,123,131,124,123,123,131,142,23,24,138,131,123,146,9,4,12,5,12,17,32,28,12,5,240,40,212,103,93,40,4,4,12,44,18,33,33,5,4,17,59,112,110,104,4,240,12,17,39,39,12,12,5,12,12,5,22,143,137,137,157,138,130,142,138,27,138,122,122,130,130,123,138,131,138,138,131,138,142,138,138,143,27,25,25,24,24,22,22,9,20,13,13,13,14,8,14,8,13,13,8,20,22,22,31,36,36,151,146,153,153,152,144,148,147,146,134,131,131,131,131,123,131,131,123,122,122,122,122,123,123,123,122,131,123,123,123,123,122,26,122,123,123,123,123,123,123,123,123,123,123,122,123,122,123,122,122,123,122,123,122,122,122,122,122,122,123,122,122,122,122,138,138,138,122,138,138,122,138,138,122,138,138,138,138,138,138,138,26,143,7,4,12,5,12,17,34,34,32,28,17,17,240,17,110,112,95,44,45,44,44,45,44,44,45,59,44,49,60,60,67,106,97,17,240,17,28,17,17,28,12,10,4,12,4,12,23,31,25,24,138,25,24,138,25,25,25,25,26,25,25,25,25,25,25,24,24,24,16,22,14,35,60,49,45,49,49,49, +28,28,28,28,28,28,28,17,28,28,28,18,28,28,17,29,18,18,240,40,205,175,124,132,134,153,36,2,30,193,255,255,231,185,149,121,137,142,131,138,131,131,123,123,123,123,123,123,158,159,130,123,131,131,138,4,4,12,12,4,28,34,28,17,12,240,240,59,110,110,112,99,68,59,49,59,59,83,109,110,119,105,33,240,4,12,28,39,39,12,12,5,12,5,4,14,31,142,138,195,199,157,129,130,138,26,137,123,122,122,122,122,123,122,122,123,123,123,123,123,142,131,131,144,144,144,144,148,144,148,148,144,146,146,143,143,143,25,24,23,9,20,14,13,13,13,8,14,14,14,8,13,19,20,20,22,30,36,36,36,151,153,153,153,153,152,147,147,147,139,139,131,131,123,123,123,123,123,123,138,122,123,122,122,122,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,122,123,122,123,122,122,122,122,122,122,122,122,122,130,122,138,138,122,138,122,138,138,138,138,131,24,10,5,12,5,12,17,34,44,34,32,10,12,5,240,65,227,102,95,59,44,34,39,39,45,44,45,59,69,101,99,45,240,5,17,28,28,28,32,17,10,12,12,12,4,20,24,138,25,138,25,25,138,25,138,25,138,25,25,25,26,25,26,25,25,25,24,24,23,151,153,35,54,59,59,49,49,49, +17,29,28,28,28,28,28,28,28,28,18,17,29,18,18,29,18,29,19,4,12,47,143,135,126,132,131,152,151,2,15,163,255,231,255,204,140,142,129,121,144,131,123,131,131,123,131,123,131,131,123,131,123,123,144,24,10,4,12,5,10,28,34,32,17,12,12,240,240,28,66,104,113,212,114,114,119,113,98,65,11,240,4,12,12,34,34,29,17,5,12,12,12,5,13,24,142,123,158,199,38,199,157,123,139,26,138,123,131,131,123,131,138,131,146,131,138,146,131,131,146,131,131,131,146,131,131,131,144,131,131,139,139,139,126,134,147,147,147,147,147,147,147,147,144,146,148,138,143,31,25,23,22,22,20,20,13,13,13,20,14,14,20,20,20,20,20,22,30,36,36,151,151,152,152,147,152,147,147,144,138,152,139,134,131,131,131,123,123,123,123,123,122,122,123,123,122,122,123,123,123,123,123,123,123,123,123,123,122,122,122,122,122,122,122,122,122,122,122,122,122,122,130,138,122,138,122,122,138,138,138,9,4,11,12,12,12,28,32,34,34,32,28,17,12,240,12,84,211,114,99,102,97,97,96,96,97,112,102,44,4,240,12,17,28,17,32,34,17,12,4,12,12,4,13,24,138,138,26,26,138,138,26,138,25,26,25,138,25,138,25,25,25,25,25,25,25,25,151,155,30,51,49,49,49,49,45,49, +28,17,28,28,28,28,28,28,28,29,17,28,18,17,28,17,18,17,29,19,17,17,19,23,144,135,132,169,205,153,24,2,9,47,215,255,255,188,168,150,1,131,131,123,131,131,123,131,123,123,131,123,131,131,131,144,9,10,11,12,5,12,10,44,44,32,28,12,10,4,240,240,240,11,11,17,11,240,240,240,5,12,12,32,39,44,34,4,12,12,12,5,5,12,23,146,138,122,195,199,20,37,198,123,146,131,138,146,144,144,146,131,144,146,131,142,131,131,138,131,131,138,142,131,131,142,131,131,131,131,144,146,139,139,125,146,144,134,139,134,134,139,134,139,134,134,134,147,134,141,147,141,134,147,144,134,144,144,146,142,138,138,31,24,22,22,20,20,13,13,14,20,15,20,13,20,20,20,20,30,22,31,36,36,154,153,153,155,168,168,152,169,169,147,152,144,134,131,131,131,123,123,123,123,122,122,123,123,122,123,122,122,122,122,123,123,122,122,122,122,122,122,122,122,122,122,122,138,122,138,131,143,13,4,12,12,12,12,17,28,34,44,32,28,17,17,17,240,240,28,54,75,84,82,82,70,49,28,240,240,17,17,17,17,28,32,34,17,4,10,12,12,12,5,22,143,26,26,26,26,26,26,26,26,26,138,26,26,26,26,25,138,25,26,25,25,25,36,36,35,54,54,49,59,49,45,59,44, +28,29,17,28,29,29,17,29,17,18,29,17,28,28,29,28,28,18,29,29,18,18,18,17,20,142,140,124,171,192,166,143,31,15,9,15,210,255,255,255,189,136,121,124,123,131,131,123,131,131,131,131,123,124,123,131,146,8,4,12,12,12,5,17,34,39,34,34,32,28,12,17,12,12,12,10,12,17,12,17,17,34,44,34,34,34,5,5,12,5,12,5,10,22,143,131,146,138,199,14,43,201,199,153,144,138,138,144,131,131,131,144,131,131,138,131,142,142,131,142,131,131,131,142,131,131,142,131,131,131,139,139,131,139,131,126,139,139,131,139,131,134,139,134,139,134,139,139,134,139,132,139,134,134,134,139,134,134,139,134,132,134,141,134,133,147,134,147,134,144,146,142,138,138,31,24,22,22,22,20,20,20,8,20,9,14,14,13,13,19,20,20,30,30,36,36,154,153,153,155,152,168,168,169,169,169,152,134,152,131,131,123,131,123,123,122,122,122,122,122,122,122,122,138,122,122,122,122,122,122,122,138,25,12,4,12,12,5,12,17,34,34,44,44,32,32,17,10,17,12,4,4,240,240,4,240,240,12,12,17,28,32,32,34,44,34,4,4,12,5,12,4,4,20,138,138,26,26,26,26,26,26,26,26,26,26,26,26,26,138,26,138,26,25,138,25,25,154,45,54,54,59,49,49,59,45,49,49, +28,17,28,28,17,17,28,28,28,17,17,18,28,28,17,19,29,17,29,17,29,18,19,18,17,19,22,146,121,127,179,179,184,155,143,15,2,14,210,255,255,238,183,149,126,121,131,124,131,123,131,124,131,131,131,131,124,142,6,4,4,12,12,4,4,17,29,32,44,39,34,34,32,32,32,32,32,34,34,39,44,45,34,28,5,10,12,12,12,5,4,10,22,142,144,144,147,142,199,201,14,201,200,150,139,131,138,139,139,131,131,131,131,131,131,123,131,131,123,131,138,123,123,131,123,131,131,131,131,131,131,139,132,139,139,134,139,134,134,134,134,134,139,134,134,139,134,134,139,134,134,134,139,132,134,134,134,139,132,134,134,134,139,139,134,134,139,132,139,134,134,134,134,134,134,134,147,134,147,147,144,138,148,146,142,138,138,25,24,22,22,8,13,13,7,7,8,8,8,7,13,7,13,20,22,22,23,36,36,151,153,152,155,152,169,169,169,169,152,147,152,131,146,131,131,131,123,123,122,122,122,122,131,24,10,12,5,12,5,12,4,28,32,34,44,34,34,28,28,32,17,17,28,28,17,17,17,17,17,32,34,32,34,32,28,4,4,12,10,10,12,4,20,138,26,26,138,26,26,26,26,26,26,26,138,26,26,26,26,26,26,26,26,26,26,138,31,46,54,54,54,49,49,59,49,59,44,49, +17,28,28,28,28,28,28,28,17,29,28,28,29,18,28,17,17,29,17,29,29,18,17,29,18,18,17,13,22,31,121,124,175,186,172,184,162,24,14,2,163,215,255,221,187,176,149,133,124,124,131,131,131,123,131,124,131,132,138,22,4,4,12,12,5,12,4,17,28,32,34,28,34,34,34,34,34,34,34,17,34,17,12,12,5,12,5,12,4,4,13,24,144,147,131,144,139,146,202,203,196,203,202,153,139,131,122,144,139,131,131,123,123,123,123,123,122,123,138,123,123,123,131,123,131,123,124,124,131,131,124,132,139,132,132,139,132,132,132,132,134,132,134,134,134,132,134,132,134,134,132,132,134,132,132,132,132,134,134,134,132,132,132,134,134,132,134,132,134,134,132,132,132,132,134,132,132,132,134,134,134,123,131,134,134,134,134,134,134,134,134,147,134,144,146,146,131,138,138,25,16,23,22,9,20,8,13,8,8,8,9,9,9,9,20,20,20,22,22,23,31,151,143,146,151,146,146,139,144,147,152,152,147,169,24,12,12,12,12,12,12,12,5,32,34,44,44,44,34,34,34,32,34,32,34,32,34,34,44,34,34,34,32,4,4,12,12,5,12,4,4,20,138,138,26,138,26,138,138,26,138,26,138,26,138,26,138,26,138,26,26,26,26,26,26,25,47,54,59,49,59,59,49,59,44,49,49,49, +28,17,28,17,28,17,18,17,18,17,29,17,17,17,29,28,18,28,18,18,17,28,18,18,28,18,29,18,17,17,18,22,16,123,132,141,172,192,191,183,154,31,2,36,192,191,188,192,179,174,141,124,124,132,131,131,131,131,132,133,143,13,10,12,12,12,12,5,12,10,5,5,12,5,12,5,12,5,12,12,4,12,12,5,12,12,12,4,13,23,148,133,144,134,134,134,139,147,131,156,181,142,123,132,132,131,123,141,140,141,141,169,147,152,168,165,168,146,131,131,123,131,129,120,171,174,171,174,174,174,174,174,173,171,173,173,173,145,173,145,145,169,149,135,141,141,128,128,126,126,128,126,134,126,134,134,134,132,132,134,134,132,132,132,132,132,132,132,134,132,132,132,132,132,132,132,132,132,132,132,134,131,131,132,132,132,132,132,132,132,132,132,132,132,132,132,132,126,134,126,134,128,128,128,127,133,128,132,134,147,131,146,138,138,138,25,24,22,22,9,20,14,14,14,9,14,14,14,13,13,7,7,7,20,9,12,5,5,12,5,12,12,12,12,5,4,28,34,34,34,34,45,45,44,34,45,44,34,34,17,4,10,5,10,12,5,12,5,4,13,24,131,122,122,122,138,122,138,26,138,138,138,138,138,138,26,26,26,26,26,26,138,26,26,26,138,47,54,54,59,49,49,49,49,49,49,49,45, +28,17,28,28,28,28,17,17,29,17,28,18,28,28,17,29,17,29,17,29,28,18,17,28,28,18,18,18,18,18,19,17,18,20,24,143,121,126,173,188,206,216,189,36,154,123,147,187,206,187,179,177,171,147,124,124,131,132,131,124,132,146,9,5,4,5,5,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,12,5,4,5,20,143,147,134,134,132,139,132,132,132,132,132,126,132,141,145,169,174,171,152,188,186,188,191,216,218,221,205,168,131,122,122,122,120,1,121,187,206,192,192,191,191,191,188,191,188,188,188,188,188,188,187,187,186,186,186,179,179,179,177,177,177,177,175,175,174,174,173,173,169,173,145,135,135,128,134,126,134,126,132,134,132,132,134,134,132,132,132,132,132,132,132,132,132,132,123,146,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,131,132,131,132,132,132,132,132,126,134,126,126,127,133,134,132,132,146,142,146,138,138,25,25,23,22,22,9,8,14,13,13,10,4,12,12,12,12,12,5,12,5,12,12,17,17,17,12,12,12,12,12,5,12,12,12,12,5,12,12,12,12,20,146,146,146,146,146,146,146,122,130,131,130,122,130,122,122,122,122,122,26,122,138,138,26,138,26,26,26,151,54,60,49,59,49,49,49,59,45,49,45, +17,29,17,28,17,28,17,28,17,29,17,28,17,13,28,17,28,17,18,17,19,29,28,29,13,29,17,29,18,29,29,18,18,18,17,20,22,143,123,121,127,174,188,206,187,165,144,124,121,186,192,187,186,179,179,175,147,124,124,131,132,124,131,143,22,13,4,10,5,12,5,12,5,12,5,12,12,5,12,12,12,4,4,4,5,13,25,144,140,139,132,132,132,132,132,132,126,126,127,169,175,177,186,187,191,223,184,209,205,218,221,221,225,218,1,120,122,130,122,123,168,191,221,221,216,221,218,218,205,206,216,216,205,216,205,205,205,216,205,205,216,216,216,216,192,205,205,205,205,191,191,188,188,187,187,186,186,186,186,179,179,177,175,175,174,174,173,169,135,135,128,127,126,134,132,126,132,132,134,132,132,132,139,134,132,132,132,134,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,131,132,131,132,132,131,131,131,132,131,132,131,132,131,132,132,132,132,132,134,132,126,126,140,134,144,147,144,138,22,13,10,4,12,5,12,12,12,12,12,12,5,12,12,5,12,12,12,12,12,12,12,12,5,12,12,5,5,5,8,20,9,20,22,22,24,36,151,146,151,146,146,146,146,146,146,146,146,131,146,138,138,122,138,26,138,138,146,51,59,49,49,49,49,49,45,45,49,45, +17,17,28,17,17,18,13,28,17,28,28,29,17,18,17,29,29,29,17,29,17,17,29,17,18,17,18,29,17,29,17,29,18,18,18,18,17,19,20,24,138,123,121,127,171,187,186,172,152,124,124,168,187,188,186,186,179,187,172,169,134,124,124,124,131,143,24,9,13,5,12,10,10,10,10,10,10,10,10,4,5,7,13,22,24,146,134,139,124,132,124,121,121,127,149,171,184,188,216,221,216,218,221,221,221,221,184,178,186,179,177,177,175,121,130,131,131,123,169,175,179,186,177,175,175,176,177,177,177,177,179,186,187,188,188,191,191,192,205,205,216,216,218,216,218,221,221,220,218,218,216,218,216,218,216,216,216,205,205,205,191,188,188,188,187,187,186,186,179,177,177,177,175,173,173,173,169,135,128,127,134,128,132,168,128,132,134,132,132,134,132,134,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,131,132,131,132,131,132,131,132,131,132,131,132,131,132,132,131,132,131,131,26,122,134,142,22,7,10,10,12,12,12,12,5,12,12,12,12,12,12,12,12,12,12,12,5,12,10,12,7,13,13,13,13,5,5,7,7,7,7,7,5,12,10,10,12,7,13,20,20,20,22,22,24,24,31,151,151,146,138,130,146,51,49,49,49,59,49,49,45,59,45,45, +28,17,17,29,17,17,17,17,29,17,17,17,28,17,29,17,17,17,18,17,28,18,17,18,17,18,17,18,28,18,18,29,29,29,19,29,29,18,18,18,19,20,24,27,123,121,132,174,172,175,168,139,121,132,170,186,186,179,179,186,186,186,170,169,134,132,124,131,123,25,16,15,9,9,14,8,9,9,15,23,24,143,146,144,131,124,121,121,126,147,175,186,205,218,221,218,221,223,216,188,186,175,171,145,145,127,127,132,169,145,141,129,16,22,23,143,174,173,173,169,173,145,169,169,169,173,169,173,169,173,173,145,145,145,135,135,135,145,145,145,169,169,169,174,175,177,177,186,187,188,191,205,205,216,218,220,220,220,218,220,220,218,218,216,218,216,216,205,205,191,191,188,188,187,186,186,179,177,177,177,175,175,169,147,172,135,128,128,126,126,134,132,134,132,134,132,134,134,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,131,132,131,132,131,132,131,131,132,131,131,122,131,139,132,139,133,146,24,8,5,10,10,12,12,12,12,12,12,5,12,5,5,5,12,4,12,13,9,24,142,131,138,138,138,138,138,25,16,16,23,22,22,9,20,9,8,8,7,7,12,7,7,12,7,7,7,7,7,7,4,14,146,51,49,60,45,49,49,45,49,45,45,45, +17,28,17,17,28,17,28,17,17,28,28,17,28,28,17,28,29,17,28,18,17,29,28,28,29,17,29,17,18,17,17,19,17,18,17,18,18,29,29,18,18,18,18,19,20,24,25,26,123,132,173,173,152,131,123,121,147,175,179,177,177,177,177,179,179,179,179,179,174,174,173,169,169,147,144,147,132,134,133,126,126,126,126,141,169,171,184,191,206,205,192,205,205,186,175,169,145,127,127,145,145,169,173,173,174,174,176,171,171,177,175,15,20,22,15,148,177,176,176,178,178,176,176,177,176,176,175,176,176,175,176,176,175,175,175,175,174,174,174,173,173,173,173,169,173,169,173,145,135,135,127,145,135,145,145,169,174,171,175,177,186,188,188,205,216,218,220,221,221,221,221,218,218,216,216,216,216,205,191,188,188,187,188,169,186,186,179,177,175,174,173,173,145,135,135,128,128,126,126,134,134,132,134,134,134,132,132,134,132,134,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,131,131,122,131,132,131,131,132,131,132,134,131,138,23,8,7,5,7,12,10,10,12,10,4,5,6,13,22,25,138,139,132,131,124,123,131,124,123,131,131,131,131,132,123,131,131,131,138,131,138,138,143,138,138,138,138,138,24,24,23,22,22,20,16,168,49,49,49,60,45,60,45,59,45,45,45, +28,17,17,28,17,28,28,17,28,17,13,17,28,17,29,17,18,17,18,17,29,17,17,18,18,28,18,17,29,28,29,17,29,28,28,28,18,28,18,18,29,29,18,29,18,18,19,20,22,31,26,130,144,132,124,124,123,121,123,134,168,175,177,175,175,175,175,177,177,179,179,179,186,179,186,186,187,187,186,187,187,188,188,188,188,188,188,186,172,169,145,127,145,135,174,171,174,171,171,171,175,175,175,176,176,176,175,174,169,146,173,155,9,14,31,177,174,175,174,174,174,174,173,173,173,174,174,174,174,174,174,174,175,174,175,175,175,176,175,176,176,176,178,176,176,176,176,175,175,175,174,174,173,173,173,173,169,173,169,145,135,145,127,145,145,141,145,173,174,177,177,186,191,205,216,220,221,221,221,218,218,218,220,188,172,218,188,188,188,187,186,186,179,177,177,175,175,174,174,169,145,135,135,128,128,128,134,126,126,134,134,134,134,134,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,139,131,122,131,132,131,132,132,131,132,132,131,132,132,132,139,146,138,31,25,24,24,16,25,138,138,138,131,132,132,132,123,131,123,123,131,123,131,131,124,123,123,123,123,123,131,123,131,123,123,122,123,123,123,123,122,123,123,123,123,131,123,131,26,160,161,44,49,49,49,45,45,45,45,45,45,45, +17,28,17,28,17,28,17,17,17,29,17,29,17,29,17,17,28,17,17,18,17,13,28,17,17,18,17,29,17,18,17,29,17,29,13,28,17,29,28,29,18,29,18,29,18,29,18,18,18,19,20,30,23,31,143,138,131,131,123,123,123,123,132,169,171,175,175,175,174,171,174,173,173,173,171,171,171,171,171,171,171,171,169,169,135,169,135,173,169,173,174,171,169,169,141,135,149,169,175,179,179,177,178,175,168,152,153,153,154,159,30,160,31,9,23,36,36,31,24,31,31,31,36,31,30,30,9,15,15,24,24,31,151,151,151,153,155,152,168,169,174,174,174,175,175,175,176,176,177,176,177,178,176,178,178,178,176,178,178,175,175,175,174,174,173,173,173,169,169,145,135,135,127,127,127,145,149,173,171,172,186,188,216,221,184,223,223,223,220,218,218,220,216,216,191,188,187,186,186,179,179,177,177,177,177,175,174,174,174,169,145,135,128,128,126,126,134,126,134,126,134,134,132,132,132,132,132,132,132,132,144,138,131,131,132,132,131,132,131,132,131,132,131,132,131,132,131,132,132,132,132,126,132,132,132,132,132,132,131,124,131,131,131,124,131,131,131,123,131,123,123,131,131,131,123,131,123,124,123,123,131,131,123,123,123,123,131,123,123,123,123,123,123,122,122,138,48,49,45,45,59,45,59,45,45,44,45,45, +17,28,17,17,28,17,17,29,17,17,17,17,17,17,17,28,17,28,28,17,17,28,29,17,28,28,17,28,18,17,18,17,29,17,18,28,29,29,29,17,29,28,29,18,29,29,29,29,18,29,18,18,19,29,20,30,30,24,27,142,138,137,123,123,123,123,131,144,169,171,171,175,175,175,175,174,175,174,175,171,175,174,175,171,169,169,147,126,126,121,121,133,147,172,187,192,191,187,185,162,154,47,35,35,35,39,40,34,40,44,59,44,193,2,23,30,22,22,22,14,14,14,20,14,8,78,106,83,82,82,71,74,76,55,51,46,35,35,29,19,19,14,14,15,15,2,24,143,153,155,152,168,171,171,175,178,178,177,177,179,179,177,177,177,177,177,176,178,175,176,176,175,175,174,174,173,173,169,173,145,127,127,127,135,141,135,169,171,186,188,192,218,221,223,224,223,220,219,219,218,218,216,191,188,187,187,187,186,186,179,177,178,175,174,174,173,169,169,135,128,126,126,132,134,134,126,134,132,134,147,131,131,132,132,132,132,132,131,132,132,132,131,132,131,132,131,132,132,132,131,132,131,132,131,132,131,131,131,131,131,131,132,123,131,124,131,124,131,123,131,131,123,124,123,131,124,131,123,131,123,123,123,123,123,131,123,123,123,123,123,123,123,123,123,131,31,49,49,49,49,49,45,49,45,45,45,45,39, +17,28,17,28,17,28,17,17,28,17,28,28,17,28,28,28,17,17,28,28,17,18,17,28,13,17,28,18,17,18,17,18,17,29,17,29,17,29,29,28,28,18,17,28,28,29,29,29,29,29,29,29,29,29,29,29,29,35,35,20,30,24,31,25,143,27,130,130,123,120,123,123,123,123,131,144,139,132,146,134,139,131,132,169,171,171,178,187,192,192,187,205,204,185,164,78,56,41,40,33,40,49,55,70,70,68,82,65,45,45,55,59,92,181,136,25,23,23,22,22,22,22,22,15,8,80,236,235,233,235,235,235,235,236,235,235,234,227,226,118,113,114,108,102,96,91,84,74,73,51,46,35,35,14,14,9,15,2,31,150,160,161,176,177,177,179,179,179,179,177,179,177,178,175,175,177,177,177,175,174,174,171,173,174,169,169,173,135,135,127,127,127,127,141,169,171,172,188,192,219,221,222,223,223,221,221,220,219,221,221,220,219,216,205,188,187,186,179,175,175,174,173,145,135,128,134,127,147,147,146,131,134,134,132,132,139,134,132,132,132,132,132,131,132,132,132,131,131,132,131,132,131,132,131,131,132,131,131,132,131,131,131,132,131,131,131,131,124,131,124,131,131,131,131,123,131,123,131,123,131,123,131,124,123,123,124,123,123,131,123,123,123,123,123,123,31,49,44,54,45,49,45,45,45,45,45,45,45, +17,17,28,17,29,28,17,28,17,28,17,17,17,17,17,13,28,17,13,17,17,17,17,18,17,18,28,17,18,28,17,28,17,29,17,18,17,28,17,19,29,29,29,18,28,29,18,17,18,29,29,29,29,29,29,29,29,29,29,39,29,35,35,30,30,30,36,31,143,143,27,138,130,130,123,123,131,144,124,131,131,131,146,152,152,160,159,154,36,89,211,88,73,54,70,97,103,111,108,93,82,71,70,70,70,70,66,82,54,44,54,65,62,194,193,3,16,25,24,31,24,31,24,27,129,36,63,99,114,119,227,235,235,235,233,235,234,234,234,228,234,228,234,234,235,235,235,233,235,235,235,233,233,233,119,118,114,103,98,83,70,76,46,47,36,154,156,156,161,172,177,176,175,173,173,135,175,217,135,134,134,128,128,128,134,135,173,169,173,173,174,174,174,173,169,173,135,127,127,127,127,145,145,171,171,184,185,205,218,221,223,224,225,225,223,222,220,220,221,220,218,188,179,176,175,175,171,147,123,126,127,126,134,134,134,134,134,132,132,132,132,132,132,132,132,132,132,132,132,132,131,132,131,132,131,131,131,132,131,131,132,131,131,131,131,131,124,131,123,131,124,123,131,123,131,123,131,123,124,123,124,123,123,131,123,123,123,131,123,123,123,123,123,123,131,143,50,49,44,49,45,49,45,45,45,44,45,44, +17,17,18,17,17,17,17,17,17,17,18,28,28,28,17,17,28,17,17,18,28,28,17,17,17,28,17,28,17,18,29,13,28,17,29,17,18,29,29,17,29,17,29,17,29,18,17,29,28,28,18,28,29,28,29,29,29,29,29,34,39,39,39,39,39,35,35,35,35,35,30,36,30,36,31,31,31,31,36,30,22,30,30,12,12,12,12,18,11,33,93,235,236,233,114,103,108,108,109,103,93,82,71,70,70,70,66,66,72,70,40,49,65,68,81,225,2,3,120,26,122,120,121,168,175,143,33,39,29,44,59,63,68,83,96,97,102,103,103,109,109,109,109,111,112,109,111,111,112,114,114,113,119,113,113,212,211,212,110,113,105,71,40,39,49,44,34,39,34,34,35,35,48,156,152,145,135,127,135,135,128,135,128,134,134,128,134,128,128,128,128,128,128,169,173,169,171,175,171,173,169,169,169,173,169,173,135,169,169,169,169,169,169,174,170,172,186,191,191,219,221,223,221,220,218,186,165,161,186,176,174,173,169,145,169,135,135,141,141,134,134,134,134,134,132,132,134,132,132,132,134,132,132,132,132,132,132,132,131,132,131,132,131,131,132,131,131,131,132,131,131,131,131,132,124,124,131,131,123,131,123,131,131,123,123,123,123,123,123,123,123,131,123,123,123,130,40,49,49,44,45,45,45,45,45,45,44,45, +17,17,17,17,17,29,17,17,18,17,17,17,17,17,29,17,28,17,28,17,17,28,13,29,17,18,17,13,17,17,17,17,29,18,17,29,29,17,17,29,17,18,17,29,17,28,28,28,28,28,28,28,18,29,28,29,28,29,29,29,34,34,34,39,39,39,39,40,40,40,45,40,45,45,49,50,49,50,59,54,40,29,50,50,49,40,19,29,19,39,18,4,44,113,238,228,114,102,99,103,103,103,97,82,82,71,71,70,70,72,65,39,40,60,65,182,218,155,165,168,171,177,179,191,205,163,40,70,65,65,54,49,49,40,49,40,40,40,44,40,44,44,44,44,44,44,39,34,34,28,18,12,5,4,4,4,240,4,4,5,6,5,6,12,19,39,19,17,18,18,34,34,17,34,45,46,152,135,135,135,135,128,128,141,128,135,135,135,128,135,128,135,135,128,128,128,128,128,134,128,128,128,128,128,141,171,173,169,169,171,175,172,177,172,176,175,175,171,169,149,145,135,149,184,134,183,223,223,222,223,224,220,205,188,186,186,179,177,175,175,174,173,173,145,169,135,134,134,134,134,134,134,134,134,132,134,132,132,134,132,132,139,132,132,131,132,132,131,131,131,131,132,131,131,131,131,131,124,131,124,131,124,123,124,123,131,124,123,131,124,123,123,123,123,131,123,46,45,49,45,45,45,45,45,45,45,45,44, +17,17,17,17,17,17,17,17,17,17,13,17,17,17,17,18,17,17,29,17,17,17,17,17,17,17,18,17,29,17,18,17,17,28,17,17,28,29,17,28,28,28,28,18,29,28,18,28,28,29,28,28,28,28,28,29,29,28,29,29,34,29,34,34,39,39,39,39,39,40,39,45,40,45,40,49,49,49,49,54,54,49,40,40,49,50,40,39,29,29,29,40,18,240,44,212,238,228,111,99,99,102,103,102,93,68,71,71,70,66,72,39,39,40,61,58,188,220,221,188,175,174,173,127,181,114,5,65,65,65,61,65,61,60,55,60,61,61,60,61,55,54,60,61,60,60,61,61,61,65,65,65,65,65,65,65,65,54,54,50,50,39,18,18,18,39,34,13,18,34,39,45,18,12,45,44,46,168,145,135,135,135,135,128,135,128,128,135,135,135,135,128,128,128,135,135,135,169,173,169,135,169,128,128,128,173,135,134,128,128,134,128,128,128,128,128,169,169,173,171,171,176,172,169,169,171,145,169,175,188,218,225,225,221,222,219,205,191,188,187,186,179,177,175,175,175,173,173,173,145,135,169,147,128,141,134,134,134,134,134,134,134,134,134,132,132,132,134,132,132,132,131,132,131,132,131,131,131,132,131,131,131,131,131,124,123,131,131,123,131,131,123,131,124,123,123,36,45,49,45,45,45,45,45,45,44,45,44, +17,17,17,17,17,17,17,18,17,17,17,17,13,17,17,17,17,28,17,17,28,28,28,17,18,17,17,17,17,17,17,17,29,17,13,28,17,29,17,29,29,17,29,17,17,29,17,29,29,17,29,28,28,18,28,28,28,29,28,28,28,34,34,29,34,34,39,39,39,39,40,40,45,39,45,49,45,49,49,49,49,54,54,49,39,39,29,39,39,29,29,29,39,29,5,240,61,228,235,118,106,99,99,102,102,99,91,82,71,71,71,71,29,40,44,65,79,162,179,177,171,173,145,181,93,114,39,65,65,65,65,65,65,65,65,65,65,65,61,65,65,65,65,65,61,65,65,61,65,61,65,61,65,61,65,65,65,65,65,65,65,70,49,12,18,39,34,18,18,45,45,45,19,19,45,39,45,36,174,174,174,174,169,174,173,145,173,135,135,135,135,135,135,135,135,135,128,128,135,135,173,135,135,135,135,135,135,135,135,135,135,135,135,135,128,135,128,128,134,128,128,128,134,134,169,135,171,173,169,135,135,149,171,188,221,231,225,221,222,221,218,191,191,187,186,186,177,177,177,177,175,174,174,174,173,173,173,173,169,135,169,128,147,134,134,134,134,134,134,132,132,134,132,132,132,131,132,131,131,131,131,132,131,131,131,131,124,123,124,123,131,123,124,123,123,131,31,45,45,49,45,45,45,45,44,45,44,45, +17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,28,17,13,17,17,18,17,17,17,17,17,18,17,28,17,18,28,17,28,17,28,17,18,28,17,17,28,28,28,29,28,17,29,17,29,28,28,28,18,28,28,28,29,32,29,34,34,28,34,34,34,34,34,39,39,39,39,39,40,45,40,45,45,45,45,49,45,49,49,54,49,44,40,40,44,45,29,34,29,39,40,5,240,91,238,227,114,103,96,98,98,97,97,83,82,72,82,71,28,39,49,61,75,77,163,164,164,89,100,69,108,66,45,65,65,65,65,61,65,65,65,65,65,65,65,61,65,61,55,55,61,61,60,55,61,54,55,54,54,54,55,55,55,54,54,54,65,50,28,34,45,44,29,17,39,45,45,17,18,45,39,45,35,171,175,175,174,173,175,175,174,175,174,174,174,174,174,173,174,173,173,173,173,145,173,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,173,135,173,169,173,147,147,173,173,169,173,135,173,173,173,173,173,145,145,169,184,205,222,224,225,222,221,221,218,205,191,188,187,186,186,186,179,179,179,179,175,175,175,174,174,174,173,173,173,173,169,135,141,141,134,134,134,134,134,134,134,132,132,132,132,131,131,131,131,131,131,131,131,131,131,123,131,123,131,124,138,45,45,45,45,45,45,45,45,44,45,44, +12,17,17,17,28,17,17,17,17,18,17,17,17,17,17,18,17,17,18,17,17,17,17,28,17,17,17,28,13,17,17,29,17,28,28,28,28,17,28,28,28,18,17,29,17,29,28,29,28,28,28,28,28,28,28,28,28,28,28,28,28,28,34,28,33,34,34,34,34,34,39,39,39,39,39,39,39,45,45,45,45,45,49,45,49,49,54,54,54,54,55,49,39,34,34,29,39,40,240,39,113,237,227,111,101,91,93,97,98,93,66,55,70,49,29,34,44,70,68,68,66,59,64,101,83,97,103,18,65,65,65,65,61,61,61,55,61,54,61,61,59,60,55,59,54,59,55,54,54,54,54,54,60,59,54,59,49,59,59,59,59,55,49,12,29,44,45,34,17,44,44,45,18,19,39,39,39,39,155,175,175,174,174,175,174,174,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,174,173,173,173,173,145,173,145,135,135,173,135,135,135,135,135,135,134,147,135,145,135,173,145,173,173,173,173,174,174,175,174,173,145,145,171,179,192,222,225,225,222,221,218,216,205,191,191,187,188,188,186,186,186,175,179,177,175,175,175,175,175,174,174,174,173,173,173,147,141,134,134,134,132,134,132,134,134,134,132,132,132,131,132,131,124,131,131,131,131,123,132,142,35,45,45,45,45,45,45,44,45,44,44, +17,17,17,17,13,17,17,17,17,17,17,17,18,17,17,17,17,17,17,17,17,17,28,13,17,13,17,17,17,17,18,17,17,18,17,17,28,28,17,28,28,28,29,17,28,17,29,17,28,28,18,28,28,28,28,28,28,28,28,28,29,28,28,29,28,29,34,33,34,34,34,34,39,39,39,39,45,39,45,45,45,45,45,45,45,49,45,49,49,49,59,54,55,49,40,29,29,39,40,29,240,44,212,237,118,111,101,91,91,97,97,60,45,49,40,28,34,45,66,68,68,70,61,91,83,82,112,18,54,65,61,54,55,61,60,61,55,60,54,54,54,54,54,59,55,49,59,49,59,59,59,59,49,59,49,49,59,49,49,49,49,49,49,28,34,44,45,29,28,34,45,45,12,18,39,35,39,39,158,175,174,174,174,174,173,173,173,173,173,173,173,173,173,145,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,145,173,135,173,145,135,135,147,141,135,128,135,135,128,135,128,135,128,128,135,128,135,147,135,169,135,135,141,145,175,187,218,223,224,221,220,218,218,216,192,192,191,188,188,188,186,186,186,179,179,175,179,175,175,175,175,175,174,174,174,173,173,173,173,147,169,147,134,134,134,134,134,152,132,134,134,132,132,131,132,131,131,131,35,40,39,45,45,45,45,45,44,39,44, +17,17,17,17,17,17,17,28,17,17,17,13,17,17,12,17,17,17,17,17,13,17,17,17,17,17,17,18,28,17,17,17,18,17,17,18,17,28,28,28,17,29,17,29,29,28,28,17,29,28,17,29,28,28,28,28,28,28,28,29,28,29,28,32,28,34,32,29,34,33,34,34,34,34,39,39,39,39,45,39,45,40,45,39,45,45,45,45,49,49,49,49,59,54,54,49,44,39,39,40,40,18,240,59,228,236,226,109,91,82,88,97,66,49,49,39,18,29,49,62,66,70,61,82,83,68,109,49,45,65,54,54,54,54,55,54,54,60,54,59,59,59,59,59,49,59,49,59,49,49,49,49,49,49,49,49,44,49,49,49,49,49,49,28,28,44,45,34,18,34,45,45,19,20,20,19,35,39,58,174,145,173,174,173,145,173,145,173,145,173,135,145,173,135,169,145,145,145,135,145,173,135,169,135,145,135,145,135,135,135,135,135,135,135,135,135,135,135,135,135,135,134,134,128,128,135,128,128,128,128,128,135,128,128,128,128,128,135,141,128,141,135,135,135,127,127,173,184,191,221,223,221,220,220,218,218,216,216,205,188,188,188,187,186,186,186,186,186,186,186,175,179,175,175,175,175,175,175,174,174,173,173,173,169,141,141,133,141,134,134,134,134,134,144,131,131,139,36,39,39,39,45,45,45,44,39,39,39, +12,17,17,17,17,17,17,13,17,17,17,17,17,17,17,18,17,13,17,17,17,17,17,18,17,28,17,17,17,13,28,17,17,17,18,17,18,28,17,17,29,17,29,28,17,17,18,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,33,28,28,28,29,29,32,34,34,34,34,34,34,39,39,39,39,39,39,39,45,45,45,45,45,45,45,45,45,45,49,49,49,59,54,45,40,34,39,40,39,5,240,70,235,236,119,103,91,82,93,71,55,55,40,28,39,49,62,62,62,66,82,63,103,59,44,60,60,54,54,59,54,49,59,49,59,59,49,49,49,49,49,49,49,49,49,49,49,44,49,44,45,45,45,45,45,45,45,45,45,29,34,45,45,34,17,45,44,44,34,31,31,22,30,46,48,146,134,152,152,134,147,152,134,134,134,144,134,134,134,134,134,134,134,134,134,132,134,134,134,134,134,134,134,134,134,134,134,134,134,134,128,134,128,134,134,134,134,144,134,128,128,128,128,128,128,128,128,128,128,128,135,128,135,128,128,128,128,127,127,135,135,173,171,174,175,175,175,190,220,221,220,218,216,205,205,216,216,216,191,191,191,188,188,186,186,186,186,186,186,186,179,175,179,175,175,175,175,175,175,174,174,173,173,169,135,147,147,128,134,134,134,134,134,31,39,39,39,39,39,39,44,44,39,39, +17,17,12,18,17,17,17,17,17,13,17,17,18,17,17,17,17,17,18,17,18,17,17,17,17,13,17,18,17,17,17,28,13,17,17,17,17,17,28,28,17,29,17,28,28,29,17,28,28,28,29,28,28,28,28,28,28,28,28,29,28,28,28,29,28,33,28,33,29,29,32,34,34,34,34,34,34,34,39,39,39,39,39,40,39,39,39,39,45,45,45,45,49,45,45,49,49,59,49,45,40,34,34,40,29,4,240,68,236,233,117,101,82,91,72,65,55,40,28,34,49,61,61,59,66,82,60,45,45,60,49,59,59,49,59,59,49,49,49,49,49,49,49,49,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,34,34,44,45,34,28,45,49,49,20,153,174,23,23,15,159,188,173,175,175,171,173,135,169,169,135,169,147,147,147,147,147,141,147,147,134,134,134,134,134,134,147,134,134,134,141,134,134,133,134,134,132,134,134,134,134,134,134,139,134,134,128,134,128,134,128,128,141,128,128,128,127,127,135,135,173,174,175,172,179,179,179,179,172,162,160,151,120,121,140,174,187,205,218,220,218,216,216,205,216,205,191,191,191,188,188,188,188,188,186,186,186,186,186,186,186,179,179,175,175,175,175,175,175,174,174,173,173,169,169,134,134,141,147,146,34,39,39,39,39,39,39,39,39,39, +12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,17,29,17,17,17,28,28,17,17,28,13,18,17,17,28,17,18,17,28,17,29,17,29,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,28,28,29,34,32,32,34,29,34,34,34,34,34,39,39,39,39,39,39,39,39,39,45,45,40,45,45,45,45,45,45,49,59,49,44,34,34,34,34,28,4,4,83,237,119,111,96,83,72,65,65,40,18,44,49,59,59,59,66,60,45,44,45,59,49,49,49,49,49,59,49,49,49,49,45,45,45,44,45,45,45,45,44,45,45,44,45,44,39,45,44,44,44,45,39,45,39,34,45,44,39,34,45,49,44,29,153,173,27,23,23,153,187,127,135,135,135,135,135,135,128,135,135,135,128,128,135,128,135,128,135,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,134,128,134,134,128,144,134,128,134,134,128,127,127,127,135,169,173,171,172,179,179,179,179,167,167,160,153,151,16,16,16,16,22,23,24,23,23,16,129,148,174,186,188,216,218,216,205,191,205,191,191,205,191,191,191,188,188,188,188,188,186,186,186,186,186,186,186,179,175,175,175,175,175,175,174,174,171,173,173,147,173,146,35,39,39,39,39,39,44,34,39,39, +17,12,17,17,17,17,12,17,17,17,12,17,17,17,17,18,17,12,17,17,17,17,17,17,18,17,17,17,28,17,17,29,17,17,13,28,28,28,17,17,28,28,18,28,28,17,18,28,17,29,28,28,28,17,28,28,18,28,28,28,28,28,28,28,28,28,32,28,32,32,28,29,34,34,34,34,34,33,34,34,34,34,39,34,39,39,39,39,44,39,39,44,40,45,45,45,45,44,45,45,49,49,49,44,34,34,33,29,18,240,33,228,237,227,109,96,71,61,65,45,29,40,49,59,59,49,59,45,44,45,49,49,49,49,49,49,44,45,45,44,45,45,45,45,45,45,44,44,44,45,44,39,44,44,44,44,44,44,39,39,44,39,44,39,39,44,44,39,39,49,50,45,35,155,173,138,31,23,143,186,127,135,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,134,128,128,134,128,128,135,128,134,131,126,128,141,173,174,175,179,179,179,179,179,179,171,138,25,16,16,16,16,16,16,25,25,31,31,24,24,24,24,24,23,23,22,15,15,16,144,175,179,188,205,205,191,191,205,191,191,191,205,191,191,191,188,188,188,188,188,186,186,186,186,186,186,179,179,179,175,175,175,175,174,174,174,173,173,168,35,34,39,39,39,39,34,44,39,34, +12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,13,17,17,17,17,17,17,17,13,28,17,17,17,18,17,17,28,17,17,28,28,17,17,17,18,28,17,17,29,17,28,17,29,28,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,33,28,28,34,28,29,34,34,34,34,34,34,34,34,39,39,39,39,40,39,39,44,44,44,44,45,45,45,45,45,45,45,49,44,39,29,32,28,5,240,59,228,237,119,111,68,55,55,40,18,45,49,49,59,44,44,44,44,59,45,49,44,45,45,44,45,45,45,45,44,44,44,44,44,44,44,44,34,44,44,44,39,44,34,44,34,44,44,34,44,39,44,44,44,45,45,39,35,35,47,22,152,147,131,23,23,143,179,135,128,127,128,128,128,128,128,128,128,128,128,128,134,127,128,128,128,128,128,134,128,128,128,134,128,134,134,134,128,134,134,126,127,128,135,135,135,135,145,173,168,177,177,184,167,163,79,57,46,45,45,35,47,154,168,147,130,26,138,25,25,31,24,31,24,24,24,24,24,24,23,24,22,22,22,20,14,14,15,27,148,174,179,187,191,205,191,205,205,191,205,191,205,191,191,191,191,191,191,188,188,188,186,186,186,179,175,175,179,175,175,175,175,175,174,174,175,30,33,39,39,34,39,34,34,34,34, +17,17,17,17,17,17,17,13,17,17,17,17,13,17,17,17,17,18,17,17,17,17,13,17,17,17,18,17,17,17,17,28,17,17,17,28,13,17,17,28,17,28,28,18,17,17,28,29,17,28,28,29,17,28,28,28,28,28,28,28,29,28,28,28,28,28,28,28,28,28,33,28,28,32,29,32,34,28,34,32,32,34,34,34,34,34,34,34,34,34,34,39,39,39,39,39,39,39,44,44,44,44,45,44,45,45,45,44,44,39,33,28,4,240,40,83,235,228,118,90,65,49,40,45,49,44,44,44,34,44,45,45,44,45,45,45,45,45,44,45,44,44,44,44,44,44,39,44,39,44,44,34,44,34,34,44,34,44,34,39,34,34,34,34,34,39,39,39,39,39,30,24,23,146,173,134,143,23,25,177,135,128,134,128,128,128,128,128,128,128,128,128,128,128,128,128,134,128,134,128,128,128,134,128,128,127,128,128,128,135,173,173,171,171,161,160,155,158,154,58,57,51,50,45,34,34,33,33,33,44,44,45,44,44,44,46,46,48,154,153,152,151,138,26,25,24,24,24,24,24,23,23,22,22,22,20,15,20,20,14,19,14,14,15,25,144,171,177,179,187,188,191,191,191,191,191,191,205,205,191,216,191,191,191,191,191,191,191,188,186,186,186,179,179,175,175,174,179,36,33,34,34,39,34,34,34,34,34, +17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,18,17,17,17,18,17,17,28,17,17,28,17,17,28,28,17,28,18,17,17,18,17,18,17,17,17,29,17,28,18,17,28,29,17,28,17,28,28,17,28,28,28,28,28,28,28,28,28,32,28,33,28,34,28,34,34,29,32,34,34,32,34,34,34,34,34,34,34,34,34,34,39,39,39,39,39,39,44,39,39,44,44,44,45,45,45,44,34,28,28,28,240,240,69,237,228,117,66,49,29,49,49,44,44,44,44,44,44,45,44,44,44,44,45,44,39,44,44,39,44,34,44,34,44,34,44,34,44,34,44,34,34,34,34,34,34,34,34,33,34,34,34,34,39,34,39,20,24,23,151,145,135,144,23,24,175,135,128,128,128,128,128,128,128,128,128,128,128,128,127,135,128,128,128,128,141,135,145,145,169,173,171,171,168,161,156,158,48,47,46,35,44,33,33,33,33,33,34,44,44,45,44,44,45,45,45,45,45,45,45,45,44,44,44,44,45,46,48,155,153,151,143,16,23,22,22,22,22,22,20,15,14,20,14,14,20,14,20,14,14,13,19,8,15,148,169,174,177,186,187,188,191,188,191,191,191,205,205,205,216,216,216,216,216,216,216,216,191,191,191,191,191,186,188,154,28,34,34,34,34,34,34,34,32, +17,17,17,12,17,17,17,17,17,18,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,17,17,17,17,17,13,28,17,17,17,29,17,17,18,17,17,17,29,17,17,17,28,28,28,17,17,28,17,28,28,17,17,29,28,17,29,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,28,32,34,28,34,32,34,28,34,28,34,34,33,34,34,34,34,34,39,39,39,44,34,44,44,39,44,44,44,44,39,45,45,39,34,33,33,28,240,240,97,237,228,102,49,18,49,49,39,33,44,44,34,44,44,44,39,44,39,44,44,44,34,44,34,44,34,44,34,44,34,34,34,34,34,34,34,33,32,34,34,33,34,34,34,34,34,34,34,34,34,29,31,22,153,173,133,146,23,25,175,127,127,135,127,135,135,135,135,135,135,145,135,145,173,169,169,169,168,168,155,155,154,154,48,47,46,35,35,39,34,33,33,34,44,45,45,45,45,45,39,44,45,44,44,44,45,45,45,44,44,44,45,45,45,45,45,45,45,45,45,44,34,44,46,47,154,153,151,138,23,22,9,20,22,20,20,15,14,20,14,20,14,20,20,20,14,20,18,12,14,23,155,174,174,173,173,174,177,177,179,177,177,177,177,175,177,175,179,175,186,186,187,188,191,216,218,191,219,182,4,34,34,34,34,34,34,34,34, +12,17,17,17,12,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,17,17,17,28,17,17,13,17,17,18,17,17,17,13,28,17,17,18,17,17,29,17,29,17,17,18,17,28,17,29,28,17,29,17,28,28,28,28,28,17,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,32,28,34,28,32,28,33,28,33,34,33,34,32,34,34,33,34,33,34,33,34,34,34,34,44,34,39,44,34,44,39,44,44,39,44,44,39,34,32,34,28,240,4,104,238,226,61,12,49,49,33,44,44,44,39,44,39,44,44,44,44,44,34,44,44,34,44,34,34,34,34,33,34,34,34,34,33,34,32,34,34,33,34,33,34,33,34,32,34,34,34,29,29,30,24,146,177,134,36,15,9,175,173,173,174,168,171,174,168,168,168,155,153,154,154,36,47,47,46,35,35,39,39,33,33,33,34,34,44,39,45,45,44,45,45,45,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,45,44,45,45,45,45,45,45,45,44,34,34,46,47,154,156,36,31,23,9,14,14,20,20,20,20,20,14,20,14,14,14,14,14,14,14,12,35,46,154,168,174,169,135,135,135,127,127,127,135,128,128,141,141,141,141,147,135,135,135,135,173,172,188,167,28,34,34,34,32,34,32,34,32, +17,17,17,17,17,12,17,17,17,17,17,13,17,17,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,29,17,17,17,28,17,17,17,17,28,17,17,29,17,28,17,28,17,17,28,17,28,17,17,28,28,28,28,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,28,28,32,28,28,32,32,28,32,34,34,29,32,34,32,34,32,34,32,32,34,34,34,34,34,39,34,39,39,39,39,44,39,39,44,44,44,34,32,34,17,240,17,229,228,102,33,49,49,39,32,59,61,44,39,44,34,34,34,34,44,34,34,34,34,34,34,33,34,34,32,34,32,34,34,33,32,32,32,32,33,34,34,28,34,34,34,34,34,34,34,29,23,142,168,24,18,105,47,142,169,151,30,236,78,6,35,34,34,34,34,32,33,33,33,33,34,39,39,39,39,44,39,39,44,39,44,44,39,44,39,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,39,44,44,44,44,44,45,45,45,45,44,34,34,35,36,154,155,154,31,22,22,20,22,20,14,20,20,20,20,20,30,20,20,20,20,29,35,39,34,47,160,175,177,169,135,135,135,135,171,177,186,186,187,187,186,186,179,171,171,141,141,141,152,29,34,34,34,34,34,34,32,32, +17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,17,17,17,12,17,17,17,17,17,17,17,18,17,17,17,18,17,17,28,17,28,17,17,28,17,28,28,28,17,28,28,17,29,18,17,28,17,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,28,28,28,32,34,34,29,32,29,32,34,34,34,33,34,33,34,34,34,34,34,34,39,34,34,44,34,39,39,39,44,44,34,34,28,5,240,78,212,109,102,62,18,39,59,65,34,39,34,44,34,44,34,34,34,33,34,33,33,34,34,32,34,32,34,32,32,32,29,34,34,32,34,32,32,34,32,28,34,32,34,34,29,34,28,20,20,20,5,17,235,229,6,8,240,59,235,82,4,34,34,34,39,39,39,39,34,39,39,34,39,44,44,39,44,44,39,44,39,34,44,44,44,44,44,34,44,34,44,34,44,34,44,44,34,34,44,44,44,34,44,44,34,44,34,44,44,44,44,44,44,44,44,39,44,39,44,44,39,44,44,44,44,34,34,34,46,47,31,31,24,23,23,23,22,22,22,22,23,23,23,23,23,31,36,30,36,30,30,22,31,167,188,188,191,191,191,204,190,183,181,162,154,153,156,155,167,184,187,186,186,186,20,28,34,34,34,32,34,34,32, +17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,18,17,17,17,17,17,28,17,17,28,17,17,17,28,17,17,28,17,28,17,28,28,17,18,28,17,18,28,17,17,28,17,29,28,28,28,17,28,28,28,28,28,28,28,17,28,28,28,28,28,28,28,28,28,32,28,28,28,28,32,32,32,32,32,28,33,32,32,32,32,32,32,29,28,32,34,32,34,33,34,32,34,32,34,34,34,34,34,44,34,39,44,44,44,34,28,240,240,44,97,97,62,44,49,59,34,34,34,34,34,34,34,34,34,34,34,34,34,34,32,34,34,32,34,34,34,34,32,32,32,32,28,28,34,28,34,29,34,29,29,28,29,32,34,28,33,19,5,44,234,118,4,18,5,64,228,72,4,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,39,34,44,34,44,44,44,44,34,44,34,44,34,44,34,34,34,34,34,34,44,34,44,34,34,44,34,34,34,44,34,34,34,44,44,34,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,34,33,44,35,35,23,31,31,31,24,24,24,24,23,23,24,24,24,24,24,24,24,31,31,138,16,16,31,151,36,15,2,9,9,9,15,15,23,23,23,16,16,120,151,167,190,20,32,34,32,34,32,32,32,32, +17,17,12,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,18,17,28,17,18,28,17,29,17,29,17,28,17,17,17,29,17,17,17,17,29,28,28,17,28,28,17,28,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,28,32,28,28,28,32,32,32,32,32,28,32,32,32,32,32,32,32,32,32,34,32,34,34,32,34,34,34,33,34,34,34,34,34,44,34,32,17,240,240,62,65,39,34,32,34,33,33,34,34,34,34,34,32,32,34,32,34,32,34,34,32,32,34,32,33,32,32,28,32,28,33,28,33,32,28,32,32,32,28,28,32,34,34,29,29,29,240,62,234,102,4,12,240,106,235,71,5,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,34,34,44,34,34,34,34,34,34,44,34,34,34,44,34,34,34,34,34,34,34,34,44,34,44,34,44,34,34,44,44,34,44,44,44,44,34,44,44,44,44,34,44,34,44,44,44,34,44,44,34,44,44,35,35,35,30,30,30,31,31,24,24,23,24,24,24,31,24,23,22,30,22,22,20,20,30,30,22,22,22,22,23,23,24,24,24,24,24,23,20,12,28,34,28,34,32,32,32,32,32, +12,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,13,17,17,17,18,17,17,17,17,17,17,28,13,17,18,17,17,17,17,17,17,17,17,18,17,17,17,17,17,17,17,18,17,17,28,28,28,17,17,28,17,28,28,28,28,17,28,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,32,28,28,28,28,28,28,28,28,32,32,28,28,28,32,32,32,32,28,32,32,32,32,32,32,32,32,32,34,32,32,34,33,34,34,34,34,34,32,34,34,33,39,34,34,39,39,17,32,39,32,34,34,34,34,32,34,32,32,34,34,34,29,34,32,34,33,32,32,32,32,32,28,28,32,28,32,28,28,32,28,28,28,28,28,32,32,28,28,28,28,32,34,29,34,83,90,49,29,29,17,112,116,65,12,34,28,34,34,32,34,32,34,34,34,32,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,33,34,34,34,34,34,34,34,34,34,34,34,34,44,34,34,34,34,44,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,33,34,34,34,39,39,45,35,39,35,39,39,39,35,34,39,34,39,39,35,20,20,20,20,30,22,30,22,22,20,22,20,20,29,28,29,34,34,34,32,28,32,28,28,32, +17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,28,17,17,17,17,28,28,17,28,17,29,17,29,17,17,17,28,29,17,28,28,17,28,17,28,28,28,18,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,28,28,28,28,28,28,32,32,28,28,32,28,28,32,28,32,32,32,32,32,32,32,28,32,32,32,32,34,32,34,32,34,32,34,44,34,28,34,34,34,33,32,32,32,34,34,34,32,32,32,33,33,28,32,28,28,32,28,32,32,32,32,28,28,32,32,28,28,32,28,28,28,28,28,32,32,28,28,28,28,28,28,32,4,70,61,55,28,29,34,97,34,49,28,34,34,28,34,29,34,34,32,28,34,34,32,32,32,34,34,34,32,34,34,34,34,33,34,34,34,34,34,34,34,34,32,34,34,34,34,34,34,34,34,34,34,34,32,34,33,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,33,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,19,34,34,34,34,29,34,29,29,29,29,29,29,32,29,29,29,32,34,32,32,32,32,32,32,32,28, +17,17,12,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,12,17,28,10,17,17,17,17,17,28,17,17,17,17,28,17,28,17,28,17,17,17,17,28,17,17,17,17,28,28,17,17,17,28,17,28,28,28,17,18,17,17,17,28,28,28,17,28,28,28,28,28,28,28,17,28,28,28,28,28,17,28,28,28,28,28,28,28,28,28,28,28,32,28,28,28,28,28,28,32,32,28,28,32,32,28,32,28,28,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,28,32,32,32,32,32,32,32,34,32,32,28,28,32,28,32,32,32,28,32,28,28,32,28,32,28,28,28,28,28,32,28,28,28,28,28,28,28,32,28,28,28,28,28,28,32,61,44,28,28,17,70,66,44,28,32,32,32,28,32,32,32,34,32,32,28,34,34,34,34,32,32,34,34,32,34,32,34,32,34,32,34,32,34,32,32,34,32,32,32,34,32,34,32,34,32,34,34,34,34,34,34,34,34,34,34,34,32,34,34,34,34,34,32,34,32,34,34,34,34,34,32,34,34,34,32,34,34,32,34,32,34,32,34,32,34,34,34,34,34,34,34,34,32,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,29,34,34,34,32,32,28,32,32,32,28,28,28,28,28,32, +10,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,12,12,17,17,13,28,17,17,28,17,17,17,18,17,18,17,13,17,17,18,17,29,17,29,17,17,28,17,29,28,28,17,28,17,17,18,17,28,17,18,17,17,28,17,28,28,28,17,28,28,17,28,28,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,28,28,28,28,28,28,32,32,28,32,28,32,28,32,32,32,32,32,28,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,28,32,28,28,32,32,28,32,32,32,32,32,28,28,28,28,28,28,28,28,28,28,28,28,28,32,28,28,28,28,28,32,28,28,28,28,28,28,28,32,28,28,33,28,32,28,32,28,32,28,32,32,32,32,28,32,32,32,32,32,32,34,34,32,34,32,34,32,34,32,34,32,34,32,34,34,34,32,34,34,32,34,32,34,32,32,34,32,34,32,34,32,34,32,34,34,32,34,34,34,34,34,32,34,34,34,34,34,32,34,32,34,32,34,32,32,34,32,34,34,34,34,34,34,34,34,32,34,34,34,32,34,32,34,34,34,32,34,34,34,32,34,32,32,32,32,28,32,28,34,28,32,32,28,32,28,28,32,32,32,28,28,28,32,28,28,28, +17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,28,28,17,17,28,17,28,17,28,17,28,28,17,28,17,28,17,28,28,28,17,17,28,28,28,28,28,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,32,17,28,28,28,28,28,28,28,28,32,32,28,28,32,28,32,32,32,28,28,28,28,28,32,28,32,28,32,32,32,32,32,32,28,28,32,32,32,28,28,32,32,32,32,32,32,32,32,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,28,28,28,28,28,17,28,28,28,28,28,28,28,32,28,32,28,28,28,32,28,32,32,32,28,28,28,32,28,32,32,32,32,32,28,32,32,32,32,34,32,34,32,34,34,32,34,32,34,32,32,32,32,32,32,34,32,34,32,34,32,34,32,32,34,32,32,32,32,32,32,34,32,32,34,32,34,32,34,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,34,32,34,34,32,34,32,34,32,34,32,32,32,32,32,32,32,32,32,28,32,28,32,28,28,32,28,28,32,32,32,28,32,28,32,28,28,32,32,28,28,32,28,32, +12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,28,17,17,29,17,28,17,17,28,17,28,17,28,17,17,17,28,17,28,28,17,17,28,28,28,28,17,17,28,28,28,29,17,17,28,28,28,28,28,17,28,28,28,28,28,17,28,28,28,28,28,17,28,28,28,28,17,28,28,28,17,28,28,32,28,28,32,17,32,17,28,32,32,28,28,28,32,28,32,32,32,32,28,32,28,32,32,28,28,32,32,32,32,28,28,32,28,32,28,28,32,32,32,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,17,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,32,28,28,28,28,32,32,28,28,32,32,28,28,32,32,28,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,28,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,28,32,28,32,32,28,32,32,28,28,28,32,32,28,17,32,32,32,17,28,32,28,17,28,28, +17,17,12,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,18,17,17,28,17,17,17,29,17,17,17,17,17,18,28,28,17,17,28,28,28,28,17,28,17,28,28,17,28,28,17,17,28,17,28,28,17,28,28,17,28,28,17,28,28,28,17,28,28,28,28,28,28,28,28,28,17,28,28,28,28,28,28,28,28,17,32,28,28,17,28,17,32,28,28,28,28,28,17,28,17,32,28,28,28,32,28,28,28,17,32,32,32,28,28,32,28,28,32,28,32,28,28,32,32,28,28,28,28,32,32,32,32,28,28,28,28,28,17,28,28,28,28,28,28,17,28,28,28,28,32,17,28,17,28,17,28,28,28,28,28,28,28,28,28,32,28,32,28,28,28,28,32,28,28,32,28,32,32,28,28,32,32,28,32,32,32,32,32,28,32,32,32,32,32,32,28,32,32,32,28,32,32,32,28,32,32,32,28,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,28,32,32,32,32,32,28,28,32,32,32,32,28,32,28,28,28,28,17,32,28,28,17,32,28,32,28,17,32,28,28,17,32,28,28,17, +17,12,17,17,17,17,17,17,12,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,17,18,17,17,17,17,28,17,28,17,17,17,17,17,28,17,17,17,17,17,17,28,17,17,17,28,17,17,28,17,17,28,17,28,28,28,17,28,17,28,28,17,28,28,28,28,28,17,28,17,28,28,17,28,28,28,28,17,28,28,28,28,17,28,17,28,17,17,28,28,17,28,28,28,28,28,17,28,17,32,28,28,28,28,28,17,17,32,28,17,28,32,28,32,28,17,32,28,28,28,28,28,28,28,28,28,32,28,28,32,28,28,32,17,32,28,28,28,28,28,17,28,28,28,28,17,28,17,28,28,28,17,28,17,28,28,28,28,28,28,28,28,17,28,28,17,32,28,28,28,28,28,32,28,32,28,28,28,28,28,28,28,32,28,28,28,32,32,28,32,32,28,32,32,32,32,32,28,32,32,32,28,28,28,32,28,32,32,32,32,28,32,32,32,28,32,28,32,32,32,32,32,32,32,32,32,32,32,28,32,32,28,32,32,32,32,32,32,32,28,32,32,32,32,32,28,32,28,28,32,32,32,28,32,28,32,32,32,28,28,28,28,32,32,32,28,28,17,32,28,32,28,28,32,32,28,17,32,28,32,28,17,32,28,28,28,17,28,28,32,17,32, +17,17,12,17,17,17,12,17,17,17,17,17,17,12,17,17,12,17,17,17,12,17,17,12,18,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,28,17,17,28,17,17,28,17,28,17,28,17,28,28,17,28,28,17,17,28,17,28,17,28,17,28,17,28,28,17,28,28,28,28,28,28,28,17,28,17,28,28,28,28,17,28,28,17,28,28,28,28,17,28,17,28,17,32,17,28,28,28,32,17,17,32,17,32,17,28,28,32,28,28,32,17,28,17,28,28,17,28,32,28,28,17,28,32,28,28,28,32,28,28,32,17,28,28,17,28,32,28,32,28,28,17,28,17,28,28,28,28,28,17,28,28,28,28,28,17,28,17,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,17,28,28,28,28,28,28,28,32,32,17,32,28,28,28,28,32,32,28,32,28,28,32,32,28,32,28,28,28,28,32,32,32,28,28,32,32,28,32,32,32,28,32,32,32,32,32,32,28,32,32,32,32,32,32,32,32,32,32,32,32,28,32,32,32,32,17,32,32,32,32,32,28,32,28,32,32,32,32,32,32,28,32,32,32,32,32,32,32,17,32,32,32,32,28,32,17,32,17,17,17,32,28,17,28,17,28,32,17,32,17,28,28,28,17,28,28,28, +17,17,17,12,17,12,17,10,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,17,17,28,13,17,29,17,17,17,18,17,28,28,17,17,28,17,17,28,17,28,17,28,17,17,28,17,28,28,17,28,28,28,28,17,28,28,17,28,17,28,17,28,28,28,28,28,17,28,17,28,28,17,28,28,17,17,17,28,28,17,28,17,28,17,32,17,32,17,28,28,28,17,28,17,28,17,28,17,32,17,28,28,28,32,17,28,28,28,17,28,28,28,28,17,28,17,28,32,28,17,28,28,28,28,28,28,17,28,17,28,28,28,28,28,17,28,17,28,28,28,28,17,28,17,28,28,28,28,28,28,28,17,28,28,17,28,17,28,17,28,17,28,28,28,28,28,28,17,32,28,32,28,17,28,28,28,28,32,28,32,28,32,28,32,32,28,28,28,28,17,28,32,28,28,17,28,32,32,32,28,28,32,17,28,28,32,32,17,28,32,32,32,32,32,28,28,32,28,32,32,17,28,32,17,32,32,32,17,32,32,32,32,17,32,28,28,32,28,28,28,32,17,28,32,32,32,17,32,17,32,32,17,32,32,28,32,17,32,17,28,28,28,28,32,17,17,32,17,28,17,32,17,28,17,32,17,28,17,32,17,17,17, +17,12,17,17,17,17,17,12,12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,17,18,17,17,17,17,13,28,17,28,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,28,17,17,28,17,17,28,28,17,17,28,17,28,17,17,28,17,17,17,17,28,17,17,28,17,28,28,28,28,17,28,17,28,28,28,17,28,17,28,28,17,28,28,28,17,28,17,28,28,17,28,17,28,17,28,17,28,17,32,17,28,17,28,17,28,28,17,28,17,32,17,28,28,17,28,28,17,28,17,28,28,28,28,28,17,28,28,28,28,32,28,28,28,28,28,28,28,28,17,17,28,28,28,28,28,17,28,17,28,17,28,28,17,28,17,28,17,28,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,17,32,28,28,28,28,17,32,17,28,28,28,28,32,28,17,28,17,32,28,28,28,28,17,32,28,32,32,17,32,17,32,32,28,32,17,32,28,28,32,32,28,28,17,32,32,28,17,28,32,17,28,32,32,28,28,17,32,28,28,17,32,28,32,28,32,32,17,28,28,32,32,28,28,28,17,32,32,32,28,32,17,28,32,17,32,17,32,28,32,32,17,32,17,17,32,28,17,17,28,17,17,17,32,17,17,28,17,28,17,28,28,28, +17,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,18,17,17,18,28,17,17,17,17,28,17,28,17,17,28,17,17,28,17,29,17,28,17,28,28,28,17,17,18,28,28,17,28,28,28,28,28,28,17,28,28,28,28,28,17,28,28,28,17,28,17,28,17,17,28,17,28,28,17,17,28,17,28,28,17,28,17,28,17,28,28,17,28,17,28,17,28,17,28,17,28,28,17,28,17,28,28,28,28,28,28,17,28,17,28,28,28,17,28,17,28,28,28,17,28,17,28,17,28,28,28,17,28,28,17,28,17,28,28,28,28,17,28,28,28,17,28,28,28,17,28,17,28,17,28,28,17,28,17,28,17,28,17,28,17,28,28,28,17,28,17,28,28,28,28,28,28,17,28,17,28,32,28,28,28,28,28,17,28,28,28,17,28,17,28,28,28,28,17,28,17,32,28,32,17,32,17,32,28,32,32,17,32,28,32,32,28,32,32,17,17,32,32,32,28,17,32,28,32,17,32,17,28,28,32,32,32,17,32,28,32,32,28,28,17,32,17,32,32,17,28,17,32,17,17,28,17,32,17,28,28,17,17,17,28,17,28,17,28,17,17,28,28,17,17,17,28,17,17, +17,12,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,18,17,17,17,17,18,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,18,17,17,28,28,17,28,17,18,17,17,29,17,28,28,28,17,29,17,17,17,28,28,28,17,28,17,17,17,28,17,28,17,28,17,28,28,17,28,28,17,28,17,28,28,17,28,17,17,28,28,17,28,17,17,28,17,28,17,28,17,17,28,17,28,17,28,17,28,17,28,17,17,28,17,28,28,17,28,28,17,28,28,28,28,28,17,28,28,28,28,17,28,28,28,28,17,28,28,28,17,28,28,28,17,28,17,28,17,17,17,28,28,17,28,17,28,28,17,17,28,28,28,28,17,28,17,28,28,28,28,28,28,28,28,28,28,17,28,28,28,28,17,28,28,17,28,17,28,17,28,28,28,17,28,17,28,28,32,17,17,28,17,28,28,32,17,28,17,28,17,28,28,17,28,32,17,28,17,32,17,32,28,17,32,17,17,32,17,28,28,28,17,28,17,28,32,17,32,17,28,32,32,32,17,28,17,28,32,17,32,17,32,17,32,17,28,32,17,17,32,28,28,17,32,32,17,28,17,28,17,17,28,17,28,17,17,28,17,17,28,28,17,17,28,28,17,28,17,28, +17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,18,17,17,17,17,17,28,18,17,17,17,17,17,17,28,28,17,28,17,17,29,17,28,17,17,28,17,28,28,28,28,17,28,28,17,28,17,28,17,17,28,17,28,17,28,17,28,28,17,28,28,17,28,17,28,28,17,28,28,17,28,17,28,17,28,17,28,17,28,17,28,17,28,28,28,17,28,17,17,28,17,28,28,17,28,17,28,28,28,17,28,17,28,32,17,28,17,28,28,17,28,17,28,17,17,28,28,28,17,28,28,28,28,17,28,17,28,28,17,28,28,28,17,17,28,28,28,17,28,17,28,17,28,17,28,17,17,28,28,28,17,28,17,28,28,17,28,17,28,17,28,28,17,32,17,28,28,28,17,17,28,28,17,28,17,17,17,17,28,17,32,17,28,17,32,17,28,17,28,17,32,17,32,17,32,17,28,32,32,17,28,17,28,32,17,28,32,17,28,32,17,32,17,17,28,17,32,17,32,17,28,32,28,28,17,28,28,32,17,28,32,17,17,17,28,17,17,28,17,28,17,17,28,17,17,28,17,17,28,17,28,17,17,17,28,17,17,17,28,17,28,17, +12,17,17,12,17,17,12,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,13,17,17,18,17,17,18,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,28,17,17,17,17,17,28,17,17,17,17,28,17,28,28,17,28,17,17,28,17,28,17,28,28,28,28,17,28,17,28,17,17,28,17,28,17,28,17,28,17,17,28,17,28,17,17,28,17,28,17,28,28,17,28,17,28,28,28,17,28,17,17,17,28,17,28,28,17,28,17,28,28,17,28,28,17,28,28,28,28,28,17,28,28,28,17,28,28,17,28,28,17,28,17,17,28,28,28,17,17,28,28,28,28,28,17,28,17,17,17,28,28,17,28,17,28,28,28,17,28,17,28,17,28,17,28,28,17,28,28,28,17,28,28,17,28,28,28,17,28,28,17,28,28,17,17,28,28,17,28,28,28,28,28,28,28,17,28,17,28,17,28,17,17,28,28,17,28,28,17,28,17,28,17,28,17,17,28,17,28,28,17,28,28,17,28,17,28,28,17,28,28,17,28,17,28,28,17,28,17,17,28,28,17,32,17,28,17,17,28,28,28,28,17,28,17,28,17,17,28,17,28,28,17,28,17,17,28,17,17,28,28,28,17,28,17,28,17,28,17, +17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,28,17,17,18,17,17,28,17,17,28,28,17,28,17,29,17,18,28,17,17,28,28,17,17,28,17,17,17,18,28,17,17,28,28,28,17,28,17,28,17,17,28,17,28,28,17,17,17,28,17,28,17,17,28,17,28,17,28,17,28,17,28,28,17,17,28,17,28,17,17,17,28,28,17,28,28,17,17,28,17,17,28,17,28,17,28,17,17,28,17,28,17,28,17,28,28,17,28,17,28,17,28,28,17,17,28,17,28,28,17,17,28,17,28,17,17,28,17,28,17,28,28,28,28,17,28,17,28,17,28,17,28,17,28,17,28,17,28,17,17,28,17,28,17,28,28,17,28,28,17,17,28,17,17,17,32,17,17,28,28,17,28,17,28,17,28,17,17,17,28,17,28,17,17,28,17,28,17,17,17,28,17,17,28,17,28,17,28,17,28,28,17,28,17,28,17,17,28,17,32,17,17,17,28,17,17,28,17,28,17,28,17,28,28,28,17,17,28,17,28,17,28,28,17,17,17,28,28,17,28,17,28,17,28,17,17,17,17,28,17,17,28,28,17,17,17,17,17,17,17,28,17,28, +17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,28,17,18,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,28,28,18,17,18,17,17,17,28,29,17,17,17,28,17,17,17,28,17,28,17,17,28,17,17,28,17,17,28,17,17,17,28,17,28,28,28,17,17,28,17,28,17,28,17,28,17,28,28,17,28,28,28,17,17,28,28,17,28,17,28,17,28,28,17,28,17,28,17,28,28,17,28,28,17,28,28,28,17,28,28,28,17,28,17,28,28,28,17,28,17,17,17,17,28,28,17,28,28,17,17,28,17,28,17,28,17,28,17,28,17,28,17,28,17,28,17,28,17,28,17,28,28,28,28,17,28,28,17,28,17,17,28,17,28,28,28,28,17,28,28,17,28,28,28,17,28,17,17,28,28,17,17,28,17,28,28,17,17,28,17,28,28,17,28,28,17,17,28,17,17,28,17,17,17,28,17,28,28,28,17,28,17,28,28,17,28,17,28,17,28,17,28,28,17,17,17,17,28,28,17,28,17,28,17,17,28,28,28,17,17,28,28,17,28,28,17,28,28,17,28,17,28,28,17,17,28,17,28,17,28,17,17,28,17,17, +17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,29,17,17,17,17,17,17,17,17,18,17,17,17,17,29,17,17,17,17,28,28,17,28,17,17,17,17,17,17,17,17,17,28,29,17,17,17,17,17,17,28,17,28,17,28,28,28,28,28,17,28,17,28,28,17,17,17,28,17,28,17,17,17,17,28,17,28,28,17,28,17,28,17,17,17,17,28,17,17,17,28,17,17,17,17,17,28,17,28,17,17,28,17,28,17,28,17,28,28,17,28,28,17,17,28,28,17,28,17,28,17,28,17,17,17,28,28,28,17,28,17,17,17,28,17,28,28,17,28,28,17,28,17,28,28,28,17,28,17,28,17,28,17,28,17,28,17,28,17,17,17,28,17,28,17,28,28,17,28,17,28,17,17,17,28,17,17,28,17,17,17,17,28,17,28,17,17,28,28,17,28,17,17,17,28,17,17,17,17,28,17,17,17,28,17,17,28,28,17,28,17,28,17,28,17,17,28,28,17,28,17,17,28,17,28,17,28,17,28,17,28,28,28,28,17,17,17,28,17,17,28,28,29,17,17,28,28,28,17,17,28,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, +17,12,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,12,17,17,17,17,17,17,17,13,28,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,18,17,28,28,17,28,28,28,17,28,17,28,17,17,28,28,17,17,17,29,17,17,17,17,17,28,28,28,17,28,17,17,28,28,17,28,17,17,17,28,17,28,28,28,17,17,28,28,28,28,17,28,17,28,28,17,17,28,28,17,28,28,17,28,17,17,28,28,28,17,28,17,28,17,28,17,28,28,28,17,17,17,28,17,28,17,28,17,17,28,17,17,28,17,28,17,28,17,17,17,28,17,28,17,28,17,28,17,28,17,28,17,28,28,17,28,28,28,17,28,17,28,17,17,17,28,17,28,17,28,28,17,17,17,17,28,17,17,17,17,17,17,17,28,17,17,17,28,17,28,17,28,17,17,17,17,17,28,17,28,17,17,28,17,28,17,28,28,17,28,17,17,17,17,28,28,17,17,28,17,17,28,17,17,17,17,17,17,28,17,28,17,28,17,28,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17, +17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,28,17,17,17,28,17,28,17,17,28,17,17,17,28,17,17,18,17,17,17,18,17,17,17,17,17,28,28,17,17,28,28,28,17,17,17,17,17,17,17,17,28,17,28,17,17,17,28,17,17,17,17,17,17,28,17,28,17,17,17,17,17,17,28,17,17,17,17,28,17,28,28,28,17,17,28,17,28,17,17,28,17,17,28,28,28,17,28,17,28,17,28,17,28,17,17,17,17,28,28,28,17,17,17,17,28,17,28,17,17,28,17,17,17,28,17,28,28,28,17,17,28,17,28,17,28,17,28,17,28,17,17,28,17,17,17,17,17,17,17,28,17,28,17,28,28,17,28,17,17,28,17,17,17,17,17,17,17,17,28,17,17,28,17,17,17,17,17,17,17,17,17,28,17,17,17,17,28,17,17,17,17,17,28,17,17,28,17,17,17,17,28,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,28,17,28,17,28,17,17,17,17,17,28,17,17,28,28,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17, +17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,17,18,17,17,17,28,28,13,17,17,28,28,17,17,28,17,17,17,17,17,17,17,17,28,17,17,28,17,17,28,28,17,18,17,17,17,28,17,17,17,28,17,17,28,17,28,28,17,17,28,17,28,28,17,17,17,28,28,28,28,28,28,28,17,17,28,17,17,17,17,28,28,17,17,28,28,17,28,28,28,17,17,17,28,17,17,17,28,28,28,17,28,17,28,17,17,28,28,17,17,17,17,17,17,17,17,28,17,28,28,28,17,28,17,28,17,28,28,17,17,28,28,17,28,17,17,17,28,17,28,17,28,28,17,28,28,17,17,17,28,17,17,17,28,17,28,17,28,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,28,17,17,17,28,17,28,28,28,28,17,17,28,17,28,28,17,17,28,17,17,28,17,17,17,17,17,28,17,17,17,17,28,17,17,28,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17, +17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,28,13,17,17,17,17,17,17,17,17,17,17,17,28,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,28,17,29,17,17,17,17,17,28,28,17,17,28,17,17,17,17,17,28,17,17,17,17,28,17,17,17,17,17,28,17,28,17,28,17,17,17,17,17,17,17,28,17,17,28,17,17,17,28,28,28,17,17,17,28,17,17,28,17,17,17,28,28,28,17,28,17,28,13,17,17,17,28,17,28,28,28,28,17,28,17,17,17,17,17,28,28,17,17,17,17,28,17,28,13,17,17,28,17,28,17,28,17,17,28,17,28,17,17,28,17,28,17,17,28,17,17,17,17,17,28,17,17,17,17,17,17,17,17,28,28,17,28,17,17,17,28,28,17,17,17,17,28,17,17,17,28,17,28,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,28,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17, +17,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,28,17,17,17,17,17,13,28,17,17,17,17,28,17,17,17,17,17,17,28,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,28,28,17,17,28,17,17,17,17,17,17,17,17,18,17,17,17,17,17,13,17,17,17,28,17,17,17,17,28,17,17,17,28,17,28,17,28,17,17,17,17,17,17,17,17,17,17,17,17,28,28,17,17,17,17,17,28,17,17,17,28,28,28,28,17,17,17,13,17,28,28,28,17,17,17,17,13,28,17,17,28,17,28,17,17,17,17,17,28,17,28,28,17,28,17,28,17,17,28,17,28,17,17,28,17,17,28,17,17,17,17,17,28,17,17,28,28,28,17,17,17,17,28,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17, +17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,13,28,17,17,17,13,17,17,17,17,17,18,17,28,28,17,28,17,17,17,17,17,17,17,28,17,28,17,17,17,17,17,17,17,28,17,17,17,17,17,28,28,17,17,28,17,17,28,28,17,17,17,17,17,17,17,17,28,17,17,28,17,17,28,17,17,28,17,17,17,28,17,17,28,17,17,17,28,17,28,17,28,17,17,17,17,17,17,13,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,28,28,17,28,17,28,17,28,17,17,28,17,28,17,17,28,17,28,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17, +17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,28,17,17,17,17,17,13,17,17,17,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,17,28,13,17,18,17,18,17,17,28,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,28,17,17,28,17,17,17,17,17,17,17,28,28,17,17,28,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,28,17,17,17,17,17,17,28,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,13,17,17,17,17,28,17,17,17,28,17,17,28,17,28,17,28,17,17,28,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,28,17,28,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,10,17,12,17,10,17,17,17,17, +17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,13,17,17,17,17,17,17,17,17,28,17,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,28,13,17,17,17,17,17,17,17,17,18,17,17,28,17,17,28,28,17,17,17,17,17,28,17,17,28,28,17,17,17,17,17,28,29,17,17,17,17,17,17,28,28,28,17,17,28,17,17,17,28,17,17,17,17,17,17,17,17,17,28,13,17,17,28,17,17,17,28,28,17,28,17,28,28,17,17,28,28,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,10,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,12,17,17,17,10,17,17,12,17,10, +17,12,17,17,12,17,17,12,17,17,17,17,17,17,17,17,12,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,28,17,17,17,17,17,17,17,17,28,17,17,17,18,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,28,17,17,17,17,29,17,28,17,17,17,17,17,17,28,28,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,28,17,28,17,17,28,28,28,17,28,17,17,17,17,17,17,28,17,28,17,17,17,17,17,17,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,13,28,17,17,13,28,17,28,17,28,17,13,28,17,28,28,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,10,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,12,17,12,17,17,17,17,17,17,12,17,12,17,12,17,17,12,17,17,17,17,17,10,17,12,17,17,17,17, +17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,28,17,17,13,17,17,18,17,17,17,17,17,17,17,17,17,17,17,18,17,28,17,17,17,17,17,17,17,17,28,17,17,17,17,28,17,17,17,17,13,28,17,17,17,17,17,17,17,17,29,17,17,13,17,17,28,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,28,17,17,17,17,28,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,10,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,12,17,12,10,17,17,12,17,10,17,17,17,12,17, +17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,28,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,17,17,17,17,17,17,17,28,17,28,17,29,17,17,17,29,17,17,17,17,29,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,10,17,17,17,17,17,17,17,17,10, +17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,17,17,17,28,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,28,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,12,17,17,17,17,12,17,17,17,17,17,17,17,17,10,17,10,17,10,10,17,17,17, +17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,28,17,17,17,17,28,17,28,17,17,17,17,13,17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,12,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,10,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,12,17,12,17,10,17,17,12,17,17,12,17,17,17,17,17,17,17,17,12,17,17,10,17,17,17,17,10,17,17,17,17,12,17,17,17,12,17,17,17,17,12,17,10,17,17,12,17,17,10,10, +17,17,10,17,17,17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,10,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,17,17,13,17,17,17,17,13,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,12,17,12,17,12,17,17,17,12,17,17,17,17,17,17,12,17,10,17,17,17,12,17,17,12,17,17,12,17,17,12,17,10,17,17,12,17,17,10,17,12,17,17,12,10,17,17,17,17,17,17,12,17,12,17,17,17,17,12,17,10,17,10,17,12,17,17,17,10,17,10,17,17,10,17,12,10,17,17,10,17,17, +10,17,17,12,17,17,10,10,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,12,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,12,10,12,17,12,17,17,17,12,17,17,17,17,12,17,17,12,17,17,12,17,17,12,17,17,10,17,17,12,17,17,17,10,17,17,17,17,12,17,17,10,17,17,17,17,17,17,12,10,17,17,17,12,17,17,17,17,12,17,17,12,17,10,17,12,17,17,10,17,10,17,10,10, +17,10,17,10,17,10,17,17,10,17,17,17,12,17,17,17,10,17,17,12,17,17,17,17,17,17,17,12,17,17,17,10,17,17,10,17,17,12,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,12,12,17,17,17,17,17,17,17,17,17,12,17,10,17,17,17,17,17,17,17,12,17,12,17,17,17,12,17,17,17,12,17,17,17,17,17,17,12,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,17,17,12,17,17,17,17,17,17,17,10,17,17,17,12,17,17,17,17,17,10,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,12,17,17,10,17,12,17,10,10,12,17,10,12,17,17,12,17,17,10,17,17,12,17,12,17,17,10,17,17,17,12,17,10,17,17,10,17,17,12,17,17,17,17,17,17,10,17,17,10,10,17,10,17, +17,10,10,17,17,17,10,11,17,10,17,10,17,17,17,17,12,17,17,17,17,12,17,10,17,12,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,12,17,17,10,17,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,12,17,17,12,17,17,17,12,17,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,12,17,17,17,12,17,12,17,12,17,17,12,17,17,17,17,12,17,17,17,12,17,17,12,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,17,17,12,17,12,17,12,17,12,17,17,10,17,17,12,10,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,12,17,17,12,17,17,17,12,17,17,12,17,17,12,17,12,17,17,17,17,12,17,17,17,17,17,12,10,17,10,17,12,17,12,17,17,17,17,12,17,17,12,17,12,17,10,17,17,17,17,12,17,17,12,17,17,17,17,17,10,12,17,17,17,17,12,17,10,17,17,17,17,17,12,17,12,17,10,17,10,17,12,17,10,17,10,17,17,12,10,17,17,10,10,17,17,17,10,11, +10,10,17,10,17,10,17,17,11,17,17,17,10,17,17,12,17,17,12,17,10,17,17,17,10,17,17,10,17,10,17,12,17,17,17,12,10,17,17,17,10,17,12,17,17,12,17,17,17,17,17,12,17,12,17,17,12,10,17,10,17,17,17,17,17,17,12,17,17,12,17,17,12,17,12,17,17,17,12,17,17,17,12,10,17,17,12,17,10,17,17,17,12,17,17,17,17,17,17,12,17,17,17,12,17,17,17,12,17,17,12,10,17,17,17,17,12,17,17,12,17,12,17,17,17,17,17,17,12,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,12,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,12,17,10,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,12,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,12,17,17,10,17,17,17,12,17,17,10,17,17,12,17,10,17,17,12,10,17,17,17,17,12,17,17,17,12,17,17,17,10,17,12,10,10,11,17,17,17,10,17,12,17,17,17,10,10,17,12,10,17,10,17,17,12,10,17,10,17,10,17,17,10,10,10,17,10,10,17,10,17,17,10,10,17,10, +17,17,10,17,10,10,10,10,10,17,10,10,17,12,17,10,17,17,10,17,10,17,10,12,17,17,10,17,10,17,17,17,17,12,17,17,12,17,17,12,17,17,17,12,17,17,17,17,12,17,10,17,17,17,17,12,17,17,10,17,10,17,10,17,12,17,17,10,17,17,12,17,10,17,17,17,17,17,17,17,12,10,17,17,10,17,17,12,17,10,12,17,17,12,17,17,12,17,12,17,17,12,17,17,17,17,12,17,17,17,17,12,17,17,12,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,17,17,12,17,12,17,17,12,17,17,12,17,12,17,17,17,12,17,12,17,17,17,17,12,10,12,17,10,17,12,17,12,17,10,12,17,12,17,17,17,17,17,10,17,12,17,17,17,12,10,17,17,12,17,12,17,12,17,17,17,12,17,17,12,17,17,12,17,17,12,17,17,17,12,17,17,17,17,17,12,17,17,17,17,10,17,17,17,10,17,10,17,17,17,17,10,12,17,17,10,17,12,10,17,10,17,10,12,17,12,17,17,10,12,10,17,17,10,12,10,17,12,17,12,17,10,10,10,17,12,17,10,10,17,10,17,10,17,12,17,17,17,10,17,10,17,12,17,17,10,12,17,10,10,17,10,17,12,17,10,12,17,17,17,10,17,17,17,10,17,11,10,10,17,10,10, +10,17,17,10,17,17,17,10,17,10,17,10,17,17,17,10,10,10,17,10,17,10,17,11,10,17,17,10,17,12,17,12,17,17,10,17,17,12,17,10,17,12,17,17,10,17,17,10,17,10,10,12,17,10,17,17,10,10,17,11,10,17,10,17,17,10,17,17,12,17,17,17,17,12,17,17,10,17,12,17,17,10,12,17,12,10,12,17,17,17,17,12,17,17,12,17,17,17,10,10,17,17,10,12,17,17,17,10,17,10,17,17,10,17,17,10,10,12,17,17,12,17,10,17,12,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,10,12,17,17,17,17,17,10,12,17,17,17,17,10,17,17,17,10,17,10,10,17,10,17,10,10,12,17,10,17,10,17,12,17,17,17,12,17,12,17,17,17,17,17,17,12,12,17,17,17,17,12,17,17,17,12,17,12,17,12,17,12,17,10,12,17,17,12,12,12,17,12,10,17,17,17,12,17,12,17,12,17,17,17,10,17,17,17,17,17,10,12,17,17,10,17,17,10,17,17,10,17,17,10,17,10,17,12,17,10,17,10,12,17,10,10,17,11,17,11,10,17,10,10,10,17,10,12,17,10,17,12,17,10,10,17,17,10,17,17,17,10,17,10,17,10,17,10,10,10,10,17,10,10,17,10,17,10,17,17,10,17,10, +10,11,17,10,11,10,11,17,10,10,17,11,10,10,17,10,17,17,10,17,17,10,10,17,17,11,17,10,10,17,17,17,11,10,11,10,11,17,17,10,10,17,10,10,10,10,11,17,10,17,17,17,10,17,17,11,17,17,10,17,17,10,17,17,10,17,10,11,17,17,10,17,10,17,17,12,17,10,17,17,10,17,10,11,17,17,17,12,17,17,12,17,12,10,17,10,10,10,17,12,17,10,17,10,17,17,12,17,12,17,10,17,12,17,10,12,17,17,17,12,17,10,17,12,10,17,17,17,12,17,17,17,12,17,10,17,12,17,12,10,12,17,17,17,12,17,17,10,12,17,12,10,17,17,10,17,10,10,17,10,10,10,10,17,12,17,10,10,11,12,17,17,17,17,12,10,17,17,17,17,10,17,17,17,12,17,17,12,17,12,17,17,12,12,10,17,17,12,17,12,17,17,10,17,12,12,17,12,17,17,17,12,17,17,17,17,17,17,12,10,17,17,10,17,10,17,17,12,10,17,12,10,10,10,11,17,10,17,12,10,10,17,10,12,17,17,17,12,17,17,10,11,17,10,17,12,10,17,17,12,17,17,10,10,10,17,10,10,17,12,10,17,17,10,10,17,10,10,17,17,10,10,17,10,17,10,10,10,10,10,10,17,17,17,10,17,10,10,17,10,17,10,17,10,17,10,10,10, +10,10,11,10,10,17,17,10,11,17,10,10,10,17,11,10,17,10,17,17,10,17,17,10,10,10,11,10,17,10,17,10,10,17,10,17,17,10,11,17,10,17,10,17,17,17,10,10,17,17,10,10,17,17,10,10,17,10,17,10,11,10,17,10,17,10,17,10,17,12,10,12,10,17,10,17,10,17,10,11,10,12,17,10,11,10,11,17,12,10,17,17,10,10,17,12,17,17,17,10,12,10,12,10,10,11,17,12,17,12,11,17,17,10,10,17,17,12,10,17,12,12,10,17,12,17,17,12,17,17,12,17,17,12,17,17,17,17,17,10,17,17,12,10,17,17,10,10,17,10,17,12,17,12,17,12,10,17,12,10,17,17,12,17,10,10,11,17,10,11,17,10,17,10,17,17,12,17,12,10,17,12,17,10,17,17,12,17,17,17,17,12,17,17,12,10,10,17,17,17,17,17,12,17,17,17,17,17,17,12,17,17,17,12,12,17,10,10,17,17,12,17,12,17,10,17,12,10,17,10,17,17,17,10,17,10,17,10,17,17,17,10,10,17,10,17,10,17,17,10,10,10,12,17,10,11,17,10,10,17,10,10,17,10,12,17,10,10,17,10,17,12,17,10,17,17,10,10,17,11,10,17,10,10,17,10,11,17,10,10,17,10,10,10,11,10,10,17,11,17,10,10,17,10,10,11,17,17, +10,17,10,17,17,10,10,11,10,10,11,17,11,10,10,17,10,10,10,10,17,11,11,10,17,17,10,17,10,17,10,17,10,17,10,10,10,17,10,17,11,10,17,10,10,11,10,17,11,10,17,10,11,10,17,17,17,10,10,17,10,17,17,10,17,10,10,17,10,17,17,11,17,10,17,10,17,10,17,10,17,17,10,10,17,11,17,10,17,12,17,10,12,17,10,17,10,12,10,17,17,17,10,17,10,11,10,17,17,10,10,17,10,17,12,17,10,17,17,10,17,10,10,17,10,10,17,12,17,10,17,10,10,17,10,12,17,10,12,17,10,17,17,17,10,10,17,12,17,10,17,17,17,17,12,17,17,10,17,17,10,17,10,17,11,10,10,11,10,12,11,10,12,10,12,17,10,10,17,12,10,17,12,17,12,17,17,10,17,10,17,17,12,17,17,10,12,17,10,17,12,10,17,12,10,17,10,12,17,17,12,17,17,17,17,10,12,17,11,10,17,10,17,10,12,17,17,10,17,11,10,10,10,17,10,17,10,11,17,11,10,17,11,10,10,12,17,11,10,17,12,17,10,10,17,10,17,17,11,10,17,10,10,17,11,12,17,10,17,11,17,10,10,11,17,10,17,11,10,10,17,11,17,10,10,17,10,10,11,11,11,10,17,17,10,17,11,10,10,10,17,10,11,10,11,10,11,10, +17,11,10,10,10,17,10,10,17,10,10,10,17,11,10,11,10,17,11,10,17,10,17,10,11,10,17,10,10,11,10,10,17,10,17,10,17,10,17,17,10,11,10,17,10,17,11,10,10,17,11,17,10,11,10,11,11,17,11,11,17,10,17,10,17,10,17,11,17,11,10,10,11,10,10,17,12,17,10,17,12,17,10,11,10,10,17,11,11,17,10,10,11,10,17,12,17,11,10,12,17,10,12,11,17,10,12,10,17,17,10,10,17,12,17,10,10,10,12,17,10,17,17,12,17,12,17,11,10,12,17,17,10,12,17,10,17,17,17,17,12,10,17,10,17,12,17,10,17,12,17,10,10,17,17,10,12,17,10,10,10,12,10,17,10,17,12,10,17,10,17,10,17,10,17,10,17,17,11,10,10,10,17,10,17,10,12,17,17,12,17,10,17,17,10,10,17,10,17,12,17,10,17,17,12,17,17,17,10,12,17,10,10,10,17,17,17,10,10,17,10,10,10,17,10,10,10,10,17,10,17,10,17,10,17,11,17,10,11,10,11,10,10,17,11,10,17,10,10,17,10,10,17,10,10,17,11,10,17,11,10,17,11,10,17,10,10,17,11,10,17,10,17,10,10,11,11,10,11,10,10,10,10,10,17,10,11,10,10,10,17,10,10,11,10,11,10,17,11,10,10,17,10,17,10,17,10,10, +10,10,11,17,10,10,17,10,11,10,11,11,10,10,17,10,10,11,10,17,11,10,11,11,10,11,10,11,10,17,10,17,10,10,11,11,17,10,11,10,17,10,10,11,10,17,10,11,17,11,10,10,10,17,10,10,10,11,10,17,10,10,11,17,10,11,17,10,10,10,17,10,17,11,17,12,17,10,11,10,17,11,17,11,10,11,10,10,10,10,17,10,17,10,17,10,17,10,17,10,11,10,11,10,10,12,10,17,12,10,17,10,10,11,17,10,17,12,10,17,12,10,12,10,11,17,10,17,10,11,10,12,17,10,10,17,12,10,12,10,10,17,12,17,10,17,17,10,11,10,17,12,17,10,10,17,10,10,17,10,17,10,17,12,10,10,11,10,11,10,11,10,10,10,10,11,11,11,10,17,10,12,17,12,10,17,17,17,12,10,11,17,12,10,17,12,17,10,12,10,10,12,11,10,17,10,10,10,17,10,11,17,12,17,12,10,10,11,12,10,10,12,17,10,17,12,17,10,11,10,17,10,10,10,11,10,11,10,10,10,10,11,10,17,10,11,17,11,10,10,10,17,10,11,17,10,10,11,10,10,11,10,10,11,10,11,10,11,17,10,10,17,10,11,10,10,11,10,11,11,10,17,10,11,10,17,10,11,10,17,10,10,17,10,10,17,10,11,10,11,17,10,10,10,11,10,10,11, +10,17,10,11,10,11,10,11,10,11,10,10,10,11,10,10,17,10,10,11,10,10,10,10,10,10,17,10,11,10,11,10,11,17,10,10,11,10,10,10,11,10,17,10,17,10,11,10,10,10,11,10,17,10,17,10,11,10,10,10,10,17,10,10,11,10,10,11,10,17,10,17,10,10,10,10,11,10,11,10,11,10,10,10,11,10,11,17,10,11,10,11,10,11,10,11,10,10,11,11,10,17,10,10,11,10,11,17,10,17,10,12,17,10,10,17,11,10,11,10,11,10,11,17,10,10,10,11,10,11,10,17,10,11,17,10,17,10,17,17,17,10,11,10,17,10,11,17,10,10,17,10,10,11,17,10,10,17,10,12,10,10,17,10,10,11,10,10,10,11,10,17,10,17,17,10,10,10,12,11,12,10,11,17,12,17,10,10,10,17,10,17,10,17,10,10,11,17,10,11,17,10,10,10,12,10,11,17,10,17,10,11,10,11,10,17,10,11,10,17,10,11,10,11,10,10,11,10,11,10,10,11,11,17,10,10,10,11,10,17,17,10,11,10,17,10,10,10,17,10,11,17,10,10,10,10,11,10,11,17,10,11,17,10,10,10,10,10,11,10,10,11,10,10,11,11,10,10,10,10,11,10,17,10,11,10,10,10,10,11,10,11,10,17,10,11,10,17,10,10,10,10,11,11,10,10,17,10, +10,11,11,10,10,10,11,10,10,10,11,10,11,10,11,10,10,11,10,10,17,10,11,10,11,11,11,10,11,10,10,10,17,11,10,11,10,17,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,10,11,10,11,10,11,10,11,10,17,11,10,10,11,10,11,10,17,10,11,17,11,11,10,11,10,10,10,11,10,11,10,11,10,11,11,10,10,10,11,10,10,10,10,11,10,10,10,11,11,11,10,10,11,10,17,10,11,10,10,11,10,11,10,10,10,11,10,11,10,11,10,12,17,11,10,10,17,11,10,17,10,11,11,17,10,10,11,10,10,10,11,10,10,11,10,17,11,17,10,11,10,17,11,17,10,10,17,11,10,11,10,10,11,10,11,10,10,11,10,11,10,17,10,11,10,10,10,11,10,10,17,10,17,10,11,11,10,10,10,11,10,11,10,12,10,11,11,10,12,17,11,10,12,10,10,12,17,10,12,10,11,10,11,10,10,10,17,10,11,10,11,11,10,17,10,11,10,11,10,11,10,17,11,10,10,11,10,10,17,11,10,11,17,11,10,17,10,11,10,17,11,17,10,17,10,11,10,10,10,11,10,11,10,11,10,10,11,10,10,11,10,10,11,11,17,10,10,10,11,11,10,10,11,10,11,10,11,10,17,10,11,10,11,10,10,17,11,10,10,10,10,10,11,10, +10,10,10,11,10,11,10,11,10,17,10,11,10,11,10,10,11,10,11,10,11,10,10,11,10,10,10,11,10,11,10,11,10,10,10,11,10,10,11,10,10,11,10,11,10,10,10,10,11,10,10,11,10,11,10,11,10,10,10,11,10,10,11,10,11,11,10,10,11,10,11,10,10,11,10,10,17,11,10,11,11,10,11,10,11,10,11,10,10,11,11,11,10,11,11,10,11,10,11,11,11,10,10,10,17,11,10,17,11,10,10,10,11,10,11,10,17,11,10,10,11,10,10,11,10,11,10,10,11,11,10,10,11,10,11,10,10,11,10,11,10,17,11,10,11,10,11,10,10,11,10,10,11,10,11,11,10,11,10,10,10,11,10,10,11,10,10,11,10,11,10,10,10,10,11,11,10,10,11,10,11,10,10,17,10,10,10,11,10,10,17,10,10,11,10,10,11,10,10,10,11,10,10,11,10,11,10,17,10,17,10,11,11,10,10,11,10,11,10,10,10,11,10,11,10,11,10,10,10,10,11,10,10,11,10,10,10,11,10,10,11,10,10,10,11,10,10,10,11,10,11,10,11,10,10,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,10,11,10,10,11,10,11,10,10,10,11,10,10,11,10,10,10,10,10,11,10,11,10,11,10,11,10,11,10,10,10,11,10,10, +10,11,10,10,10,10,11,10,11,10,10,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,11,10,10,11,11,10,11,10,11,10,11,10,10,10,11,10,11,10,10,11,11,10,10,11,10,10,10,11,10,10,11,11,10,10,11,10,10,11,10,10,11,11,11,10,10,11,10,11,10,11,10,10,11,10,10,11,11,10,10,11,10,11,10,10,10,10,11,10,11,10,10,11,10,4,10,11,10,11,10,10,10,11,10,11,10,11,10,11,10,11,10,10,11,10,11,10,11,10,11,10,11,10,10,10,11,10,10,11,10,11,10,11,10,10,10,11,10,11,10,11,10,11,11,10,10,11,10,10,10,11,10,10,11,10,11,10,10,11,10,11,10,11,10,10,11,10,11,10,10,10,11,10,10,11,10,10,11,10,10,11,17,10,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,12,10,11,10,10,11,10,10,11,10,17,10,11,10,10,11,10,10,11,10,11,10,10,10,11,10,11,10,11,10,10,11,10,11,10,11,10,11,10,11,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,10,10,10,10,11,10,10,10,11,10,10,11,10,11,10,10,10,10,11,10,11,10,10,11,10,11,10,11,11,10,10,11,10,10,10,10,10,10,10,10,11,10,10,10,11, +10,10,11,10,11,10,10,10,10,11,10,11,10,10,11,10,11,10,11,10,10,11,10,11,10,10,10,4,11,10,10,10,4,10,10,10,10,10,11,11,10,10,10,10,11,10,10,10,11,10,11,10,11,10,10,11,10,10,10,11,10,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,10,11,10,11,10,11,10,11,10,10,11,10,11,10,10,10,4,11,10,10,10,11,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,10,11,10,11,10,11,10,10,10,11,10,11,11,11,10,10,11,10,11,10,11,10,11,10,10,11,10,11,10,10,10,11,10,10,11,10,11,10,11,10,10,11,10,11,10,10,11,10,11,10,10,10,10,11,10,11,10,11,10,11,10,10,11,10,11,10,10,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,10,10,11,10,11,10,11,10,10,10,11,10,11,10,10,11,10,11,10,10,10,11,10,10,10,11,10,10,10,10,11,10,10,10,11,10,10,10,11,10,11,10,10,11,10,10,11,17,10,10,11,10,11,10,11,10,10,11,10,10,11,10,11,10,4,11,10,10,11,10,11,10,10,11,10,10,10,11,10,10,11,10,11,10,10,11,10,11,10,10,10,10,10,11,10,10,11,10,11,10,11,10,11,10,10,11,10,10, +10,11,10,11,10,11,10,10,11,10,11,10,10,11,10,11,4,10,10,11,10,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,11,10,10,10,10,11,10,11,10,10,4,11,10,10,10,11,10,10,11,10,11,10,11,10,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,10,11,10,10,10,11,10,10,11,10,11,10,10,10,11,4,11,10,10,11,10,11,4,10,10,11,10,11,10,10,11,10,11,10,10,11,10,10,11,10,4,10,10,4,10,11,10,10,11,10,10,10,11,11,10,10,11,10,10,11,10,11,10,10,11,10,11,10,11,10,10,11,10,10,10,11,10,10,11,10,10,10,11,10,10,11,10,10,11,10,11,10,11,10,10,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,11,10,11,10,11,11,10,10,10,11,10,11,10,11,10,11,10,11,10,10,11,10,10,11,10,10,11,10,11,4,10,10,10,11,10,10,11,10,10,10,11,10,11,10,11,10,10,11,10,10,11,10,10,10,11,10,10,11,10,10,11,10,11,10,10,11,10,11,10,11,10,10,10,10,10,11,10,10,10,11,10,11,10,11,10,11,10,11,10,10,4,10,10,10,11,4,10,11,10, +11,10,10,10,10,10,10,11,4,10,10,11,10,10,10,10,10,11,10,10,11,10,10,11,10,10,11,10,10,10,10,10,10,11,10,4,10,11,10,11,10,10,10,10,11,10,11,10,11,10,11,10,10,11,10,10,10,11,10,11,10,10,10,11,10,11,10,11,10,10,10,11,10,10,11,10,10,11,10,10,11,10,11,10,11,10,10,11,10,10,11,10,10,10,10,11,10,10,11,10,10,11,10,10,11,10,11,10,10,4,10,10,11,10,11,10,10,11,10,11,10,11,10,10,11,10,10,11,10,11,10,10,11,10,10,11,10,10,10,10,10,11,10,10,10,10,10,11,10,4,10,11,10,10,11,10,10,10,11,10,10,11,10,10,10,11,10,11,10,10,10,11,10,10,10,11,10,10,11,11,10,10,11,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,11,10,11,10,11,10,10,11,10,10,11,10,10,10,11,10,10,11,10,11,10,11,10,10,10,11,10,10,10,10,11,10,10,11,10,11,10,10,10,10,11,10,10,11,10,10,11,10,11,10,11,10,10,11,10,10,11,10,10,11,10,10,11,10,11,10,11,10,10,10,11,10,11,10,10,11,10,11,10,10,10,11,10,11,10,11,10,11,10,11,10,10,10,10,10,11,10,10,10,10,11,10,10,11,10,10,11,10,10,10, +10,10,11,10,11,10,10,10,10,10,11,10,10,11,10,11,10,10,11,10,10,11,10,10,10,11,10,11,11,11,11,10,11,10,4,10,11,10,11,10,11,10,11,10,10,10,10,11,10,10,10,10,4,10,10,10,11,10,10,10,11,10,11,10,10,10,10,10,10,11,10,10,10,11,10,10,11,4,10,11,10,11,10,10,10,11,10,10,11,10,10,11,10,11,10,10,11,10,10,10,11,4,10,10,10,11,10,11,10,11,10,11,10,10,10,11,10,10,10,10,11,10,11,10,10,11,10,10,11,10,11,10,10,11,11,10,11,10,11,10,11,10,11,10,11,10,11,4,11,10,11,10,10,11,10,10,11,10,10,11,10,10,11,10,10,10,10,10,11,10,11,10,11,10,11,10,11,4,10,10,11,10,11,10,10,11,10,11,10,11,10,11,10,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,11,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,10,11,10,11,10,11,10,10,10,11,10,11,10,10,11,10,10,10,10,11,10,10,11,10,10,10,10,11,10,10,10,10,11,4,11,10,11,10,10,10,11,10,11,10,11,10,11,10,11,10,4,11,10,11,10,10,10,10,10,10,10,11,10,10, +10,10,11,10,10,10,11,10,10,11,10,10,10,10,11,10,10,11,10,10,11,10,10,11,10,4,10,10,4,10,10,4,11,10,10,11,10,10,10,10,10,4,10,4,10,11,10,10,10,11,4,11,10,11,10,11,10,10,11,10,10,10,10,4,11,10,11,4,11,10,11,10,11,4,11,10,10,11,10,4,10,10,11,10,11,10,4,11,10,11,10,10,4,10,11,10,10,11,10,11,10,10,11,10,11,10,11,10,10,10,11,10,11,10,11,10,10,11,10,11,10,11,10,10,11,10,10,11,10,11,10,10,11,10,10,11,10,11,10,11,10,10,10,11,10,11,10,10,10,11,10,10,11,10,11,10,10,4,11,10,11,4,10,11,10,10,10,11,10,11,10,11,10,10,10,11,10,11,10,11,10,10,10,10,11,10,11,10,10,10,11,10,10,11,10,10,11,10,10,11,11,10,10,11,10,11,10,10,11,10,11,10,11,10,11,10,10,11,10,11,10,10,10,10,11,10,11,10,11,10,10,11,10,11,10,10,10,10,11,10,10,11,10,11,10,10,11,10,11,10,11,10,11,10,10,10,10,11,10,11,4,10,11,10,10,11,10,10,11,10,11,10,11,10,4,11,10,10,10,10,10,11,10,11,10,11,10,10,11,10,10,11,11,10,11,10,11,10,10,11,10,11,10,11,10,10,11,10, +10,10,10,10,11,10,4,10,11,10,10,10,11,4,10,10,11,10,10,10,10,10,11,4,10,10,11,10,10,11,10,10,10,4,11,4,10,10,4,11,10,11,10,11,10,10,10,11,4,10,10,10,10,10,10,4,11,10,4,10,11,4,10,11,10,10,10,11,10,4,10,11,10,10,10,11,10,10,10,11,10,11,10,11,4,10,11,10,10,4,11,10,10,11,10,11,4,10,10,4,10,11,10,4,10,10,10,10,11,11,10,10,4,11,10,10,11,10,11,10,10,10,10,11,10,10,11,10,11,10,10,11,10,10,11,10,10,11,10,4,10,11,10,10,10,10,10,11,11,10,10,11,10,4,10,10,10,11,10,10,10,11,10,10,11,10,11,10,10,4,10,4,11,10,11,10,10,10,11,10,10,10,11,10,11,10,10,11,10,11,10,10,11,10,11,10,10,11,10,4,10,10,11,10,10,4,10,11,10,11,10,10,10,10,10,10,11,10,11,10,10,11,10,11,10,10,10,10,10,11,4,10,10,10,11,10,4,11,10,4,11,10,10,10,11,10,10,10,11,10,10,11,10,10,11,10,10,10,11,10,10,11,10,10,11,10,11,10,10,11,10,10,10,10,11,10,10,11,10,10,11,4,10,11,10,10,10,11,10,11,10,10,10,10,10,4,10,11,10,4,10,10,11,10,10,10,10,10, +10,11,10,4,10,10,10,11,4,10,10,11,10,10,10,4,10,10,11,10,10,11,10,10,11,10,10,10,10,10,4,11,10,10,10,11,10,10,11,10,4,10,10,4,10,11,4,10,10,10,10,11,10,11,4,10,10,10,11,10,10,10,11,10,10,11,10,10,11,10,10,10,4,11,10,4,10,10,11,10,10,10,10,10,10,10,10,11,10,10,10,11,10,10,10,10,11,10,11,10,10,4,11,10,10,11,10,10,10,10,10,11,10,10,11,10,10,11,10,10,11,10,11,10,10,11,10,11,4,10,10,10,11,10,10,11,10,10,11,10,10,10,11,10,10,11,10,10,10,11,10,10,11,10,10,4,11,10,4,11,10,10,10,10,10,11,10,10,10,11,10,10,10,11,10,11,10,11,10,10,11,11,10,10,4,11,10,10,11,10,10,11,10,10,10,11,10,10,11,10,11,10,10,10,11,10,11,10,10,10,10,11,10,11,10,11,10,10,4,11,10,10,11,10,10,11,11,10,10,10,11,10,10,11,10,10,11,10,10,11,10,10,11,10,4,11,10,10,10,11,10,10,11,10,10,11,4,11,10,10,11,4,10,11,4,10,10,4,11,10,11,10,11,10,10,4,11,10,10,11,10,11,10,10,11,10,11,10,10,10,11,4,10,11,10,11,10,10,10,11,10,10,4,10,11,10,10,4, +10,10,4,11,10,4,11,10,10,11,10,10,10,11,10,11,10,4,10,10,11,4,10,10,10,4,11,4,10,11,10,10,4,10,11,4,10,4,10,10,11,10,11,10,10,10,11,4,10,4,11,10,10,4,11,4,10,10,10,4,11,10,10,10,10,10,4,11,10,4,11,10,10,10,10,11,10,11,4,11,10,11,10,11,10,11,10,4,11,10,11,10,4,11,10,4,10,11,10,4,11,10,10,11,10,10,11,10,4,11,10,10,10,11,4,11,10,4,10,11,10,4,10,11,10,10,10,10,11,10,10,11,4,11,10,10,11,4,10,11,10,10,10,4,11,10,11,10,10,4,11,10,4,10,10,11,10,10,11,10,4,11,10,11,4,10,10,4,11,10,10,11,10,10,4,10,10,10,11,10,10,4,11,10,11,10,11,10,4,10,11,4,11,10,10,10,11,10,4,10,10,4,11,10,4,10,10,11,10,4,11,10,11,10,10,10,11,10,11,10,10,11,10,11,10,10,4,11,10,10,10,4,11,10,11,10,10,11,10,10,10,11,10,10,11,10,10,11,10,10,11,10,4,11,10,10,10,10,11,10,10,11,10,4,10,11,10,10,10,10,4,10,10,10,11,10,10,10,11,10,10,10,11,4,10,10,4,11,10,4,10,11,10,10,10,10,11,10,11,10,10,11,10,10,10,4,11,10, +10,10,10,10,11,10,10,10,10,10,11,10,10,10,4,10,10,10,11,4,10,10,11,4,10,10,10,11,4,10,4,10,11,10,4,10,11,10,11,10,4,10,4,11,10,4,10,11,10,10,10,10,11,10,10,11,10,4,11,10,10,11,4,10,11,10,11,10,4,10,10,10,10,11,10,10,4,10,10,10,10,10,4,10,4,10,10,11,10,10,4,11,10,10,10,10,11,4,10,10,4,10,10,4,11,10,10,11,10,10,4,11,10,10,10,10,11,10,10,10,10,10,11,10,11,10,10,11,10,11,4,10,10,10,11,10,10,10,10,10,11,10,11,10,10,10,4,11,10,10,10,11,10,11,10,10,10,10,10,4,11,10,4,10,10,10,11,10,10,4,11,10,10,11,10,10,4,11,10,11,10,10,10,4,10,10,4,11,10,11,10,10,10,11,10,11,10,11,10,10,11,10,10,10,11,10,10,4,10,10,10,10,10,4,11,10,10,4,10,11,4,10,10,4,11,10,10,10,4,11,10,10,10,4,10,10,10,10,4,11,10,10,10,11,10,11,10,10,10,4,11,10,10,10,11,4,11,10,4,10,10,10,10,10,11,10,10,11,4,11,10,11,10,10,4,11,10,11,10,4,11,10,10,10,11,10,10,10,11,10,11,10,11,4,11,10,10,10,10,11,4,10,10,11,4,10,10,11, +4,10,11,4,10,10,11,4,11,10,10,4,11,10,10,10,11,10,4,10,11,10,4,11,10,11,10,4,10,10,11,10,4,10,11,10,4,10,4,10,11,10,10,4,10,11,4,10,10,11,4,10,4,11,4,10,10,10,10,10,4,10,11,10,4,10,10,10,11,10,4,11,10,10,4,11,10,4,11,10,11,4,10,11,10,11,10,10,4,11,10,10,10,4,11,10,4,10,11,4,10,11,4,10,4,10,4,10,10,10,11,10,10,4,11,10,10,10,11,4,11,10,4,10,10,11,4,10,10,10,10,10,11,4,10,10,11,10,11,4,10,10,10,4,11,10,10,10,10,11,10,4,10,10,10,10,11,4,11,10,10,10,10,4,11,10,4,10,11,10,10,4,10,10,11,10,11,10,4,10,4,11,10,10,11,10,10,10,10,10,10,11,10,4,11,10,10,4,10,11,10,10,11,4,10,11,10,11,10,11,4,10,11,10,10,11,10,11,10,10,10,10,11,10,10,11,10,10,10,10,4,11,10,11,10,11,10,11,10,10,4,11,4,10,10,4,10,10,11,10,10,10,11,10,10,11,10,11,10,10,11,10,11,10,4,10,11,4,10,10,10,4,11,10,10,4,10,10,10,10,10,11,4,10,4,11,10,10,10,10,4,10,4,10,10,4,10,11,4,10,10,11,4,10,10,11,10,10, +10,11,10,10,10,4,10,10,10,4,10,11,10,10,10,11,10,10,11,4,10,10,10,4,10,10,10,11,10,4,10,4,11,4,10,4,10,11,10,4,10,4,11,10,10,10,10,11,4,10,10,11,10,10,10,10,4,11,10,4,11,4,10,11,10,10,11,10,10,10,11,4,10,10,11,4,10,11,4,10,10,10,4,10,10,4,11,10,10,10,10,11,10,10,10,10,10,11,10,10,4,10,11,10,11,10,10,11,4,10,10,10,11,10,4,10,11,4,10,10,10,10,11,10,10,4,10,10,11,4,11,10,10,10,11,10,4,10,4,10,10,11,10,10,10,4,11,10,11,4,10,11,10,10,11,4,10,10,10,10,11,4,10,11,10,10,10,11,4,10,11,10,11,4,10,4,10,10,11,10,10,10,4,11,10,4,11,10,4,11,4,10,10,10,10,10,11,10,4,10,10,11,4,10,10,4,10,10,4,10,11,10,4,10,4,10,10,10,4,11,10,11,10,10,4,10,10,10,11,4,10,10,4,10,10,4,10,4,10,11,10,10,10,10,11,10,10,11,10,11,10,10,10,11,4,10,10,10,11,4,10,10,4,10,11,10,4,10,4,11,10,10,10,10,11,10,10,4,11,10,10,10,10,11,10,10,4,11,10,11,10,11,10,11,10,10,11,4,10,10,11,10,10,4,11,10,10,4, +10,10,4,11,10,10,10,11,4,11,10,4,10,11,4,10,10,10,4,10,10,11,4,10,4,11,4,10,10,11,10,10,10,4,10,10,11,4,10,11,10,11,10,4,11,4,10,4,10,4,11,10,10,11,4,10,11,10,4,11,10,10,10,4,10,10,4,10,4,11,10,11,4,11,10,10,10,10,10,4,11,10,10,10,11,10,10,4,11,10,4,10,4,11,10,4,11,10,4,11,10,10,4,10,10,4,11,4,10,4,11,10,10,10,11,4,10,10,10,11,10,10,10,4,11,10,11,10,4,10,10,4,11,10,10,10,11,10,11,10,10,4,10,11,10,10,10,10,10,10,10,10,4,11,10,10,10,11,4,10,10,11,10,10,4,11,10,10,10,11,10,10,10,11,10,11,10,4,10,4,11,10,10,10,10,10,10,10,11,10,10,4,11,10,10,4,10,4,11,10,4,10,10,4,11,10,11,4,10,10,4,10,10,11,10,10,11,4,10,10,4,10,4,11,10,10,4,11,10,10,11,10,10,10,11,10,10,11,10,4,10,11,10,4,10,10,11,10,10,10,11,10,10,10,10,10,11,10,10,10,10,10,11,10,10,10,11,10,10,4,10,11,10,11,10,10,10,11,10,11,4,10,11,4,10,11,10,10,4,10,10,4,10,4,11,10,4,10,11,10,10,10,11,10,10,10,11,10, +4,10,10,4,11,10,4,10,10,10,4,10,11,10,10,10,11,4,10,10,4,10,11,10,10,10,11,4,10,4,11,10,4,10,4,11,10,4,10,4,10,10,4,10,10,10,10,11,4,10,4,10,4,10,11,4,10,4,10,4,10,10,11,10,11,10,11,10,10,10,4,10,10,10,4,10,11,4,10,10,4,11,10,4,10,11,4,10,10,10,10,11,10,4,11,10,10,10,10,4,10,4,10,11,10,10,10,4,10,11,10,4,11,4,10,10,11,10,4,10,11,4,10,10,10,10,4,10,10,11,10,10,10,11,4,10,10,4,10,4,11,10,10,4,11,10,4,11,10,11,4,10,10,4,10,11,4,10,10,11,4,10,4,11,10,10,10,11,10,4,10,11,10,10,10,10,4,11,10,10,10,4,10,11,4,10,11,4,10,4,10,10,10,11,4,10,11,10,10,4,10,11,4,10,10,10,4,11,4,10,10,11,4,10,4,10,10,11,4,10,11,10,10,10,11,4,10,10,4,10,10,11,10,4,10,4,11,10,4,11,10,4,10,10,11,10,4,10,11,10,10,10,11,10,10,11,10,10,10,11,10,11,10,4,11,10,4,10,11,10,11,4,10,10,11,4,10,10,10,10,11,10,10,10,11,10,4,10,11,10,10,10,11,10,10,10,11,10,10,4,11,10,4,11,10,10,10,11, +10,11,4,10,10,11,10,10,11,4,10,4,10,10,11,4,10,11,4,10,11,10,10,4,11,4,10,4,11,10,4,11,10,10,11,4,10,10,11,10,11,4,10,11,4,11,10,4,10,11,10,10,11,4,10,10,10,11,4,10,11,4,10,10,4,10,4,11,10,4,10,11,10,10,11,4,10,11,10,10,10,4,10,11,4,10,11,10,10,11,4,10,4,11,10,4,4,11,10,10,10,11,4,10,4,11,10,11,10,4,10,10,10,10,11,10,4,11,10,4,10,10,11,10,11,4,10,11,10,4,10,11,4,10,11,10,4,11,10,10,10,11,10,10,10,11,10,10,4,10,11,10,4,11,4,10,10,11,10,10,10,11,10,10,4,11,10,4,10,11,10,4,10,10,4,11,10,10,10,4,10,11,10,10,11,4,10,10,10,11,10,11,4,10,10,10,10,4,10,11,10,4,10,4,11,4,10,10,11,10,10,4,11,10,10,11,4,10,10,10,4,10,11,4,10,11,10,10,10,11,4,10,4,10,11,10,10,10,10,4,10,10,11,10,10,10,11,10,4,10,11,4,10,11,10,4,10,11,10,10,4,10,11,10,10,10,11,10,4,10,10,10,11,10,10,11,10,10,11,4,10,11,10,10,4,10,11,10,10,11,4,10,10,10,11,4,10,10,11,10,4,10,10,10,10,11,4,10, +10,4,11,4,10,4,10,11,4,10,10,11,10,10,4,10,4,10,11,10,10,4,10,11,10,10,10,11,4,4,10,4,10,11,10,10,4,11,4,10,4,10,4,10,10,10,10,11,4,10,11,4,10,10,4,11,4,10,10,4,10,10,4,11,10,4,10,10,4,11,4,10,11,4,10,10,4,10,4,11,10,11,4,10,10,4,10,11,4,10,10,11,4,10,4,11,4,10,4,10,11,10,10,4,10,4,4,10,11,10,4,10,4,11,10,4,10,10,10,11,4,10,10,10,10,11,4,10,10,10,11,4,10,4,10,10,10,4,10,11,4,10,10,11,4,10,10,10,11,4,10,10,10,10,10,11,4,10,10,11,4,10,11,10,10,10,4,11,4,10,11,10,10,4,11,10,4,11,10,10,11,10,10,10,10,10,10,11,4,10,10,10,10,11,4,11,10,11,10,4,4,11,10,11,4,10,11,4,10,10,11,10,4,10,4,10,10,4,11,10,11,4,10,10,10,4,10,11,4,10,10,10,10,11,4,10,4,11,10,11,10,10,10,10,11,4,10,10,10,11,10,10,10,4,10,11,10,4,10,11,10,10,4,10,11,4,10,11,10,10,4,11,10,4,10,10,4,11,10,10,10,4,10,11,10,10,10,10,10,10,10,11,4,11,10,10,10,4,10,10,11,10,11,4,10,10,10,4, +10,10,10,10,11,10,10,4,10,11,4,10,4,11,10,10,11,10,10,4,11,10,4,10,4,11,4,10,4,11,10,10,4,10,4,11,10,10,4,10,11,10,10,4,11,4,10,4,10,10,4,10,11,10,11,4,10,4,11,10,4,10,11,10,4,11,10,4,10,10,10,4,4,10,11,4,11,10,10,10,4,10,10,11,4,10,10,4,10,11,4,10,10,10,10,4,10,10,11,4,10,4,11,10,4,10,10,10,4,10,10,11,10,10,10,11,10,4,10,10,10,11,4,10,4,10,10,11,4,10,10,10,10,11,10,11,10,10,10,4,10,11,4,10,10,10,4,11,10,10,10,11,4,10,10,4,10,11,4,10,10,4,10,4,11,4,10,10,10,10,4,10,11,10,10,4,10,10,4,10,10,4,11,4,10,11,10,4,10,4,11,4,10,4,10,10,4,10,4,11,10,10,10,4,10,10,4,10,11,4,10,10,11,10,10,11,10,10,10,4,10,10,4,11,10,10,10,4,10,11,4,11,10,10,10,10,11,10,4,10,10,11,4,10,10,10,10,11,10,10,10,11,10,11,10,10,4,11,10,10,4,11,10,10,10,10,10,4,10,10,11,10,4,11,10,4,10,10,4,11,10,10,10,4,10,11,10,4,11,10,10,10,4,10,10,11,10,10,11,10,10,10,4,10,4,11,10,10, +10,4,11,4,10,4,4,11,4,10,11,10,10,10,11,4,10,4,11,10,10,4,11,10,4,10,11,4,10,4,11,4,10,11,10,4,4,10,11,10,4,11,4,10,4,11,4,10,11,4,10,11,4,10,4,11,4,4,10,4,11,10,10,4,10,4,11,10,10,11,4,10,11,10,4,11,10,4,11,10,10,11,4,10,11,10,4,11,4,10,11,4,10,11,4,10,11,4,4,4,11,10,4,11,10,4,11,4,10,11,10,4,4,11,4,10,11,10,10,11,4,10,11,10,10,11,4,10,11,10,4,11,10,10,4,4,11,10,10,11,10,4,11,10,4,11,10,10,4,11,4,10,11,10,4,11,10,4,11,10,4,11,10,10,4,11,10,4,11,4,10,11,10,4,11,10,11,10,11,4,11,10,10,11,10,10,4,11,10,10,4,11,10,10,11,4,10,11,10,10,4,11,4,10,11,4,11,4,10,11,10,11,4,11,10,10,4,11,10,10,11,10,10,4,11,10,4,11,10,4,10,10,4,11,4,10,10,4,10,11,4,10,11,10,10,11,4,10,4,11,10,4,11,10,4,11,10,10,4,11,10,4,11,10,4,11,4,10,11,10,10,4,10,4,11,10,10,11,10,10,11,4,10,11,10,4,11,10,10,4,11,4,10,11,4,10,11,4,10,4,11,4,10,11,10,10,4,11, +4,10,4,10,10,4,10,4,10,10,10,10,11,10,4,10,10,10,10,10,4,10,10,4,10,10,4,10,10,10,10,10,10,4,10,4,10,10,10,10,10,4,10,4,10,10,10,4,10,10,10,4,10,10,10,10,10,10,4,10,10,4,10,10,4,10,10,4,10,4,10,4,10,4,10,4,10,10,10,10,10,4,10,10,10,4,10,10,10,4,10,10,10,10,10,4,4,10,10,10,4,10,10,4,10,10,10,10,10,4,10,10,10,10,10,10,10,10,4,10,10,10,10,10,10,10,10,10,10,10,10,10,4,10,10,10,10,4,10,10,4,10,10,4,10,10,10,10,10,10,10,4,10,10,10,4,10,10,10,10,10,10,4,10,10,10,4,10,10,10,4,10,4,10,4,10,10,4,10,10,10,4,10,10,10,10,10,10,10,4,10,10,10,4,10,10,10,4,10,10,10,10,10,10,4,10,10,10,4,10,4,10,10,10,10,10,10,10,4,10,10,4,10,10,10,10,10,10,10,4,10,10,10,10,11,10,10,11,10,10,10,10,10,4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,4,10,10,4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, +10,4,10,4,4,4,4,10,4,4,10,4,4,10,4,4,4,4,10,4,10,4,4,10,4,4,10,4,4,10,4,10,4,4,4,10,4,4,4,4,10,4,4,10,4,10,4,4,4,4,10,4,4,4,10,4,4,4,10,4,4,10,4,4,10,4,4,10,4,10,4,10,4,10,4,10,4,10,4,10,4,4,10,4,10,4,10,4,4,10,4,4,4,10,4,4,10,4,4,10,4,10,4,10,4,4,10,4,4,10,4,4,10,4,10,4,10,4,10,4,10,4,10,4,10,4,10,10,10,4,10,4,10,4,4,10,4,10,4,10,4,10,4,10,4,4,10,4,10,4,4,10,4,4,4,10,4,10,10,4,10,4,10,4,4,4,10,4,4,10,4,10,10,10,4,10,4,10,4,10,4,10,10,4,10,4,10,4,4,10,4,10,4,10,4,10,4,10,10,4,10,10,4,10,4,10,4,4,10,4,10,4,10,4,4,10,10,4,10,4,4,10,4,4,4,10,4,10,4,10,4,4,10,4,10,4,10,10,4,10,4,10,10,10,10,4,10,10,10,4,10,10,4,10,10,4,10,4,10,4,10,10,4,10,4,10,4,10,10,4,10,10,4,10,10,4,10,10,4,10,4,10,4,10,4,10,4,10,4,10,4,10,10,4,10,10,4,10,4,10,4,10,4,10,10,4,10,4, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +}; + +MWIMAGEHDR image_car8 = { + 308, 162, /* width, height*/ + 1, 8, /* planes, bpp*/ + 308, 1, /* pitch, bytesperpixel*/ + 1, 256, /* compression, palsize*/ + -1L, /* transcolor*/ + palette, + imagebits, +}; Index: bmp/earth.jpg =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/earth.jpg =================================================================== --- bmp/earth.jpg (nonexistent) +++ bmp/earth.jpg (revision 174)
bmp/earth.jpg Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/penguin.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/penguin.bmp =================================================================== --- bmp/penguin.bmp (nonexistent) +++ bmp/penguin.bmp (revision 174)
bmp/penguin.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/min4.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/min4.bmp =================================================================== --- bmp/min4.bmp (nonexistent) +++ bmp/min4.bmp (revision 174)
bmp/min4.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/penguin.c =================================================================== --- bmp/penguin.c (nonexistent) +++ bmp/penguin.c (revision 174) @@ -0,0 +1,427 @@ +/* Generated by convbmp*/ +#include "device.h" + +/* MWIMAGEHDR image_penguin converted from penguin.bmp*/ + +static MWPALENTRY palette[256] = { + RGBDEF( 0, 0, 0 ), /* pal 0*/ + RGBDEF( 8, 0, 0 ), /* pal 1*/ + RGBDEF( 8, 8, 0 ), /* pal 2*/ + RGBDEF( 8, 8, 8 ), /* pal 3*/ + RGBDEF( 18, 10, 0 ), /* pal 4*/ + RGBDEF( 33, 0, 0 ), /* pal 5*/ + RGBDEF( 16, 16, 16 ), /* pal 6*/ + RGBDEF( 24, 24, 24 ), /* pal 7*/ + RGBDEF( 39, 27, 4 ), /* pal 8*/ + RGBDEF( 63, 41, 2 ), /* pal 9*/ + RGBDEF( 66, 49, 0 ), /* pal 10*/ + RGBDEF( 74, 41, 0 ), /* pal 11*/ + RGBDEF( 74, 49, 0 ), /* pal 12*/ + RGBDEF( 78, 52, 3 ), /* pal 13*/ + RGBDEF( 90, 60, 2 ), /* pal 14*/ + RGBDEF( 99, 70, 4 ), /* pal 15*/ + RGBDEF( 33, 33, 33 ), /* pal 16*/ + RGBDEF( 41, 41, 41 ), /* pal 17*/ + RGBDEF( 41, 41, 66 ), /* pal 18*/ + RGBDEF( 49, 49, 49 ), /* pal 19*/ + RGBDEF( 63, 63, 60 ), /* pal 20*/ + RGBDEF( 82, 57, 41 ), /* pal 21*/ + RGBDEF( 74, 74, 66 ), /* pal 22*/ + RGBDEF( 74, 74, 74 ), /* pal 23*/ + RGBDEF( 74, 74, 82 ), /* pal 24*/ + RGBDEF( 82, 82, 82 ), /* pal 25*/ + RGBDEF( 90, 90, 90 ), /* pal 26*/ + RGBDEF( 99, 99, 90 ), /* pal 27*/ + RGBDEF( 90, 90, 99 ), /* pal 28*/ + RGBDEF( 99, 99, 99 ), /* pal 29*/ + RGBDEF( 99, 99, 107 ), /* pal 30*/ + RGBDEF( 0, 0, 255 ), /* pal 31*/ + RGBDEF( 141, 96, 1 ), /* pal 32*/ + RGBDEF( 158, 111, 24 ), /* pal 33*/ + RGBDEF( 196, 135, 9 ), /* pal 34*/ + RGBDEF( 211, 154, 5 ), /* pal 35*/ + RGBDEF( 226, 165, 4 ), /* pal 36*/ + RGBDEF( 229, 177, 1 ), /* pal 37*/ + RGBDEF( 237, 179, 8 ), /* pal 38*/ + RGBDEF( 237, 174, 16 ), /* pal 39*/ + RGBDEF( 233, 195, 8 ), /* pal 40*/ + RGBDEF( 247, 193, 12 ), /* pal 41*/ + RGBDEF( 243, 207, 10 ), /* pal 42*/ + RGBDEF( 255, 214, 8 ), /* pal 43*/ + RGBDEF( 255, 189, 16 ), /* pal 44*/ + RGBDEF( 247, 218, 16 ), /* pal 45*/ + RGBDEF( 247, 212, 24 ), /* pal 46*/ + RGBDEF( 249, 216, 47 ), /* pal 47*/ + RGBDEF( 117, 117, 120 ), /* pal 48*/ + RGBDEF( 142, 139, 139 ), /* pal 49*/ + RGBDEF( 181, 164, 145 ), /* pal 50*/ + RGBDEF( 173, 173, 177 ), /* pal 51*/ + RGBDEF( 189, 189, 189 ), /* pal 52*/ + RGBDEF( 202, 202, 202 ), /* pal 53*/ + RGBDEF( 198, 198, 231 ), /* pal 54*/ + RGBDEF( 218, 218, 218 ), /* pal 55*/ + RGBDEF( 231, 214, 140 ), /* pal 56*/ + RGBDEF( 231, 231, 222 ), /* pal 57*/ + RGBDEF( 222, 222, 239 ), /* pal 58*/ + RGBDEF( 239, 236, 236 ), /* pal 59*/ + RGBDEF( 247, 247, 239 ), /* pal 60*/ + RGBDEF( 239, 239, 247 ), /* pal 61*/ + RGBDEF( 247, 247, 247 ), /* pal 62*/ + RGBDEF( 255, 255, 255 ), /* pal 63*/ + RGBDEF( 0, 0, 0 ), /* pal 64*/ + RGBDEF( 191, 0, 0 ), /* pal 65*/ + RGBDEF( 0, 191, 0 ), /* pal 66*/ + RGBDEF( 191, 191, 0 ), /* pal 67*/ + RGBDEF( 0, 0, 191 ), /* pal 68*/ + RGBDEF( 191, 0, 191 ), /* pal 69*/ + RGBDEF( 0, 191, 191 ), /* pal 70*/ + RGBDEF( 192, 192, 192 ), /* pal 71*/ + RGBDEF( 128, 128, 128 ), /* pal 72*/ + RGBDEF( 255, 0, 0 ), /* pal 73*/ + RGBDEF( 0, 255, 0 ), /* pal 74*/ + RGBDEF( 255, 255, 0 ), /* pal 75*/ + RGBDEF( 0, 0, 255 ), /* pal 76*/ + RGBDEF( 255, 0, 255 ), /* pal 77*/ + RGBDEF( 0, 255, 255 ), /* pal 78*/ + RGBDEF( 255, 255, 255 ), /* pal 79*/ + RGBDEF( 0, 0, 0 ), /* pal 80*/ + RGBDEF( 0, 0, 0 ), /* pal 81*/ + RGBDEF( 0, 0, 0 ), /* pal 82*/ + RGBDEF( 0, 0, 0 ), /* pal 83*/ + RGBDEF( 0, 0, 0 ), /* pal 84*/ + RGBDEF( 0, 0, 0 ), /* pal 85*/ + RGBDEF( 0, 0, 0 ), /* pal 86*/ + RGBDEF( 0, 0, 0 ), /* pal 87*/ + RGBDEF( 0, 0, 0 ), /* pal 88*/ + RGBDEF( 0, 0, 0 ), /* pal 89*/ + RGBDEF( 0, 0, 0 ), /* pal 90*/ + RGBDEF( 0, 0, 0 ), /* pal 91*/ + RGBDEF( 0, 0, 0 ), /* pal 92*/ + RGBDEF( 0, 0, 0 ), /* pal 93*/ + RGBDEF( 0, 0, 0 ), /* pal 94*/ + RGBDEF( 0, 0, 0 ), /* pal 95*/ + RGBDEF( 0, 0, 0 ), /* pal 96*/ + RGBDEF( 0, 0, 0 ), /* pal 97*/ + RGBDEF( 0, 0, 0 ), /* pal 98*/ + RGBDEF( 0, 0, 0 ), /* pal 99*/ + RGBDEF( 0, 0, 0 ), /* pal 100*/ + RGBDEF( 0, 0, 0 ), /* pal 101*/ + RGBDEF( 0, 0, 0 ), /* pal 102*/ + RGBDEF( 0, 0, 0 ), /* pal 103*/ + RGBDEF( 0, 0, 0 ), /* pal 104*/ + RGBDEF( 0, 0, 0 ), /* pal 105*/ + RGBDEF( 0, 0, 0 ), /* pal 106*/ + RGBDEF( 0, 0, 0 ), /* pal 107*/ + RGBDEF( 0, 0, 0 ), /* pal 108*/ + RGBDEF( 0, 0, 0 ), /* pal 109*/ + RGBDEF( 0, 0, 0 ), /* pal 110*/ + RGBDEF( 0, 0, 0 ), /* pal 111*/ + RGBDEF( 0, 0, 0 ), /* pal 112*/ + RGBDEF( 0, 0, 0 ), /* pal 113*/ + RGBDEF( 0, 0, 0 ), /* pal 114*/ + RGBDEF( 0, 0, 0 ), /* pal 115*/ + RGBDEF( 0, 0, 0 ), /* pal 116*/ + RGBDEF( 0, 0, 0 ), /* pal 117*/ + RGBDEF( 0, 0, 0 ), /* pal 118*/ + RGBDEF( 0, 0, 0 ), /* pal 119*/ + RGBDEF( 0, 0, 0 ), /* pal 120*/ + RGBDEF( 0, 0, 0 ), /* pal 121*/ + RGBDEF( 0, 0, 0 ), /* pal 122*/ + RGBDEF( 0, 0, 0 ), /* pal 123*/ + RGBDEF( 0, 0, 0 ), /* pal 124*/ + RGBDEF( 0, 0, 0 ), /* pal 125*/ + RGBDEF( 0, 0, 0 ), /* pal 126*/ + RGBDEF( 0, 0, 0 ), /* pal 127*/ + RGBDEF( 0, 0, 0 ), /* pal 128*/ + RGBDEF( 0, 0, 0 ), /* pal 129*/ + RGBDEF( 0, 0, 0 ), /* pal 130*/ + RGBDEF( 0, 0, 0 ), /* pal 131*/ + RGBDEF( 0, 0, 0 ), /* pal 132*/ + RGBDEF( 0, 0, 0 ), /* pal 133*/ + RGBDEF( 0, 0, 0 ), /* pal 134*/ + RGBDEF( 0, 0, 0 ), /* pal 135*/ + RGBDEF( 0, 0, 0 ), /* pal 136*/ + RGBDEF( 0, 0, 0 ), /* pal 137*/ + RGBDEF( 0, 0, 0 ), /* pal 138*/ + RGBDEF( 0, 0, 0 ), /* pal 139*/ + RGBDEF( 0, 0, 0 ), /* pal 140*/ + RGBDEF( 0, 0, 0 ), /* pal 141*/ + RGBDEF( 0, 0, 0 ), /* pal 142*/ + RGBDEF( 0, 0, 0 ), /* pal 143*/ + RGBDEF( 0, 0, 0 ), /* pal 144*/ + RGBDEF( 0, 0, 0 ), /* pal 145*/ + RGBDEF( 0, 0, 0 ), /* pal 146*/ + RGBDEF( 0, 0, 0 ), /* pal 147*/ + RGBDEF( 0, 0, 0 ), /* pal 148*/ + RGBDEF( 0, 0, 0 ), /* pal 149*/ + RGBDEF( 0, 0, 0 ), /* pal 150*/ + RGBDEF( 0, 0, 0 ), /* pal 151*/ + RGBDEF( 0, 0, 0 ), /* pal 152*/ + RGBDEF( 0, 0, 0 ), /* pal 153*/ + RGBDEF( 0, 0, 0 ), /* pal 154*/ + RGBDEF( 0, 0, 0 ), /* pal 155*/ + RGBDEF( 0, 0, 0 ), /* pal 156*/ + RGBDEF( 0, 0, 0 ), /* pal 157*/ + RGBDEF( 0, 0, 0 ), /* pal 158*/ + RGBDEF( 0, 0, 0 ), /* pal 159*/ + RGBDEF( 0, 0, 0 ), /* pal 160*/ + RGBDEF( 0, 0, 0 ), /* pal 161*/ + RGBDEF( 0, 0, 0 ), /* pal 162*/ + RGBDEF( 0, 0, 0 ), /* pal 163*/ + RGBDEF( 0, 0, 0 ), /* pal 164*/ + RGBDEF( 0, 0, 0 ), /* pal 165*/ + RGBDEF( 0, 0, 0 ), /* pal 166*/ + RGBDEF( 0, 0, 0 ), /* pal 167*/ + RGBDEF( 0, 0, 0 ), /* pal 168*/ + RGBDEF( 0, 0, 0 ), /* pal 169*/ + RGBDEF( 0, 0, 0 ), /* pal 170*/ + RGBDEF( 0, 0, 0 ), /* pal 171*/ + RGBDEF( 0, 0, 0 ), /* pal 172*/ + RGBDEF( 0, 0, 0 ), /* pal 173*/ + RGBDEF( 0, 0, 0 ), /* pal 174*/ + RGBDEF( 0, 0, 0 ), /* pal 175*/ + RGBDEF( 0, 0, 0 ), /* pal 176*/ + RGBDEF( 0, 0, 0 ), /* pal 177*/ + RGBDEF( 0, 0, 0 ), /* pal 178*/ + RGBDEF( 0, 0, 0 ), /* pal 179*/ + RGBDEF( 0, 0, 0 ), /* pal 180*/ + RGBDEF( 0, 0, 0 ), /* pal 181*/ + RGBDEF( 0, 0, 0 ), /* pal 182*/ + RGBDEF( 0, 0, 0 ), /* pal 183*/ + RGBDEF( 0, 0, 0 ), /* pal 184*/ + RGBDEF( 0, 0, 0 ), /* pal 185*/ + RGBDEF( 0, 0, 0 ), /* pal 186*/ + RGBDEF( 0, 0, 0 ), /* pal 187*/ + RGBDEF( 0, 0, 0 ), /* pal 188*/ + RGBDEF( 0, 0, 0 ), /* pal 189*/ + RGBDEF( 0, 0, 0 ), /* pal 190*/ + RGBDEF( 0, 0, 0 ), /* pal 191*/ + RGBDEF( 0, 0, 0 ), /* pal 192*/ + RGBDEF( 0, 0, 0 ), /* pal 193*/ + RGBDEF( 0, 0, 0 ), /* pal 194*/ + RGBDEF( 0, 0, 0 ), /* pal 195*/ + RGBDEF( 0, 0, 0 ), /* pal 196*/ + RGBDEF( 0, 0, 0 ), /* pal 197*/ + RGBDEF( 0, 0, 0 ), /* pal 198*/ + RGBDEF( 0, 0, 0 ), /* pal 199*/ + RGBDEF( 0, 0, 0 ), /* pal 200*/ + RGBDEF( 0, 0, 0 ), /* pal 201*/ + RGBDEF( 0, 0, 0 ), /* pal 202*/ + RGBDEF( 0, 0, 0 ), /* pal 203*/ + RGBDEF( 0, 0, 0 ), /* pal 204*/ + RGBDEF( 0, 0, 0 ), /* pal 205*/ + RGBDEF( 0, 0, 0 ), /* pal 206*/ + RGBDEF( 0, 0, 0 ), /* pal 207*/ + RGBDEF( 0, 0, 0 ), /* pal 208*/ + RGBDEF( 0, 0, 0 ), /* pal 209*/ + RGBDEF( 0, 0, 0 ), /* pal 210*/ + RGBDEF( 0, 0, 0 ), /* pal 211*/ + RGBDEF( 0, 0, 0 ), /* pal 212*/ + RGBDEF( 0, 0, 0 ), /* pal 213*/ + RGBDEF( 0, 0, 0 ), /* pal 214*/ + RGBDEF( 0, 0, 0 ), /* pal 215*/ + RGBDEF( 0, 0, 0 ), /* pal 216*/ + RGBDEF( 0, 0, 0 ), /* pal 217*/ + RGBDEF( 0, 0, 0 ), /* pal 218*/ + RGBDEF( 0, 0, 0 ), /* pal 219*/ + RGBDEF( 0, 0, 0 ), /* pal 220*/ + RGBDEF( 0, 0, 0 ), /* pal 221*/ + RGBDEF( 0, 0, 0 ), /* pal 222*/ + RGBDEF( 0, 0, 0 ), /* pal 223*/ + RGBDEF( 0, 0, 0 ), /* pal 224*/ + RGBDEF( 0, 0, 0 ), /* pal 225*/ + RGBDEF( 0, 0, 0 ), /* pal 226*/ + RGBDEF( 0, 0, 0 ), /* pal 227*/ + RGBDEF( 0, 0, 0 ), /* pal 228*/ + RGBDEF( 0, 0, 0 ), /* pal 229*/ + RGBDEF( 0, 0, 0 ), /* pal 230*/ + RGBDEF( 0, 0, 0 ), /* pal 231*/ + RGBDEF( 0, 0, 0 ), /* pal 232*/ + RGBDEF( 0, 0, 0 ), /* pal 233*/ + RGBDEF( 0, 0, 0 ), /* pal 234*/ + RGBDEF( 0, 0, 0 ), /* pal 235*/ + RGBDEF( 0, 0, 0 ), /* pal 236*/ + RGBDEF( 0, 0, 0 ), /* pal 237*/ + RGBDEF( 0, 0, 0 ), /* pal 238*/ + RGBDEF( 0, 0, 0 ), /* pal 239*/ + RGBDEF( 0, 0, 0 ), /* pal 240*/ + RGBDEF( 0, 0, 0 ), /* pal 241*/ + RGBDEF( 0, 0, 0 ), /* pal 242*/ + RGBDEF( 0, 0, 0 ), /* pal 243*/ + RGBDEF( 0, 0, 0 ), /* pal 244*/ + RGBDEF( 0, 0, 0 ), /* pal 245*/ + RGBDEF( 0, 0, 0 ), /* pal 246*/ + RGBDEF( 0, 0, 0 ), /* pal 247*/ + RGBDEF( 0, 0, 0 ), /* pal 248*/ + RGBDEF( 0, 0, 0 ), /* pal 249*/ + RGBDEF( 0, 0, 0 ), /* pal 250*/ + RGBDEF( 0, 0, 0 ), /* pal 251*/ + RGBDEF( 0, 0, 0 ), /* pal 252*/ + RGBDEF( 0, 0, 0 ), /* pal 253*/ + RGBDEF( 0, 0, 0 ), /* pal 254*/ + RGBDEF( 0, 0, 0 ), /* pal 255*/ +}; + +static MWUCHAR imagebits[] = { +76,76,76,76,76,31,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,11,13,14,15,15,15,15,11,11,11,21,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,76,76,76,76,76,76,31,31,31,76,76,76,76,76,76,76,76,76,76,76,76,76,12,11,11,10,11,14,14,15,14,11,14,11,11,76,76,76,76,76,76,76,76,76,76,31,31,31,31,31,31,31,31,31,76,31,31,31,31,31,76,76, +76,76,76,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,76,76,76,76,31,31,31,76,76,76,76,76,9,11,14,15,15,32,15,32,15,15,15,15,15,11,11,76,76,76,76,31,31,31,31,76,76,76,76,76,31,31,31,31,31,31,31,76,76,76,76,76,76,31,31,76,31,31,31,31,76,76,76,76,76,76,76,76,12,9,11,14,15,65,32,32,32,32,32,32,15,15,15,11,11,76,76,76,76,31,76,76,31,31,31,76,76,31,31,31,31,31,31,31,31,31,31,31,76,76, +76,76,76,31,31,31,76,31,76,76,76,76,76,76,76,76,31,31,31,31,31,31,76,76,76,76,76,76,13,15,32,32,32,32,32,32,32,32,32,32,32,15,15,15,11,11,76,76,76,31,31,31,31,31,76,76,76,76,31,31,31,31,31,31,31,31,31,31,76,76,31,31,76,76,76,76,76,31,31,31,31,31,31,76,76,12,9,11,14,15,32,32,33,33,33,33,34,32,34,32,32,32,15,21,76,76,76,76,76,76,31,31,31,31,31,31,31,76,76,76,76,76,76,76,31,31,31,76, +76,76,76,31,31,31,76,31,31,76,76,76,76,31,31,31,76,76,76,76,76,76,76,76,76,11,13,15,32,32,33,32,33,32,34,32,33,32,33,33,32,32,32,15,15,14,11,76,76,76,76,76,31,31,31,76,76,31,31,76,76,76,31,31,31,31,76,31,31,76,31,76,76,76,76,76,76,76,76,76,31,31,31,76,76,12,11,15,32,32,32,32,34,33,34,33,33,34,32,33,33,32,32,15,21,76,76,76,76,31,76,76,31,31,31,31,31,31,31,76,76,76,76,76,31,31,31,76, +76,76,76,31,76,31,31,76,31,31,31,31,31,31,31,31,76,76,76,76,76,13,13,15,32,32,32,32,33,32,33,33,34,33,34,33,34,33,33,33,33,32,32,32,15,15,14,11,3,255,76,76,76,76,31,76,76,76,76,76,31,76,76,31,31,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,12,9,14,32,32,33,34,33,34,32,34,34,34,34,34,34,33,34,33,32,32,20,76,76,76,76,76,76,31,76,31,31,31,31,31,76,76,31,76,31,31,31,31,76, +76,76,31,31,76,76,31,76,31,31,76,76,76,76,76,76,76,15,15,32,32,32,32,32,33,33,32,34,33,34,34,33,34,34,34,34,34,34,34,33,33,34,32,32,32,32,14,11,8,255,255,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,10,13,32,32,32,33,33,33,34,34,34,34,34,34,35,34,34,34,33,34,32,32,9,76,76,76,76,76,31,76,76,31,76,31,31,76,76,31,76,76,31,31,76,76, +76,76,31,76,76,76,76,76,76,76,76,76,76,13,15,32,32,32,33,33,33,33,33,34,33,33,34,34,34,34,34,35,35,35,35,35,35,34,35,34,34,33,33,33,32,32,15,15,9,3,255,255,255,255,255,255,255,255,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,255,255,255,255,9,14,15,32,33,34,34,34,34,34,34,35,35,35,34,35,35,34,34,34,33,34,32,13,76,76,76,76,76,76,76,31,76,31,76,31,76,31,76,76,31,31,76,76, +76,76,76,76,76,76,76,76,76,76,32,32,33,33,33,33,34,33,33,33,34,33,34,34,34,34,34,35,34,36,36,36,36,36,37,36,36,35,35,35,34,34,34,33,32,32,32,15,13,9,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,9,14,32,32,34,33,34,34,34,35,35,35,35,35,36,35,35,35,35,34,34,34,33,33,32,9,76,76,76,76,76,31,76,31,76,31,76,31,31,76,76,31,31,76, +76,76,76,76,76,32,32,32,33,33,33,33,34,34,34,34,34,34,34,34,34,34,34,34,35,35,35,35,39,39,40,41,41,41,38,44,38,38,36,36,35,35,34,34,33,32,32,32,13,11,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,12,15,32,32,34,34,34,34,36,35,36,36,40,36,35,36,36,36,35,35,35,34,35,34,33,33,9,76,76,76,76,76,76,31,76,31,31,76,31,31,76,31,31,76, +76,76,33,32,33,33,33,34,33,34,34,34,34,34,34,35,35,34,35,35,35,35,35,35,35,36,36,39,39,41,41,41,46,38,47,38,44,39,39,39,38,35,35,34,34,33,32,32,15,9,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,12,15,32,34,34,34,35,35,36,36,39,37,39,39,46,38,39,37,39,36,36,36,35,34,35,34,34,21,76,76,76,76,76,76,76,76,31,76,76,31,76,31,31,76, +76,34,34,34,34,34,34,34,34,34,34,35,35,35,35,34,35,36,35,35,35,39,39,38,38,38,39,44,39,41,36,44,44,40,41,41,41,46,39,44,37,39,35,35,34,33,34,32,15,11,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,13,32,32,34,34,34,35,36,37,41,39,39,46,39,44,39,44,39,44,39,39,39,39,36,35,35,35,34,33,11,76,76,76,76,76,76,31,76,76,31,76,31,76,76, +76,34,35,34,35,34,34,39,34,35,35,35,35,36,36,36,39,35,38,36,38,36,40,39,41,44,41,40,44,41,35,46,41,47,47,38,46,40,44,35,44,39,36,35,34,34,33,32,15,9,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,13,15,33,34,35,35,35,36,40,39,44,46,39,44,40,39,41,36,44,39,44,39,39,39,39,39,39,35,35,34,33,76,76,76,76,76,31,76,76,31,31,31,76,76, +31,35,35,35,34,39,35,35,39,36,36,39,36,39,37,39,36,39,41,38,44,44,39,41,46,40,40,46,46,35,44,40,41,39,41,36,41,46,41,41,35,39,39,36,35,34,33,32,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,13,32,33,34,34,35,38,38,39,39,46,46,40,47,38,44,35,39,44,40,47,35,44,44,44,39,44,38,39,35,35,33,33,76,76,76,76,76,76,76,31,76,31,76, +31,34,39,34,39,35,36,39,36,39,37,37,39,39,39,41,41,47,38,36,39,46,40,47,38,41,46,41,39,40,47,38,41,41,35,44,36,39,41,36,41,40,39,35,35,34,34,32,9,255,255,255,255,255,255,3,255,255,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,13,32,32,35,35,35,38,36,41,41,46,38,44,40,46,35,44,47,40,47,39,41,35,44,35,44,39,47,39,47,47,35,35,35,35,76,76,76,76,76,76,76,31,76, +31,39,35,35,35,39,39,39,40,39,44,47,38,46,40,41,47,39,38,47,46,46,39,46,41,39,41,41,41,47,38,47,40,41,44,35,41,46,41,41,41,36,36,35,35,34,33,32,9,255,255,255,25,62,62,62,62,62,62,62,62,62,53,20,255,255,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,9,15,33,34,35,36,36,39,40,39,46,44,40,47,41,44,35,44,44,35,44,44,41,46,40,41,47,40,41,35,46,46,39,36,36,35,35,76,76,76,76,76,76,76, +31,35,34,39,39,39,39,39,44,44,40,39,44,47,41,36,44,41,47,35,44,41,41,44,35,44,46,39,41,41,44,35,41,41,46,40,41,41,38,41,38,39,39,35,35,35,33,15,9,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,49,19,255,255,255,255,255,255,255,255,255,255,255,255,255,255,8,15,33,34,35,35,36,37,41,41,46,39,41,47,41,36,44,35,41,44,35,44,46,39,47,35,44,41,39,47,41,36,44,39,46,36,36,35,35,76,76,76,76,76, +76,35,39,34,39,39,46,41,46,40,44,36,44,35,39,46,41,44,41,44,40,40,47,35,44,35,44,46,35,44,41,46,47,38,46,41,39,36,44,41,37,39,37,67,35,34,32,9,52,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,255,255,255,255,8,15,32,34,35,35,36,39,38,41,36,46,40,35,44,40,41,41,41,41,44,35,41,44,35,36,44,41,46,44,35,44,36,46,38,41,36,44,35,34,76,76,76,76, +76,35,34,39,35,39,41,40,39,39,36,39,46,41,47,39,41,39,41,39,44,41,41,41,46,46,39,41,36,41,41,39,46,41,41,40,46,46,39,38,40,37,40,39,35,34,15,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,255,255,6,15,32,34,35,35,36,37,40,41,41,41,41,41,41,47,39,46,44,40,36,39,41,41,41,36,44,35,41,46,39,46,47,39,41,35,39,46,44,44,35,35,76,76, +76,35,39,34,39,39,39,47,40,46,44,44,41,35,41,47,40,41,46,40,44,35,41,36,41,39,41,47,38,41,47,35,46,39,47,35,39,36,44,40,39,40,40,37,34,33,33,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,3,255,255,255,255,255,255,255,14,32,34,34,36,36,37,41,41,39,36,44,39,46,39,38,46,41,36,41,46,44,40,41,35,39,42,46,41,36,41,41,41,41,47,35,44,40,35,44,35,36,76, +76,35,35,34,39,47,39,41,35,46,39,41,44,44,47,39,41,36,46,41,36,41,46,38,36,41,46,44,36,44,41,47,38,41,44,47,41,39,41,39,40,40,40,39,34,32,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,13,32,33,35,36,36,39,39,41,41,46,40,47,46,44,47,35,41,41,47,39,46,44,47,38,47,38,47,40,40,44,47,40,39,36,44,41,47,40,44,35,35,35, +76,35,34,39,34,39,39,46,47,38,41,46,35,44,35,44,40,47,39,35,41,36,38,47,38,47,39,36,39,41,41,41,47,40,44,40,41,41,41,39,40,42,40,35,34,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,3,255,255,255,3,13,32,34,34,35,36,37,40,41,41,41,41,35,44,35,39,47,38,47,40,47,39,44,41,47,39,47,40,44,47,38,41,41,41,44,40,41,47,44,41,47,35,41, +76,34,34,39,35,47,39,39,46,46,39,44,35,44,40,39,44,39,46,44,46,39,47,40,47,41,41,41,41,46,41,46,40,41,36,46,36,39,41,41,40,40,39,35,33,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,12,32,34,34,35,36,37,41,39,41,46,40,47,44,47,40,44,39,46,41,41,41,35,46,44,44,40,44,35,44,41,44,40,47,41,36,47,38,36,41,41,47,41, +76,34,34,35,39,39,39,44,40,44,46,44,40,47,40,39,36,41,41,36,40,44,36,35,44,40,41,46,38,36,44,40,41,47,38,41,36,39,41,38,42,40,35,35,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,3,255,255,255,12,32,33,35,35,36,38,38,38,41,42,47,40,40,40,47,40,47,39,40,47,40,41,41,44,40,46,41,41,41,35,44,47,46,39,44,39,40,46,44,40,41,40, +76,34,34,39,35,39,40,47,39,39,36,36,39,46,39,44,47,44,40,41,47,40,41,41,47,39,36,39,46,39,36,44,46,47,39,47,38,41,40,40,42,36,35,6,17,20,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,3,255,255,12,32,34,34,35,36,36,41,39,41,41,41,40,46,47,35,46,46,39,47,40,41,46,39,40,39,46,38,46,36,44,46,41,40,40,40,44,47,40,36,41,44,44, +76,34,34,39,39,39,46,41,41,46,47,40,44,40,46,47,40,46,39,46,44,35,44,36,41,36,41,46,41,47,38,36,39,38,41,46,47,38,41,42,40,35,3,255,255,255,255,25,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,53,255,8,32,33,34,35,35,38,38,40,41,41,44,41,44,41,44,39,41,46,40,47,40,44,46,44,47,38,41,36,39,41,41,41,36,44,46,40,47,40,41,46,40,41, +76,34,35,39,39,46,41,39,36,44,40,47,35,41,36,39,36,41,46,38,36,39,36,44,41,40,47,39,36,44,35,44,41,47,38,46,38,41,41,46,39,34,3,255,255,255,255,255,29,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,53,53,6,32,34,34,35,35,36,38,41,39,39,41,40,39,41,40,44,41,41,39,41,41,40,41,46,40,47,35,46,41,46,44,35,44,41,46,41,41,36,41,41,76,76, +76,34,35,39,39,39,39,47,40,44,47,35,44,41,44,44,46,41,41,47,39,47,38,46,39,46,39,36,44,40,44,46,39,41,46,39,41,40,46,36,35,3,255,255,255,255,255,255,255,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,71,53,32,33,34,34,36,37,38,37,40,44,39,39,39,39,39,39,39,39,40,44,38,40,46,41,40,40,47,39,36,41,46,44,35,41,39,41,36,38,41,76,76,76, +76,34,47,35,39,44,36,44,41,46,39,46,36,39,46,35,41,41,46,41,44,38,36,41,47,41,36,44,35,44,36,44,46,41,44,35,41,42,40,35,3,255,255,255,255,255,255,255,255,61,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,71,71,33,33,34,35,35,38,36,39,37,40,38,38,39,36,36,39,38,38,39,40,44,41,38,46,41,46,44,35,41,44,39,41,41,46,39,46,41,76,76,76,31,31, +76,34,35,39,41,39,47,35,44,41,44,40,41,47,40,41,41,39,41,41,41,47,39,35,41,41,39,46,40,35,46,35,41,41,44,41,40,40,36,35,255,255,255,255,255,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,53,53,53,33,33,34,35,36,36,38,36,38,36,38,36,39,36,39,36,39,38,36,40,38,39,47,47,35,44,46,41,41,39,46,47,40,41,47,39,76,76,76,31,76,31, +76,34,39,39,40,39,40,46,41,36,35,44,47,40,39,41,47,41,47,41,41,47,40,47,40,47,40,41,47,41,41,41,46,38,41,40,46,36,35,3,255,255,255,255,255,255,255,255,22,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,71,53,53,72,34,34,35,38,36,36,36,38,36,36,36,35,36,35,36,36,36,36,39,40,39,46,40,39,41,46,41,41,47,35,41,44,41,40,76,76,76,31,31,31,31, +76,35,35,39,40,40,41,41,39,41,41,41,39,41,47,46,40,36,44,35,46,44,47,39,41,41,36,44,44,40,41,47,41,47,40,40,40,36,6,255,255,255,255,3,255,255,255,6,48,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,53,71,53,33,34,34,36,37,38,36,37,35,36,35,35,35,35,35,35,35,36,36,36,37,39,41,46,40,47,38,46,41,41,41,41,36,41,76,76,76,76,31,76,31,76, +76,34,35,39,39,39,39,39,46,37,39,46,44,46,39,44,39,39,41,36,44,35,44,40,47,39,46,35,46,39,41,41,41,39,41,46,36,35,255,255,255,255,255,255,255,255,255,30,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,52,53,53,34,34,36,39,38,36,36,36,35,35,35,35,34,35,34,34,34,35,35,35,37,39,40,41,36,41,36,38,41,41,41,46,40,76,76,76,31,31,31,76,31,76, +76,36,35,36,36,39,39,37,39,39,39,40,39,39,39,39,46,44,40,44,35,44,41,40,47,40,47,40,40,47,38,46,41,41,41,40,35,3,255,255,255,255,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,71,71,53,50,35,36,39,38,39,36,35,35,35,34,34,34,34,34,34,34,34,34,35,35,36,40,39,41,41,41,41,41,41,40,41,44,76,76,76,31,31,31,76,31,76, +76,76,32,36,39,37,39,39,39,39,39,39,39,39,39,39,39,46,44,39,36,41,44,41,46,38,41,41,47,40,41,41,41,41,40,39,3,255,255,255,255,255,255,255,20,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,71,71,53,50,36,35,39,37,39,36,35,34,34,34,34,33,34,34,33,34,33,34,34,34,35,37,39,40,39,41,41,44,41,41,41,76,76,76,76,31,31,31,31,31,76, +76,76,76,33,34,37,39,36,35,35,34,35,35,39,39,39,39,39,44,35,44,44,35,41,41,47,38,47,40,41,41,41,41,45,40,35,3,255,255,255,255,255,255,16,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,53,71,53,53,50,35,44,39,38,35,36,34,34,34,33,34,32,33,32,32,33,34,33,34,33,34,35,36,39,40,39,41,40,46,41,76,31,76,76,31,31,31,31,76,31,76, +76,76,76,31,76,76,76,34,33,34,34,34,34,35,39,35,39,39,39,39,39,36,41,44,39,41,40,41,46,44,35,41,41,38,40,255,255,255,255,255,255,6,57,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,53,53,53,34,39,35,44,39,38,35,34,34,34,33,15,9,255,255,255,255,255,8,14,33,34,34,36,38,37,38,41,41,38,38,76,76,76,76,31,31,31,31,76,31,76, +76,76,76,31,76,31,76,76,76,76,76,33,34,34,35,35,39,39,39,44,41,47,44,35,44,46,39,46,40,41,41,41,41,40,35,255,255,255,3,255,3,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,52,53,33,47,44,44,39,38,35,34,33,32,15,8,255,255,255,255,255,255,255,255,9,32,34,35,40,40,41,39,41,41,38,76,76,76,76,76,76,31,31,76,31,76, +76,76,76,76,76,76,76,76,76,76,76,76,34,33,34,35,35,39,39,39,39,46,41,46,35,44,44,41,41,40,41,41,41,39,255,255,255,255,255,16,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,53,34,36,36,39,41,38,35,34,33,12,255,255,255,255,255,255,255,255,255,255,255,255,33,35,39,46,40,40,41,40,39,76,76,76,31,76,76,31,31,76,31,31, +76,76,31,76,76,76,76,76,31,76,76,31,76,76,34,35,35,35,39,39,47,39,46,41,46,35,41,39,46,47,38,46,37,255,255,255,255,3,20,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,50,35,39,39,39,39,37,34,15,255,255,255,255,255,255,255,255,255,255,255,255,255,255,32,35,46,40,45,46,40,46,76,76,76,76,76,76,76,76,76,76,31, +76,76,31,76,31,76,76,76,31,76,76,76,76,76,76,34,34,35,39,35,39,44,39,46,39,36,44,46,39,41,41,46,36,255,255,255,6,25,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,34,39,40,44,41,46,40,33,15,255,255,255,255,255,255,255,255,255,255,255,255,6,255,255,34,40,40,40,67,47,40,76,76,76,76,31,31,31,31,31,76,31, +76,76,31,31,31,31,76,76,31,31,76,76,76,76,76,34,34,35,35,39,35,44,36,41,46,40,36,44,40,41,46,39,255,255,255,16,50,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,39,35,39,46,46,67,42,39,51,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,8,45,46,67,46,47,40,76,76,31,31,31,31,31,31,31,31,31, +76,76,31,31,76,31,76,76,31,31,31,31,76,76,31,76,35,35,35,35,47,35,46,38,41,46,38,41,46,41,38,255,255,255,19,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,35,39,39,46,40,47,40,67,33,3,3,255,255,255,255,255,255,255,255,255,255,255,7,3,6,8,40,47,40,40,46,76,76,31,31,31,31,31,31,31,31,31, +76,76,31,76,76,31,31,76,76,76,31,31,76,76,76,76,76,35,35,39,41,46,39,46,46,39,36,41,38,41,255,255,255,25,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,39,39,47,67,40,67,40,40,33,3,255,255,255,255,255,255,255,255,255,255,255,255,3,16,6,255,33,42,38,41,76,76,31,31,31,31,31,31,31,31,31,31, +76,76,31,76,76,31,31,31,76,76,31,76,76,76,76,76,76,35,35,44,39,46,41,47,38,46,41,41,41,255,255,255,23,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,35,40,40,47,39,47,41,15,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,16,16,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,76,31,76,31,31,31,31,31,31,76,76,31,76,35,35,46,36,41,41,46,41,41,41,255,255,3,52,52,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,39,35,35,39,35,34,20,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,19,19,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,76,31,31,31,76,76,76,31,76,76,76,76,35,39,36,41,36,39,39,41,255,255,255,51,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,16,3,255,255,255,255,255,255,255,255,255,255,255,255,255,16,29,22,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,76,31,31,76,76,31,31,76,76,255,255,255,44,35,46,41,36,255,255,255,19,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,61,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,29,255,16,6,255,255,255,255,255,255,255,255,255,255,255,6,27,29,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,76,76,31,31,76,76,31,76,76,255,255,255,255,44,41,255,255,255,255,30,51,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,255,255,19,16,255,255,255,255,255,255,3,16,19,18,19,16,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,76,255,255,255,255,255,255,255,255,255,16,53,255,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,25,26,16,3,19,19,19,16,6,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,76,31,31,76,76,76,76,76,255,255,255,255,255,255,255,255,3,48,255,255,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,20,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,76,76,76,255,255,255,255,255,255,255,255,20,51,255,255,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,61,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,3,255,255,255,255,255,18,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,76,31,76,76,31,31,31,76,76,255,255,255,255,255,255,16,19,25,255,255,255,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,61,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,6,19,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,76,31,31,76,76,76,76,76,76,76,255,255,255,255,255,6,16,22,24,255,255,255,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,23,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,76, +31,31,31,31,31,31,31,31,76,31,31,76,76,31,76,76,76,76,255,255,255,255,255,255,6,19,23,255,255,255,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,61,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,3,255,255,255,255,255,255,26,16,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,76,31,31,31,31,31,76,76,76,76,255,255,255,255,255,255,255,6,48,255,255,255,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,6,16,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,255,255,16,48,255,255,255,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,25,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,76,255,255,255,255,255,6,29,255,255,255,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,3,255,255,3,3,255,255,255,25,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,255,16,23,255,255,255,49,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,23,3,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,76, +76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,6,23,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,18,3,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,18,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,71,255,255,255,255,255,255,255,255,19,6,255,255,255,255,255,255,255,255,255,255,255,76,76,31,76,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,76,76,255,255,255,255,17,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,29,255,255,255,255,255,255,255,255,255,19,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,255,255,255,6,255,255,255,255,51,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,57,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,255,255,20,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,4,255,25,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,3,255,255,255,255,255,255,255,255,255,19,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,76,255,255,255,255,19,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,255,255,19,255,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,3,16,16,255,255,255,49,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,255,6,18,255,255,255,255,255,255,255,255,255,255,76,76,76,76,76,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,31,255,255,255,3,19,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,255,29,6,255,255,255,255,255,255,255,255,255,255,76,31,76,76,31,31,31,31,31,31,31,31,31,31, +76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,255,255,255,19,255,255,255,255,49,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,255,26,255,255,255,255,255,255,255,255,255,255,76,76,76,76,76,31,31,31,31,31,31,31,31,31,31, +76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,6,27,255,255,255,19,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,53,3,6,6,3,255,255,255,255,16,24,255,255,255,255,255,255,255,255,255,255,76,76,76,76,76,31,31,31,31,31,31,31,31,31,31, +76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,18,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,22,7,16,19,19,16,3,3,255,25,16,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31, +76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,31,76,255,255,255,16,26,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,16,6,16,20,23,19,16,6,2,22,255,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31, +76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,30,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,52,255,255,16,18,24,20,16,255,19,16,255,255,255,255,255,255,255,255,255,255,76,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31, +76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,16,19,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,55,62,19,255,255,3,19,20,19,16,255,19,3,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31, +76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,20,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,71,53,62,255,255,255,6,16,16,6,3,18,6,255,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,76, +76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,76,31,255,255,255,255,16,19,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,61,55,71,53,62,20,255,255,255,255,3,3,255,18,19,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,48,255,255,255,255,71,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,53,71,59,62,255,255,255,255,255,255,255,7,16,3,255,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,3,23,6,255,255,24,71,57,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,53,71,71,55,62,20,255,255,255,255,255,3,255,20,16,255,255,255,255,255,255,255,255,255,255,255,76,76,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,255,3,19,255,255,255,51,52,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,55,55,52,53,53,62,62,255,255,255,255,255,3,2,22,16,255,255,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,255,255,255,255,255,255,30,51,52,55,62,62,62,62,62,62,62,62,62,62,62,62,62,59,61,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,57,53,53,71,71,53,57,62,20,255,255,255,255,255,18,19,6,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,76,255,255,255,255,255,255,255,255,255,6,49,51,51,55,57,62,62,62,62,62,62,62,62,62,62,62,57,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,61,59,55,55,53,71,53,71,53,71,55,62,62,255,255,255,255,29,23,16,3,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,255,255,255,255,255,255,255,255,255,3,51,49,51,51,55,55,57,61,62,62,62,62,62,62,62,62,59,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,55,53,55,71,71,71,53,71,71,71,71,53,59,62,20,255,255,255,28,24,6,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,255,255,255,255,255,30,51,49,51,56,53,55,58,57,62,62,62,62,62,62,62,57,55,55,62,62,62,62,62,62,62,62,62,62,62,62,55,55,55,71,71,71,53,52,71,71,53,71,71,53,59,62,62,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,255,255,255,255,255,22,49,51,51,53,57,59,62,62,62,62,62,62,62,62,55,55,57,55,55,55,57,62,62,62,62,62,62,62,62,62,59,57,55,55,55,55,53,55,53,53,71,71,53,57,62,61,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,76,76,255,255,255,255,255,255,255,255,6,51,50,53,61,62,62,62,62,62,62,62,62,62,62,62,62,62,59,61,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,59,57,55,55,59,59,61,55,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,255,255,255,255,255,255,255,255,49,52,57,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,30,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,31,76,3,255,255,255,255,255,255,30,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,31,255,255,255,255,255,255,255,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,255,255,255,255,255,255,51,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,29,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,76,76,76,76,255,255,255,255,255,255,255,57,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,16,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,76,76,76,255,255,255,255,255,255,49,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,58,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,255,255,255,255,255,255,255,52,62,62,62,62,62,62,62,62,62,62,62,62,57,55,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,18,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,31,76,76,31,255,255,255,255,255,255,51,55,62,62,62,62,62,62,62,62,62,62,53,52,53,52,53,55,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,16,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,76,255,255,255,3,3,255,55,59,62,62,62,62,62,62,62,52,51,52,53,51,52,52,52,53,59,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,51,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,76,2,6,16,3,3,255,71,62,62,62,62,62,62,62,71,53,71,52,52,52,53,51,71,71,55,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,25,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,76,4,7,16,6,3,255,255,57,62,62,62,62,62,71,71,71,52,52,51,52,51,71,53,52,51,55,57,59,59,62,62,62,62,62,62,62,62,62,62,62,62,62,51,255,255,255,255,255,255,255,255,255,255,255,255,255,255,6,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,4,3,3,255,255,255,71,62,62,61,59,53,71,53,51,51,51,51,53,71,53,52,51,53,52,53,55,59,59,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,255,255,255,255,255,255,6,4,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,255,255,62,62,59,55,71,52,51,52,51,71,51,54,53,52,52,52,53,51,53,53,53,55,59,62,62,62,62,62,62,62,62,62,62,52,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,76,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,255,71,59,57,53,71,71,51,51,52,48,33,33,33,49,56,51,50,53,51,56,53,71,53,60,62,62,62,62,62,62,62,62,58,19,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,76,31,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,31,255,255,255,255,255,56,53,53,71,51,52,50,50,32,33,32,32,33,32,33,32,33,50,50,53,52,50,71,53,60,62,62,62,62,62,62,55,53,255,255,255,255,255,255,255,255,255,255,255,255,255,255,8,76,76,31,76,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,71,71,71,53,54,51,33,32,32,33,34,34,33,34,33,33,33,33,34,50,52,52,71,53,53,62,62,62,62,62,62,55,23,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,76,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,71,52,52,51,52,33,32,32,34,34,35,35,35,35,34,34,34,34,33,34,72,52,51,52,52,52,62,62,62,71,52,51,255,255,255,255,255,20,20,72,20,255,255,255,255,255,255,76,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,76,255,255,255,51,53,71,52,32,33,32,34,35,67,38,35,35,35,35,35,35,34,35,34,34,33,52,71,71,71,55,53,55,52,53,71,255,255,255,255,255,49,48,49,48,6,255,255,255,255,255,76,76,31,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,6,51,71,71,32,33,32,34,34,40,40,37,67,35,35,36,35,35,35,35,35,34,34,34,33,55,55,55,53,71,71,71,255,255,255,255,255,49,48,49,48,49,18,255,255,255,255,76,76,76,31,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,255,255,16,51,52,33,32,32,13,32,33,33,32,21,13,21,13,33,34,35,35,35,35,35,35,35,34,33,50,53,51,71,71,53,255,255,255,255,255,72,48,72,48,17,255,255,3,255,255,76,76,31,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,51,33,32,12,32,38,41,40,46,47,47,67,39,40,33,15,10,33,34,35,35,35,37,35,39,34,33,34,56,53,3,255,255,255,255,49,48,49,49,49,16,255,255,255,255,76,76,76,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,76,255,255,255,255,10,32,9,33,42,41,41,41,47,47,47,47,47,67,40,47,67,34,17,15,35,35,36,36,36,36,35,34,33,7,255,255,255,255,255,48,49,28,255,255,255,255,255,255,76,76,76,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,3,12,14,35,39,39,41,41,41,46,40,46,40,67,47,67,40,40,67,40,67,15,33,67,36,36,36,36,35,35,32,3,255,255,255,255,49,25,255,255,255,255,255,255,255,76,76,31,31,31,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,76,76,255,255,255,15,32,34,39,35,39,41,36,41,41,42,45,46,47,51,46,67,47,40,40,47,67,33,33,67,35,36,35,35,35,47,7,255,255,255,255,255,255,255,255,255,255,255,255,255,76,31,31,31,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,31,76,76,255,255,255,34,34,34,36,36,39,41,41,39,41,46,41,45,47,47,47,40,40,67,40,67,40,47,40,34,67,34,37,36,35,67,9,3,255,255,255,255,255,255,255,255,255,255,255,76,76,31,76,31,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,76,76,255,255,255,34,33,35,35,35,39,41,40,41,40,46,42,42,46,67,47,50,47,39,47,67,46,40,67,46,42,67,33,35,36,39,9,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,76,31,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,31,31,31,76,255,255,255,33,34,34,35,39,39,39,40,41,38,42,40,45,46,47,47,47,47,47,67,40,40,67,42,40,67,42,33,15,40,39,15,3,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,76,76,255,255,255,9,33,33,34,36,39,38,40,39,41,40,41,40,42,67,47,47,50,47,40,47,67,47,40,67,47,67,46,46,47,40,15,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,76,255,255,255,255,8,34,34,35,39,39,41,41,41,40,41,46,42,46,67,47,47,56,47,67,40,40,67,47,46,46,67,47,42,35,6,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,76,255,255,255,255,255,4,33,34,36,39,39,41,39,46,40,40,42,45,47,47,67,56,47,47,47,67,40,40,67,45,40,36,33,8,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,31,76,255,255,255,255,255,62,62,34,34,39,41,46,41,39,41,46,40,45,46,47,47,47,67,46,40,40,40,40,34,34,32,62,62,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,31,76,76,255,255,255,255,49,62,62,255,34,33,38,39,46,41,40,41,40,40,40,40,67,47,40,46,40,34,15,27,53,62,62,62,62,255,3,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,31,31,31,76,255,255,255,255,52,62,26,255,255,15,36,34,34,40,44,40,40,40,34,32,33,46,46,45,36,255,255,255,255,255,62,62,62,62,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,31,76,76,255,255,255,255,55,62,255,255,2,255,8,39,40,40,41,40,67,67,45,45,45,35,15,8,255,255,255,255,255,255,255,62,62,62,71,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,31,76,76,255,255,255,255,53,19,255,255,255,255,255,62,34,32,34,34,33,34,33,32,9,56,62,255,255,255,255,255,255,255,255,71,62,62,71,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,31,31,31,31,76,76,255,255,255,53,62,16,255,255,3,49,3,57,62,26,255,4,255,255,255,3,48,71,62,255,255,255,255,255,255,255,255,71,62,62,71,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,31,76,255,255,255,53,62,255,255,255,16,49,255,59,62,48,3,3,255,255,20,255,55,55,62,255,255,255,255,255,3,255,255,71,62,62,71,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,31,76,255,255,255,55,62,255,255,255,72,49,255,62,62,48,6,16,22,25,19,255,71,62,62,255,255,255,255,255,20,20,3,62,62,62,53,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,76,76,255,255,255,49,62,255,255,3,49,25,255,62,62,48,6,6,6,16,255,255,53,62,62,62,255,255,255,6,50,72,255,62,62,62,30,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,49,62,7,255,3,25,17,62,62,62,48,255,255,255,6,255,255,56,59,62,62,3,255,255,49,49,6,61,62,62,62,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,30,62,62,30,22,23,62,62,62,62,255,255,255,255,3,255,255,71,55,62,62,62,72,16,255,25,62,62,62,62,49,255,255,255,255,255,255,255,255,255,255,255,255,76,31,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,30,51,71,62,62,62,62,62,62,22,255,255,255,255,255,255,255,49,55,61,62,62,62,62,62,62,62,62,71,49,49,255,255,255,255,255,255,255,255,255,255,255,255,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,19,49,51,52,53,52,55,56,51,19,255,255,255,255,255,255,255,23,49,51,57,62,62,62,62,62,55,52,49,49,3,255,255,255,255,255,255,255,255,255,255,255,255,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,255,255,255,255,3,30,51,51,53,53,52,49,72,255,7,255,255,255,255,3,255,255,49,49,51,51,52,52,53,53,55,52,50,72,255,255,6,255,255,255,255,255,255,255,255,255,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,255,16,30,49,52,51,49,72,255,255,19,255,255,255,255,255,255,255,255,49,49,49,51,51,51,52,53,52,51,255,255,16,255,255,255,255,255,255,255,255,255,255,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,255,255,6,30,49,49,48,255,6,27,6,255,255,255,255,255,3,255,255,255,49,49,49,49,51,49,51,51,255,255,30,6,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,255,255,255,255,255,3,255,255,255,255,3,255,26,16,255,255,255,255,255,255,255,255,255,255,255,16,49,48,48,48,16,255,255,26,17,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,255,3,6,3,255,3,16,18,16,255,255,255,255,255,255,255,255,255,3,255,255,255,255,255,255,255,255,255,48,26,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,255,255,255,6,6,16,6,6,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,18,18,7,255,255,255,255,255,255,255,255,255,255,255,255,255,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,31,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,5,76,76,31,76,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,6,6,6,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,16,16,19,6,3,3,255,255,255,255,255,255,255,255,255,76,76,76,31,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,16,20,23,20,19,16,7,7,6,3,255,255,255,255,4,76,76,31,31,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,16,20,30,30,26,20,20,16,16,6,3,255,255,255,76,76,76,31,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,16,20,48,48,48,26,20,20,17,6,255,255,255,255,76,76,76,31,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,6,18,30,49,49,30,22,17,6,255,255,255,255,76,76,76,76,31,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,6,20,26,48,30,25,19,7,3,255,255,255,255,76,76,31,31,31,31,76,31,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,16,19,23,26,25,19,16,255,255,255,255,255,76,76,76,76,76,76,76,76,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,6,16,18,19,16,3,255,255,255,255,255,76,76,76,76,76,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,6,3,255,255,255,255,255,76,76,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,31,76,76,76,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,76,76,76,76,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,31,76,76,76,76,76,4,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,76,76,76,76,76,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,31,31,31,31,76,76,31,31,76,31,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,31,76,76,31,31,76,31,31,31,31,76,76,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,31,31,31,76,76,76,76,31,31,76,76,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,76,76,31,76,76,76,76,76,76,76,76,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,31,31,31,31,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,255,255,255,255,255,255,255,255,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +}; + +MWIMAGEHDR image_penguin = { + 128, 151, /* width, height*/ + 1, 8, /* planes, bpp*/ + 128, 1, /* pitch, bytesperpixel*/ + 1, 256, /* compression, palsize*/ + -1L, /* transcolor*/ + palette, + imagebits, +}; Index: bmp/max4.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/max4.bmp =================================================================== --- bmp/max4.bmp (nonexistent) +++ bmp/max4.bmp (revision 174)
bmp/max4.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/rle8.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/rle8.bmp =================================================================== --- bmp/rle8.bmp (nonexistent) +++ bmp/rle8.bmp (revision 174)
bmp/rle8.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/min4.c =================================================================== --- bmp/min4.c (nonexistent) +++ bmp/min4.c (revision 174) @@ -0,0 +1,50 @@ +/* Generated by convbmp*/ +#include "device.h" + +/* MWIMAGEHDR image_min4 converted from min4.bmp*/ + +static MWPALENTRY palette[16] = { + RGBDEF( 0, 0, 0 ), /* pal 0*/ + RGBDEF( 191, 0, 0 ), /* pal 1*/ + RGBDEF( 0, 191, 0 ), /* pal 2*/ + RGBDEF( 191, 191, 0 ), /* pal 3*/ + RGBDEF( 0, 0, 191 ), /* pal 4*/ + RGBDEF( 191, 0, 191 ), /* pal 5*/ + RGBDEF( 0, 191, 191 ), /* pal 6*/ + RGBDEF( 192, 192, 192 ), /* pal 7*/ + RGBDEF( 128, 128, 128 ), /* pal 8*/ + RGBDEF( 255, 0, 0 ), /* pal 9*/ + RGBDEF( 0, 255, 0 ), /* pal 10*/ + RGBDEF( 255, 255, 0 ), /* pal 11*/ + RGBDEF( 0, 0, 255 ), /* pal 12*/ + RGBDEF( 255, 0, 255 ), /* pal 13*/ + RGBDEF( 0, 255, 255 ), /* pal 14*/ + RGBDEF( 255, 255, 255 ), /* pal 15*/ +}; + +static MWUCHAR imagebits[] = { +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xf8,0x88,0x88,0x88,0x88,0x88,0x88,0x80, +0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80, +0xf7,0x77,0x00,0x00,0x00,0x77,0x77,0x80, +0xf7,0x77,0x00,0x00,0x00,0x77,0x77,0x80, +0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80, +0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80, +0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80, +0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80, +0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80, +0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80, +0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80, +0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +}; + +MWIMAGEHDR image_min4 = { + 16, 14, /* width, height*/ + 1, 4, /* planes, bpp*/ + 8, 1, /* pitch, bytesperpixel*/ + 1, 16, /* compression, palsize*/ + -1L, /* transcolor*/ + palette, + imagebits, +}; Index: bmp/max4.c =================================================================== --- bmp/max4.c (nonexistent) +++ bmp/max4.c (revision 174) @@ -0,0 +1,50 @@ +/* Generated by convbmp*/ +#include "device.h" + +/* MWIMAGEHDR image_max4 converted from max4.bmp*/ + +static MWPALENTRY palette[16] = { + RGBDEF( 0, 0, 0 ), /* pal 0*/ + RGBDEF( 191, 0, 0 ), /* pal 1*/ + RGBDEF( 0, 191, 0 ), /* pal 2*/ + RGBDEF( 191, 191, 0 ), /* pal 3*/ + RGBDEF( 0, 0, 191 ), /* pal 4*/ + RGBDEF( 191, 0, 191 ), /* pal 5*/ + RGBDEF( 0, 191, 191 ), /* pal 6*/ + RGBDEF( 192, 192, 192 ), /* pal 7*/ + RGBDEF( 128, 128, 128 ), /* pal 8*/ + RGBDEF( 255, 0, 0 ), /* pal 9*/ + RGBDEF( 0, 255, 0 ), /* pal 10*/ + RGBDEF( 255, 255, 0 ), /* pal 11*/ + RGBDEF( 0, 0, 255 ), /* pal 12*/ + RGBDEF( 255, 0, 255 ), /* pal 13*/ + RGBDEF( 0, 255, 255 ), /* pal 14*/ + RGBDEF( 255, 255, 255 ), /* pal 15*/ +}; + +static MWUCHAR imagebits[] = { +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xf8,0x88,0x88,0x88,0x88,0x88,0x88,0x80, +0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80, +0xf7,0x70,0x00,0x00,0x00,0x00,0x77,0x80, +0xf7,0x70,0x77,0x77,0x77,0x70,0x77,0x80, +0xf7,0x70,0x77,0x77,0x77,0x70,0x77,0x80, +0xf7,0x70,0x77,0x77,0x77,0x70,0x77,0x80, +0xf7,0x70,0x77,0x77,0x77,0x70,0x77,0x80, +0xf7,0x70,0x77,0x77,0x77,0x70,0x77,0x80, +0xf7,0x70,0x77,0x77,0x77,0x70,0x77,0x80, +0xf7,0x70,0x00,0x00,0x00,0x00,0x77,0x80, +0xf7,0x70,0x00,0x00,0x00,0x00,0x77,0x80, +0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, +}; + +MWIMAGEHDR image_max4 = { + 16, 14, /* width, height*/ + 1, 4, /* planes, bpp*/ + 8, 1, /* pitch, bytesperpixel*/ + 1, 16, /* compression, palsize*/ + -1L, /* transcolor*/ + palette, + imagebits, +}; Index: bmp/rle8.c =================================================================== --- bmp/rle8.c (nonexistent) +++ bmp/rle8.c (revision 174) @@ -0,0 +1,476 @@ +/* Generated by convbmp*/ +#include "device.h" + +/* MWIMAGEHDR image_rle8 converted from rle8.bmp*/ + +static MWPALENTRY palette[256] = { + RGBDEF( 8, 8, 16 ), /* pal 0*/ + RGBDEF( 16, 16, 24 ), /* pal 1*/ + RGBDEF( 24, 16, 24 ), /* pal 2*/ + RGBDEF( 74, 16, 24 ), /* pal 3*/ + RGBDEF( 90, 16, 24 ), /* pal 4*/ + RGBDEF( 33, 33, 33 ), /* pal 5*/ + RGBDEF( 41, 24, 33 ), /* pal 6*/ + RGBDEF( 41, 33, 33 ), /* pal 7*/ + RGBDEF( 74, 33, 33 ), /* pal 8*/ + RGBDEF( 24, 24, 41 ), /* pal 9*/ + RGBDEF( 41, 33, 41 ), /* pal 10*/ + RGBDEF( 49, 33, 41 ), /* pal 11*/ + RGBDEF( 49, 49, 41 ), /* pal 12*/ + RGBDEF( 57, 41, 41 ), /* pal 13*/ + RGBDEF( 57, 49, 41 ), /* pal 14*/ + RGBDEF( 74, 41, 41 ), /* pal 15*/ + RGBDEF( 74, 49, 41 ), /* pal 16*/ + RGBDEF( 90, 49, 41 ), /* pal 17*/ + RGBDEF( 107, 49, 41 ), /* pal 18*/ + RGBDEF( 115, 41, 41 ), /* pal 19*/ + RGBDEF( 123, 57, 41 ), /* pal 20*/ + RGBDEF( 57, 49, 49 ), /* pal 21*/ + RGBDEF( 90, 66, 49 ), /* pal 22*/ + RGBDEF( 99, 82, 49 ), /* pal 23*/ + RGBDEF( 115, 66, 49 ), /* pal 24*/ + RGBDEF( 33, 41, 57 ), /* pal 25*/ + RGBDEF( 49, 41, 57 ), /* pal 26*/ + RGBDEF( 49, 49, 57 ), /* pal 27*/ + RGBDEF( 57, 66, 57 ), /* pal 28*/ + RGBDEF( 82, 57, 57 ), /* pal 29*/ + RGBDEF( 90, 66, 57 ), /* pal 30*/ + RGBDEF( 107, 66, 57 ), /* pal 31*/ + RGBDEF( 107, 82, 57 ), /* pal 32*/ + RGBDEF( 123, 74, 57 ), /* pal 33*/ + RGBDEF( 123, 82, 57 ), /* pal 34*/ + RGBDEF( 74, 82, 66 ), /* pal 35*/ + RGBDEF( 99, 82, 66 ), /* pal 36*/ + RGBDEF( 123, 99, 66 ), /* pal 37*/ + RGBDEF( 41, 57, 74 ), /* pal 38*/ + RGBDEF( 57, 49, 74 ), /* pal 39*/ + RGBDEF( 57, 66, 74 ), /* pal 40*/ + RGBDEF( 66, 82, 74 ), /* pal 41*/ + RGBDEF( 90, 66, 74 ), /* pal 42*/ + RGBDEF( 107, 90, 74 ), /* pal 43*/ + RGBDEF( 115, 74, 74 ), /* pal 44*/ + RGBDEF( 115, 99, 74 ), /* pal 45*/ + RGBDEF( 123, 90, 74 ), /* pal 46*/ + RGBDEF( 132, 99, 74 ), /* pal 47*/ + RGBDEF( 132, 115, 74 ), /* pal 48*/ + RGBDEF( 90, 82, 82 ), /* pal 49*/ + RGBDEF( 99, 99, 82 ), /* pal 50*/ + RGBDEF( 41, 66, 90 ), /* pal 51*/ + RGBDEF( 33, 82, 148 ), /* pal 52*/ + RGBDEF( 49, 66, 115 ), /* pal 53*/ + RGBDEF( 49, 66, 123 ), /* pal 54*/ + RGBDEF( 49, 82, 140 ), /* pal 55*/ + RGBDEF( 49, 90, 156 ), /* pal 56*/ + RGBDEF( 57, 82, 107 ), /* pal 57*/ + RGBDEF( 57, 82, 132 ), /* pal 58*/ + RGBDEF( 66, 66, 90 ), /* pal 59*/ + RGBDEF( 66, 74, 90 ), /* pal 60*/ + RGBDEF( 66, 82, 148 ), /* pal 61*/ + RGBDEF( 66, 99, 132 ), /* pal 62*/ + RGBDEF( 66, 99, 148 ), /* pal 63*/ + RGBDEF( 74, 82, 90 ), /* pal 64*/ + RGBDEF( 79, 98, 109 ), /* pal 65*/ + RGBDEF( 107, 90, 107 ), /* pal 66*/ + RGBDEF( 103, 107, 107 ), /* pal 67*/ + RGBDEF( 123, 107, 94 ), /* pal 68*/ + RGBDEF( 115, 107, 123 ), /* pal 69*/ + RGBDEF( 127, 115, 107 ), /* pal 70*/ + RGBDEF( 74, 99, 132 ), /* pal 71*/ + RGBDEF( 82, 107, 132 ), /* pal 72*/ + RGBDEF( 90, 123, 132 ), /* pal 73*/ + RGBDEF( 115, 132, 132 ), /* pal 74*/ + RGBDEF( 107, 123, 148 ), /* pal 75*/ + RGBDEF( 74, 123, 156 ), /* pal 76*/ + RGBDEF( 99, 107, 156 ), /* pal 77*/ + RGBDEF( 123, 140, 156 ), /* pal 78*/ + RGBDEF( 99, 123, 165 ), /* pal 79*/ + RGBDEF( 49, 90, 173 ), /* pal 80*/ + RGBDEF( 57, 99, 173 ), /* pal 81*/ + RGBDEF( 66, 107, 173 ), /* pal 82*/ + RGBDEF( 49, 90, 181 ), /* pal 83*/ + RGBDEF( 66, 107, 181 ), /* pal 84*/ + RGBDEF( 66, 115, 181 ), /* pal 85*/ + RGBDEF( 90, 115, 181 ), /* pal 86*/ + RGBDEF( 107, 140, 181 ), /* pal 87*/ + RGBDEF( 66, 107, 189 ), /* pal 88*/ + RGBDEF( 74, 115, 189 ), /* pal 89*/ + RGBDEF( 74, 123, 198 ), /* pal 90*/ + RGBDEF( 90, 132, 198 ), /* pal 91*/ + RGBDEF( 99, 140, 198 ), /* pal 92*/ + RGBDEF( 115, 148, 198 ), /* pal 93*/ + RGBDEF( 123, 115, 198 ), /* pal 94*/ + RGBDEF( 82, 132, 206 ), /* pal 95*/ + RGBDEF( 99, 148, 206 ), /* pal 96*/ + RGBDEF( 115, 148, 206 ), /* pal 97*/ + RGBDEF( 115, 156, 206 ), /* pal 98*/ + RGBDEF( 57, 107, 214 ), /* pal 99*/ + RGBDEF( 74, 132, 214 ), /* pal 100*/ + RGBDEF( 107, 148, 214 ), /* pal 101*/ + RGBDEF( 99, 148, 222 ), /* pal 102*/ + RGBDEF( 115, 165, 222 ), /* pal 103*/ + RGBDEF( 140, 41, 24 ), /* pal 104*/ + RGBDEF( 140, 49, 41 ), /* pal 105*/ + RGBDEF( 140, 99, 66 ), /* pal 106*/ + RGBDEF( 148, 66, 33 ), /* pal 107*/ + RGBDEF( 148, 66, 49 ), /* pal 108*/ + RGBDEF( 148, 74, 57 ), /* pal 109*/ + RGBDEF( 148, 90, 57 ), /* pal 110*/ + RGBDEF( 156, 82, 57 ), /* pal 111*/ + RGBDEF( 165, 49, 41 ), /* pal 112*/ + RGBDEF( 165, 66, 49 ), /* pal 113*/ + RGBDEF( 165, 90, 57 ), /* pal 114*/ + RGBDEF( 189, 71, 55 ), /* pal 115*/ + RGBDEF( 165, 99, 66 ), /* pal 116*/ + RGBDEF( 148, 115, 74 ), /* pal 117*/ + RGBDEF( 165, 82, 74 ), /* pal 118*/ + RGBDEF( 165, 115, 74 ), /* pal 119*/ + RGBDEF( 156, 111, 82 ), /* pal 120*/ + RGBDEF( 152, 111, 115 ), /* pal 121*/ + RGBDEF( 181, 99, 66 ), /* pal 122*/ + RGBDEF( 181, 115, 74 ), /* pal 123*/ + RGBDEF( 181, 115, 82 ), /* pal 124*/ + RGBDEF( 198, 103, 70 ), /* pal 125*/ + RGBDEF( 198, 123, 74 ), /* pal 126*/ + RGBDEF( 219, 109, 71 ), /* pal 127*/ + RGBDEF( 231, 123, 74 ), /* pal 128*/ + RGBDEF( 145, 134, 87 ), /* pal 129*/ + RGBDEF( 162, 140, 98 ), /* pal 130*/ + RGBDEF( 151, 138, 130 ), /* pal 131*/ + RGBDEF( 181, 123, 82 ), /* pal 132*/ + RGBDEF( 189, 140, 90 ), /* pal 133*/ + RGBDEF( 178, 140, 126 ), /* pal 134*/ + RGBDEF( 189, 156, 82 ), /* pal 135*/ + RGBDEF( 198, 132, 82 ), /* pal 136*/ + RGBDEF( 198, 140, 82 ), /* pal 137*/ + RGBDEF( 214, 140, 82 ), /* pal 138*/ + RGBDEF( 198, 156, 90 ), /* pal 139*/ + RGBDEF( 214, 132, 90 ), /* pal 140*/ + RGBDEF( 201, 155, 112 ), /* pal 141*/ + RGBDEF( 239, 131, 82 ), /* pal 142*/ + RGBDEF( 247, 148, 82 ), /* pal 143*/ + RGBDEF( 231, 148, 90 ), /* pal 144*/ + RGBDEF( 247, 152, 90 ), /* pal 145*/ + RGBDEF( 255, 165, 90 ), /* pal 146*/ + RGBDEF( 232, 156, 109 ), /* pal 147*/ + RGBDEF( 251, 169, 115 ), /* pal 148*/ + RGBDEF( 214, 173, 115 ), /* pal 149*/ + RGBDEF( 247, 178, 101 ), /* pal 150*/ + RGBDEF( 239, 181, 123 ), /* pal 151*/ + RGBDEF( 240, 193, 113 ), /* pal 152*/ + RGBDEF( 255, 198, 123 ), /* pal 153*/ + RGBDEF( 255, 214, 132 ), /* pal 154*/ + RGBDEF( 132, 156, 181 ), /* pal 155*/ + RGBDEF( 132, 173, 206 ), /* pal 156*/ + RGBDEF( 140, 123, 148 ), /* pal 157*/ + RGBDEF( 140, 165, 165 ), /* pal 158*/ + RGBDEF( 140, 173, 198 ), /* pal 159*/ + RGBDEF( 140, 173, 222 ), /* pal 160*/ + RGBDEF( 140, 181, 231 ), /* pal 161*/ + RGBDEF( 148, 181, 222 ), /* pal 162*/ + RGBDEF( 148, 189, 247 ), /* pal 163*/ + RGBDEF( 156, 156, 165 ), /* pal 164*/ + RGBDEF( 156, 165, 165 ), /* pal 165*/ + RGBDEF( 156, 165, 189 ), /* pal 166*/ + RGBDEF( 156, 173, 198 ), /* pal 167*/ + RGBDEF( 156, 189, 222 ), /* pal 168*/ + RGBDEF( 156, 189, 231 ), /* pal 169*/ + RGBDEF( 165, 198, 198 ), /* pal 170*/ + RGBDEF( 165, 198, 222 ), /* pal 171*/ + RGBDEF( 165, 206, 173 ), /* pal 172*/ + RGBDEF( 173, 198, 239 ), /* pal 173*/ + RGBDEF( 173, 206, 247 ), /* pal 174*/ + RGBDEF( 181, 181, 198 ), /* pal 175*/ + RGBDEF( 181, 198, 189 ), /* pal 176*/ + RGBDEF( 181, 198, 239 ), /* pal 177*/ + RGBDEF( 181, 206, 206 ), /* pal 178*/ + RGBDEF( 181, 206, 231 ), /* pal 179*/ + RGBDEF( 189, 173, 148 ), /* pal 180*/ + RGBDEF( 206, 181, 140 ), /* pal 181*/ + RGBDEF( 231, 173, 140 ), /* pal 182*/ + RGBDEF( 247, 198, 140 ), /* pal 183*/ + RGBDEF( 255, 206, 140 ), /* pal 184*/ + RGBDEF( 231, 198, 148 ), /* pal 185*/ + RGBDEF( 255, 222, 148 ), /* pal 186*/ + RGBDEF( 198, 185, 156 ), /* pal 187*/ + RGBDEF( 210, 185, 172 ), /* pal 188*/ + RGBDEF( 222, 181, 189 ), /* pal 189*/ + RGBDEF( 189, 198, 198 ), /* pal 190*/ + RGBDEF( 238, 198, 165 ), /* pal 191*/ + RGBDEF( 222, 206, 201 ), /* pal 192*/ + RGBDEF( 247, 239, 181 ), /* pal 193*/ + RGBDEF( 189, 198, 222 ), /* pal 194*/ + RGBDEF( 198, 214, 222 ), /* pal 195*/ + RGBDEF( 206, 214, 222 ), /* pal 196*/ + RGBDEF( 255, 247, 222 ), /* pal 197*/ + RGBDEF( 198, 214, 231 ), /* pal 198*/ + RGBDEF( 206, 214, 239 ), /* pal 199*/ + RGBDEF( 214, 222, 239 ), /* pal 200*/ + RGBDEF( 231, 231, 239 ), /* pal 201*/ + RGBDEF( 198, 214, 247 ), /* pal 202*/ + RGBDEF( 198, 222, 247 ), /* pal 203*/ + RGBDEF( 214, 231, 247 ), /* pal 204*/ + RGBDEF( 231, 239, 255 ), /* pal 205*/ + RGBDEF( 247, 247, 255 ), /* pal 206*/ + RGBDEF( 0, 0, 0 ), /* pal 207*/ + RGBDEF( 0, 0, 0 ), /* pal 208*/ + RGBDEF( 0, 0, 0 ), /* pal 209*/ + RGBDEF( 0, 0, 0 ), /* pal 210*/ + RGBDEF( 0, 0, 0 ), /* pal 211*/ + RGBDEF( 0, 0, 0 ), /* pal 212*/ + RGBDEF( 0, 0, 0 ), /* pal 213*/ + RGBDEF( 0, 0, 0 ), /* pal 214*/ + RGBDEF( 0, 0, 0 ), /* pal 215*/ + RGBDEF( 0, 0, 0 ), /* pal 216*/ + RGBDEF( 0, 0, 0 ), /* pal 217*/ + RGBDEF( 0, 0, 0 ), /* pal 218*/ + RGBDEF( 0, 0, 0 ), /* pal 219*/ + RGBDEF( 0, 0, 0 ), /* pal 220*/ + RGBDEF( 0, 0, 0 ), /* pal 221*/ + RGBDEF( 0, 0, 0 ), /* pal 222*/ + RGBDEF( 0, 0, 0 ), /* pal 223*/ + RGBDEF( 0, 0, 0 ), /* pal 224*/ + RGBDEF( 0, 0, 0 ), /* pal 225*/ + RGBDEF( 0, 0, 0 ), /* pal 226*/ + RGBDEF( 0, 0, 0 ), /* pal 227*/ + RGBDEF( 0, 0, 0 ), /* pal 228*/ + RGBDEF( 0, 0, 0 ), /* pal 229*/ + RGBDEF( 0, 0, 0 ), /* pal 230*/ + RGBDEF( 0, 0, 0 ), /* pal 231*/ + RGBDEF( 0, 0, 0 ), /* pal 232*/ + RGBDEF( 0, 0, 0 ), /* pal 233*/ + RGBDEF( 0, 0, 0 ), /* pal 234*/ + RGBDEF( 0, 0, 0 ), /* pal 235*/ + RGBDEF( 0, 0, 0 ), /* pal 236*/ + RGBDEF( 0, 0, 0 ), /* pal 237*/ + RGBDEF( 0, 0, 0 ), /* pal 238*/ + RGBDEF( 0, 0, 0 ), /* pal 239*/ + RGBDEF( 0, 0, 0 ), /* pal 240*/ + RGBDEF( 0, 0, 0 ), /* pal 241*/ + RGBDEF( 0, 0, 0 ), /* pal 242*/ + RGBDEF( 0, 0, 0 ), /* pal 243*/ + RGBDEF( 0, 0, 0 ), /* pal 244*/ + RGBDEF( 0, 0, 0 ), /* pal 245*/ + RGBDEF( 0, 0, 0 ), /* pal 246*/ + RGBDEF( 0, 0, 0 ), /* pal 247*/ + RGBDEF( 0, 0, 0 ), /* pal 248*/ + RGBDEF( 0, 0, 0 ), /* pal 249*/ + RGBDEF( 0, 0, 0 ), /* pal 250*/ + RGBDEF( 0, 0, 0 ), /* pal 251*/ + RGBDEF( 0, 0, 0 ), /* pal 252*/ + RGBDEF( 0, 0, 0 ), /* pal 253*/ + RGBDEF( 0, 0, 0 ), /* pal 254*/ + RGBDEF( 0, 0, 0 ), /* pal 255*/ +}; + +static MWUCHAR imagebits[] = { +5,5,13,12,22,11,5,2,2,2,5,2,2,2,1,2,5,2,13,7,11,5,2,2,2,5,2,5,2,1,1,1,1,2,5,2,2,2,2,9,1,1,2,14,1,1,1,1,0,1,1,1,0,2,2,2,2,2,1,1,1,0,1,0,1,0,1,0,0,2,0,2,1,0,1,1,1,1,1,1,1,2,0,0,2,0,2,1,0,2,0,1,7,13,0,1,0,2,1,0,1,1,1,1,0,1,2,2,1,2,2,2,1,1,1,1,2,2,1,0,1,5,1,2,1,2,2,1,1,2,16,13,2,2,2,2,2,1,1,1,1,1,0,2,0,2,1,1,1,14,22,133,30,29,11,5,7,6,7,7,15,16,15,13,13,0,2,6,1,14,23,17,16,16,16,30,34,6,34,18,47,13,2,7,5,13,1,2,2,1,2,5,2,1,2,1,1,1,2,1,0,1,1,2,0,1,2,2,1,2,5,1,2,0,2,0,1,1,0,2,1,2,2,5,1,1,1,1,1,1,1,2,5,2,1,1,0,2,1,1,1,1,1,2,6,2,1,2,13,2,1,2,2,2,5,1,6,7,6,2,7,6,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,1,2,2,2,11,2,10,12,2,2,2,5,2,2,2,10,1,1,2,1,2,2,1,1,1,5,2,5,2,1,2,2,9,5,2,2, +13,2,14,21,13,7,2,2,6,7,12,5,5,6,1,2,2,5,7,11,2,2,1,5,2,11,2,2,2,1,1,2,1,1,2,5,2,5,2,1,2,1,2,2,1,1,1,0,2,1,1,1,1,0,2,0,1,0,2,1,1,0,2,1,1,1,1,1,1,1,1,0,1,1,1,2,1,2,2,1,0,0,1,1,1,2,1,0,1,1,2,2,2,1,1,5,2,1,0,1,1,2,7,7,6,1,2,5,2,2,5,2,1,1,1,0,2,2,1,1,1,1,1,1,1,2,5,1,1,0,7,7,1,2,22,7,22,6,1,2,1,2,1,0,1,1,2,2,2,23,14,20,14,7,7,13,7,7,5,2,13,34,13,6,0,2,1,5,5,13,14,16,14,13,24,31,11,23,17,22,13,13,2,6,5,2,2,1,1,1,2,2,2,2,1,1,1,2,1,1,6,1,1,0,1,2,1,2,6,2,2,1,2,2,1,0,2,0,2,0,2,1,1,2,1,1,1,1,1,2,1,1,2,2,1,1,1,0,1,1,1,1,2,6,6,1,2,2,7,2,2,2,1,5,2,2,6,6,6,6,2,2,6,6,7,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,1,2,5,6,6,6,6,2,2,6,2,2,2,5,6,2,1,1,1,1,2,1,2,5,1,2,9,11,5,2,5,9,12,2,9,0, +2,2,6,2,5,13,2,5,5,7,2,2,2,2,2,2,5,2,5,1,1,1,1,1,1,5,1,1,1,2,2,5,1,1,1,2,2,2,2,1,1,1,1,0,1,1,0,2,1,1,1,0,1,1,1,0,2,1,0,2,0,2,0,1,2,1,2,1,1,1,1,1,1,1,2,5,14,2,1,1,1,1,1,1,1,0,2,1,1,0,1,0,2,1,0,2,1,1,1,1,2,6,2,1,2,5,2,2,5,2,2,1,1,2,1,0,1,2,1,2,1,2,1,1,1,2,7,1,5,2,1,2,2,6,2,1,2,11,2,6,1,1,1,1,1,0,1,1,1,1,1,1,2,6,2,13,7,7,2,23,13,21,2,1,2,13,2,7,5,2,6,1,2,13,23,17,16,29,14,14,29,1,7,2,6,1,2,1,1,2,2,5,2,1,1,1,1,2,5,5,2,2,1,1,1,1,1,2,2,2,1,2,2,2,0,2,0,2,0,2,0,2,1,2,1,1,1,1,1,1,1,1,2,6,0,1,1,1,1,1,1,1,1,2,7,6,1,2,5,2,6,2,2,2,2,11,6,7,6,2,2,5,6,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,2,12,5,11,10,7,6,2,2,7,12,1,11,2,1,1,1,1,1,1,1,1,1,2,5,26,6,1,9,9,2,25,2,1, +13,11,2,2,2,5,6,5,7,7,6,2,2,2,5,2,2,2,2,5,2,5,2,2,2,2,5,2,2,1,1,1,2,5,1,2,6,2,1,2,1,1,1,1,0,2,1,0,1,0,2,1,1,1,1,1,1,0,1,0,1,1,1,1,2,1,2,2,2,2,5,1,1,2,0,1,1,1,1,1,1,1,2,2,1,1,0,2,1,1,1,1,0,1,1,1,2,1,2,1,5,2,2,5,1,2,5,2,2,2,2,1,1,0,0,2,1,2,2,5,2,2,1,0,1,7,7,2,7,2,5,1,1,1,2,2,14,22,16,6,2,2,2,2,1,1,1,1,0,2,2,6,1,2,2,16,11,2,2,2,1,2,1,1,2,13,2,5,5,7,2,5,2,14,14,14,14,7,13,7,2,2,106,16,2,2,5,2,1,2,2,2,1,1,1,1,2,2,2,5,2,6,1,1,1,0,1,1,2,5,1,2,1,1,0,2,0,2,0,2,0,1,1,1,1,1,1,1,2,1,1,1,2,2,1,1,1,2,1,1,1,1,6,1,6,2,2,1,1,2,5,1,2,5,1,11,2,11,6,2,2,2,2,7,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,1,2,2,10,11,10,10,13,11,2,2,2,6,2,9,11,1,1,1,1,1,1,1,1,2,2,5,2,5,1,2,2,2,2,5,2, +21,21,13,2,11,7,11,7,14,13,7,13,5,2,2,5,2,5,16,2,2,1,1,5,2,2,2,6,1,1,1,1,2,2,5,2,2,2,1,2,2,0,1,1,1,1,0,2,1,1,0,2,2,1,1,1,0,2,1,1,1,1,1,5,1,2,2,1,1,2,2,2,1,1,2,0,2,0,2,2,1,2,2,2,1,1,1,0,2,2,1,1,1,1,2,5,2,2,5,0,1,2,5,0,1,1,2,2,2,1,1,1,0,2,1,1,0,2,1,1,1,1,1,1,1,2,5,5,7,7,2,6,1,6,7,6,117,114,18,14,13,2,7,6,6,0,2,1,7,6,2,2,7,6,8,24,32,7,6,5,7,6,1,0,2,32,13,2,6,14,2,2,13,1,2,7,13,1,2,2,1,2,114,122,2,1,2,2,1,2,1,1,1,1,2,1,2,2,6,1,2,2,1,1,1,1,1,1,2,2,1,1,1,1,2,0,2,0,1,1,1,2,2,1,1,1,1,1,1,1,1,1,5,2,1,1,1,1,1,1,1,2,2,7,6,2,1,1,1,1,2,2,2,2,5,2,2,11,7,7,6,6,2,5,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,1,2,10,11,6,2,10,10,2,11,1,2,2,2,7,6,1,1,1,1,1,1,1,1,1,5,26,11,2,1,5,5,10,10,10,1, +22,13,13,11,13,13,11,5,13,1,2,1,2,5,2,5,1,11,2,2,1,1,2,1,1,5,2,2,5,2,1,5,13,2,2,5,1,1,1,1,1,1,1,1,0,2,1,0,2,1,1,0,2,1,1,0,2,0,2,1,0,2,1,2,2,5,1,1,2,1,2,1,1,2,1,1,0,2,0,0,2,2,2,1,1,0,1,1,1,2,2,1,2,1,2,1,2,6,2,1,2,5,2,5,1,0,2,0,1,1,0,2,1,0,2,1,1,2,2,2,2,1,1,1,2,2,1,1,1,1,1,2,13,1,2,2,7,7,11,6,13,1,2,2,2,1,1,2,24,17,2,5,2,2,119,106,132,17,2,14,22,16,16,119,14,14,6,23,16,16,13,7,2,2,6,1,2,6,16,16,17,119,116,122,1,5,2,1,1,1,1,1,1,0,1,1,2,5,2,2,1,1,1,1,2,1,1,1,1,1,5,0,1,1,1,2,0,1,1,1,1,1,2,1,1,2,1,6,1,1,2,1,2,5,0,2,1,1,1,1,1,1,1,2,7,2,1,1,1,2,1,2,5,2,2,2,11,7,2,2,2,2,6,13,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,5,2,5,12,6,11,2,10,2,5,2,6,2,2,2,1,2,1,1,1,1,5,1,2,2,10,2,2,2,10,10,12,5,9,2, +13,13,2,13,14,26,7,2,2,2,6,1,2,2,1,2,13,7,2,2,5,1,1,1,2,2,5,2,5,5,2,2,2,2,2,2,2,1,1,1,1,0,1,0,1,1,0,2,0,2,1,1,0,2,1,0,2,1,0,1,1,2,1,2,5,0,1,1,1,2,0,0,2,1,0,1,1,0,2,1,1,2,0,1,1,0,2,1,2,1,0,2,1,1,1,2,5,2,2,2,2,2,7,2,2,2,2,0,1,0,2,0,2,1,0,0,2,2,5,2,5,1,1,1,5,2,1,2,2,1,1,2,7,6,2,5,2,6,5,2,5,7,14,6,6,0,2,5,14,20,1,2,2,7,24,152,16,12,2,7,7,14,13,14,7,7,14,13,13,2,2,6,1,6,0,16,30,33,29,18,24,137,16,2,1,2,2,1,1,1,1,0,1,1,1,1,1,2,1,1,1,1,1,0,1,1,1,1,2,1,2,2,0,1,1,2,1,1,1,1,2,1,6,1,2,1,1,1,1,2,6,1,2,2,1,0,1,1,1,1,1,1,1,6,6,1,1,1,1,1,2,1,2,1,5,2,11,6,6,5,2,2,11,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,7,10,11,2,2,1,2,2,2,11,2,2,1,1,2,1,1,1,2,1,5,9,1,6,25,5,9,5,9,5,1, +2,5,7,13,2,5,2,5,11,2,2,6,2,2,2,2,2,13,1,2,1,1,2,1,1,1,2,2,2,6,2,2,1,1,0,0,2,1,0,1,1,1,1,1,1,1,1,0,2,0,2,1,1,0,2,1,0,1,1,1,1,2,1,2,2,1,1,0,1,0,2,1,1,1,1,2,1,1,0,2,0,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,2,5,2,1,2,2,2,1,2,0,1,1,1,0,2,0,1,0,2,1,0,2,2,1,2,2,1,1,2,1,2,1,2,1,2,6,1,6,2,2,2,7,6,2,5,6,2,6,1,2,1,1,2,2,6,1,7,117,154,123,5,5,5,13,1,1,2,2,5,6,7,2,2,2,5,2,2,2,7,24,22,24,32,22,24,7,1,2,5,2,1,1,0,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,2,1,1,2,1,2,0,2,0,1,1,0,2,1,1,5,2,1,5,1,2,1,1,1,1,1,2,6,0,1,1,1,1,1,1,1,2,2,7,2,1,2,1,5,2,2,5,2,2,2,11,6,2,2,6,5,13,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,12,2,2,5,2,2,2,1,11,2,2,11,1,1,2,1,1,1,1,1,1,1,2,5,9,1,5,5,9,2,2,1,1, +11,12,7,12,7,5,13,11,2,5,7,14,13,2,1,12,11,2,1,2,1,5,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,2,0,1,1,1,0,1,0,1,1,1,1,5,2,5,1,1,1,1,1,0,2,1,2,0,0,2,0,2,1,1,1,1,1,1,1,0,1,1,1,0,1,0,2,5,2,2,2,1,1,1,1,1,1,2,0,1,0,2,0,2,1,2,2,0,2,2,2,1,1,1,2,1,1,1,2,1,1,1,1,2,6,2,2,6,2,7,2,6,1,2,7,5,2,6,1,1,2,5,2,23,152,149,34,1,7,2,5,2,2,2,6,5,7,7,7,6,1,2,2,2,6,6,6,23,34,22,6,1,1,2,2,1,2,2,1,1,2,1,1,0,1,1,1,2,1,1,1,1,1,1,1,1,2,2,1,1,2,1,2,0,2,1,1,1,1,1,1,1,2,2,2,1,1,2,1,1,1,1,1,1,2,1,1,0,2,1,6,1,2,2,2,7,2,1,2,1,2,2,2,2,1,5,2,2,11,2,2,6,5,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,6,2,25,2,2,9,7,1,2,5,1,2,11,10,2,2,1,1,1,1,1,1,1,1,2,2,25,10,10,2,5,5,9,2,2, +2,10,2,2,2,5,12,1,5,2,13,13,2,6,1,1,2,2,5,2,1,2,1,1,1,1,1,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,2,0,1,1,2,2,2,1,1,1,1,0,2,0,0,1,0,0,2,0,2,0,2,1,1,2,1,1,1,1,1,0,2,6,1,1,5,1,1,2,0,1,2,2,5,2,1,1,1,1,1,0,2,0,2,1,0,0,2,1,1,1,1,2,1,1,1,5,2,5,1,2,2,6,13,2,5,2,2,2,7,2,6,1,2,7,1,2,2,1,1,2,2,34,32,22,2,13,1,6,1,5,1,1,2,7,13,7,2,2,1,5,2,5,6,2,2,6,1,5,1,1,2,0,1,2,2,2,2,1,1,1,1,2,1,1,2,2,1,2,1,1,2,0,1,1,2,5,1,1,2,0,2,0,1,1,0,1,1,1,0,2,2,6,2,1,2,1,1,1,1,1,1,1,12,0,0,1,1,2,2,1,2,6,1,13,1,2,1,1,1,1,1,2,5,2,2,5,11,6,6,2,6,7,2,6,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,2,13,2,2,5,2,5,1,6,2,2,2,1,1,1,1,1,2,5,2,5,10,2,2,2,1,1,1,5,2,2, +2,2,2,1,2,6,1,1,1,2,14,11,2,2,5,2,5,1,1,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,2,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,2,1,1,1,1,1,1,1,2,0,1,1,1,1,2,0,1,1,0,2,0,1,1,1,1,1,1,1,0,1,0,2,2,6,1,1,0,1,2,1,6,1,6,2,2,2,1,1,2,2,2,2,2,2,2,2,2,1,1,0,2,0,1,0,2,1,1,1,2,1,2,2,2,2,2,2,2,2,2,1,6,5,7,2,2,2,2,6,7,2,2,6,7,7,2,5,2,1,1,2,2,2,6,2,7,2,6,1,1,2,1,5,2,11,6,6,6,1,2,2,2,2,7,6,6,2,2,2,1,2,0,2,1,1,1,1,1,1,1,1,2,1,2,1,2,5,2,5,1,1,1,1,1,1,2,2,2,0,1,2,2,1,1,1,2,1,1,1,1,1,2,2,2,5,2,1,2,5,1,2,1,2,6,1,1,1,1,2,5,1,2,2,6,7,2,1,2,1,2,1,1,1,2,5,2,2,11,2,11,7,7,12,2,2,6,1,1,1,1,1,1,1,1,0,2,1,1,1,1,1,1,5,1,1,2,12,2,2,6,1,2,6,2,2,2,2,12,11,2,2,1,1,1,1,1,2,2,1,1,5,2,1,5,1,5,1,2,9,12,2, +2,2,5,5,7,7,13,2,2,5,1,1,5,2,1,1,1,1,2,5,1,2,1,1,1,0,1,2,0,2,0,1,1,1,1,2,5,2,2,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,2,0,1,1,1,1,2,0,2,0,1,1,1,0,1,1,1,1,1,2,0,1,0,0,2,1,1,1,2,2,1,1,1,2,2,13,7,14,2,1,1,2,2,2,5,2,5,2,1,1,1,2,1,0,2,0,1,1,1,1,0,0,2,1,2,2,6,1,5,2,1,13,2,2,5,2,2,2,2,2,2,5,2,7,7,6,6,2,7,6,2,2,2,1,1,1,1,2,2,5,7,6,1,2,1,2,1,2,2,21,7,2,6,1,2,2,6,2,2,7,2,2,6,2,1,1,1,1,0,2,2,1,1,1,1,2,2,2,2,1,6,2,2,1,2,2,1,1,0,1,1,1,1,1,2,2,1,1,1,0,1,0,2,0,2,2,7,2,6,2,1,1,1,1,1,2,6,1,13,0,1,1,1,2,1,1,5,2,2,7,6,1,2,5,1,1,1,1,2,2,2,5,6,6,5,9,7,2,2,1,1,2,1,1,1,2,0,1,2,1,1,1,1,1,1,1,2,2,2,5,2,2,11,2,2,11,2,2,2,2,2,6,1,2,26,2,1,2,1,1,1,5,2,1,6,9,5,9,2,1,2,2,5,11,5,2, +2,6,2,2,5,21,17,2,5,5,1,2,2,2,2,1,1,2,5,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,2,1,2,1,0,1,2,1,2,1,1,1,1,1,1,1,0,1,1,2,1,1,2,0,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,2,5,1,0,2,13,7,14,7,2,1,1,1,1,2,7,2,2,2,6,2,5,2,2,1,1,1,0,2,0,2,1,1,1,1,2,2,5,2,6,2,1,5,2,2,6,1,2,5,13,7,1,2,2,5,2,7,2,5,7,7,7,1,6,0,1,1,1,1,2,2,2,2,2,2,6,1,1,1,2,2,2,11,7,2,2,1,2,2,5,2,7,2,6,2,2,2,2,0,1,1,2,1,2,1,1,1,1,2,2,1,1,2,2,1,2,1,1,2,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,6,5,1,1,6,1,2,1,1,1,2,6,2,0,1,2,2,2,2,2,5,2,7,2,2,2,2,2,1,1,2,5,2,5,2,7,6,11,2,2,11,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,9,2,26,5,2,9,11,2,2,2,6,2,1,11,2,2,1,1,2,1,1,1,2,2,2,2,5,5,2,10,5,9,5,10,2,2,0, +7,2,2,6,2,12,13,11,5,2,2,5,13,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,2,5,2,1,2,0,0,1,1,1,1,2,1,1,1,2,5,1,1,1,1,1,1,2,1,0,2,0,1,1,1,1,1,2,2,5,1,2,1,2,0,1,0,2,0,1,2,1,1,1,1,1,2,6,2,2,12,12,13,12,2,2,1,1,2,0,1,2,7,2,2,6,2,2,6,2,2,2,1,0,2,1,0,2,1,1,1,2,2,6,1,2,2,2,2,2,7,2,2,5,2,2,2,5,2,2,6,1,2,13,1,5,1,7,13,1,1,1,0,2,1,1,2,1,6,2,1,1,2,2,2,2,1,12,7,13,6,2,1,1,1,2,2,2,2,6,2,6,2,1,1,1,0,2,1,1,1,1,1,1,1,1,1,1,1,6,2,1,2,1,1,1,0,1,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,2,1,1,1,2,5,1,2,2,12,2,1,1,1,2,1,5,5,2,2,2,12,0,1,2,1,0,1,1,1,2,1,2,2,12,11,2,2,2,5,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,2,5,2,2,11,2,2,2,10,11,6,2,1,1,5,1,1,1,2,5,2,5,2,10,10,10,2,2,2,5,5,1,6,1, +13,13,2,5,2,5,12,1,1,1,1,1,1,2,2,6,2,1,2,5,2,2,1,2,0,1,1,5,1,1,1,2,5,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,1,1,7,1,1,1,2,0,1,2,0,1,1,1,1,1,1,1,1,1,1,1,1,2,0,2,0,1,0,2,0,1,2,2,12,14,13,1,14,7,1,1,1,2,0,2,2,2,2,6,2,2,7,6,2,2,2,5,0,2,1,0,1,1,1,0,2,1,2,5,2,6,2,5,2,2,6,6,1,7,2,2,2,5,2,2,6,1,2,6,7,2,6,2,13,2,2,2,1,1,0,2,1,1,1,2,2,5,12,5,2,5,2,1,2,2,2,6,2,1,1,1,1,2,2,5,14,7,2,2,1,1,0,1,0,2,1,1,1,1,1,1,1,1,1,1,2,5,2,1,1,2,1,1,1,2,2,1,1,2,1,1,1,1,2,1,1,1,0,1,1,2,2,2,5,1,2,1,6,1,2,2,13,5,2,1,0,1,1,1,1,1,2,1,1,13,1,1,1,1,1,1,1,1,1,1,2,11,7,2,21,10,10,2,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,5,2,5,5,2,11,2,2,25,2,11,0,1,1,1,1,1,1,2,2,1,2,26,10,2,5,2,5,10,5,10,10,9,1, +7,6,2,2,5,1,1,2,1,1,5,1,1,2,5,1,2,6,1,2,5,1,1,1,1,1,1,2,2,1,2,5,2,1,1,1,1,1,1,2,2,12,2,2,2,5,2,1,1,1,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,0,1,2,0,1,1,2,1,1,2,7,7,2,7,2,1,1,0,1,1,1,1,1,2,13,6,2,2,7,6,2,6,2,2,2,0,1,1,2,2,1,0,2,1,2,2,7,2,2,2,5,2,2,6,6,6,2,6,1,2,2,1,2,5,2,1,7,1,2,2,2,2,6,1,1,0,2,1,1,2,1,5,2,5,2,2,2,2,2,2,2,2,6,7,6,0,1,1,2,2,2,2,7,2,5,2,1,1,1,1,0,2,1,1,2,1,1,1,1,1,1,2,2,2,2,5,5,14,0,1,1,2,2,1,1,2,2,2,2,2,2,2,2,1,1,1,2,2,6,5,0,2,2,2,2,6,2,14,6,2,1,1,1,0,1,1,1,1,1,1,6,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,6,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,5,2,2,2,2,2,5,2,2,2,2,5,2,1,1,1,1,1,1,5,1,2,2,9,2,2,2,9,2,12,26,10,10,2,1, +10,7,5,2,2,1,2,5,1,1,2,2,2,1,2,2,5,1,5,2,1,1,1,1,1,0,1,2,6,1,10,5,2,2,1,1,2,1,1,7,13,2,5,2,2,2,1,1,1,2,1,1,0,0,1,1,2,5,2,1,1,1,2,2,1,1,1,1,1,1,1,2,1,1,0,2,1,1,0,0,2,1,1,2,7,5,1,0,1,2,1,2,1,2,2,7,7,6,6,6,6,6,7,13,2,2,1,2,1,0,1,1,0,2,1,2,2,14,7,7,6,1,6,2,2,7,2,13,1,2,7,6,2,1,2,1,2,2,13,1,2,5,2,5,2,1,1,1,0,1,1,1,2,2,2,1,2,5,2,2,5,2,11,2,6,7,2,1,1,1,2,2,1,6,7,7,7,2,1,1,1,1,1,1,0,1,1,2,2,2,5,2,5,14,13,2,2,2,2,1,1,1,0,2,2,1,1,1,0,1,1,1,0,1,1,1,2,1,1,1,2,5,1,1,1,1,1,2,2,1,2,2,1,2,0,1,2,1,1,1,2,5,7,2,1,1,1,2,1,1,1,1,1,2,12,5,11,13,2,2,2,1,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,9,11,2,2,2,26,2,12,2,2,1,1,2,2,1,1,2,1,5,2,11,2,10,6,2,2,25,2,12,5,2,0, +2,10,11,5,2,2,6,2,1,5,1,11,5,2,1,1,1,1,2,2,5,1,1,1,2,0,1,5,2,2,1,1,2,1,1,1,1,2,1,2,2,1,2,2,2,1,2,1,2,2,1,1,1,2,1,1,1,1,2,5,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,1,1,2,7,2,2,1,2,1,1,2,1,1,1,2,13,7,7,2,13,7,7,13,2,7,2,0,1,1,1,1,1,1,1,2,2,6,2,6,1,1,7,1,2,7,2,13,1,2,13,5,2,2,1,6,2,5,1,2,6,1,2,1,2,2,2,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,5,2,2,7,6,6,1,0,1,1,2,2,6,13,6,2,0,1,1,1,1,0,1,1,2,1,1,1,1,1,1,1,1,2,5,1,1,1,2,1,0,1,1,1,0,2,1,1,1,1,1,1,1,2,0,1,0,2,1,2,2,1,1,1,1,1,1,1,2,2,7,2,0,1,1,1,1,1,2,1,2,2,5,1,1,1,1,1,1,1,1,2,6,2,5,2,2,2,7,5,2,5,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,5,1,2,2,5,2,5,1,2,5,2,5,10,10,2,7,2,9,11,0,1,1,1,1,1,2,1,2,2,9,11,13,26,5,2,2,2,9,10,1,2, +2,5,2,2,6,1,2,1,1,2,5,10,1,1,2,1,2,2,2,5,1,2,1,1,1,2,2,2,1,2,1,0,1,2,1,1,2,2,2,1,2,2,2,5,2,5,1,2,1,2,1,1,1,1,1,1,1,1,2,6,2,1,1,2,1,2,1,1,2,1,1,1,1,0,2,1,2,5,1,1,1,2,7,1,1,1,2,1,1,2,1,2,1,2,2,14,2,7,2,7,6,6,2,7,7,1,1,0,2,0,2,2,1,0,2,5,2,7,2,2,7,6,2,5,2,2,2,6,5,2,2,5,1,1,2,2,1,0,7,2,2,1,2,1,5,2,2,1,1,1,1,2,5,2,2,5,5,2,2,5,6,2,2,11,7,6,2,6,1,0,2,5,1,2,16,1,1,6,2,1,1,1,1,0,0,1,1,1,1,1,1,1,1,2,2,2,2,1,9,5,1,1,1,1,1,0,0,2,2,1,1,1,1,1,0,0,2,1,1,2,2,2,1,1,1,1,1,1,1,2,5,11,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,0,1,1,1,1,1,2,11,11,7,2,9,6,5,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,5,2,2,2,2,2,5,2,2,2,2,2,5,2,9,11,2,2,1,1,1,1,1,1,1,2,5,6,9,2,2,2,2,12,10,11,5,2,1, +1,2,5,1,2,5,1,1,1,1,1,1,1,5,1,2,1,1,2,1,1,1,2,1,1,1,2,1,1,1,1,2,1,1,2,1,2,2,1,1,2,2,5,2,2,2,1,2,1,6,1,0,2,1,2,2,2,2,7,7,6,1,1,5,1,1,1,2,6,1,2,2,1,1,1,0,2,7,2,1,2,5,2,2,1,1,1,2,0,2,5,2,6,1,2,6,2,6,6,6,6,7,7,2,2,2,1,1,0,1,1,1,1,1,2,2,2,12,7,6,7,2,2,2,2,6,2,7,2,6,2,2,1,1,2,2,1,1,6,2,1,2,1,1,2,2,1,0,1,1,2,2,6,1,6,2,2,2,5,2,2,11,2,11,7,7,6,1,1,1,1,2,2,7,7,1,1,1,1,1,1,1,1,1,1,0,1,1,1,2,1,2,2,5,1,1,2,1,2,2,2,1,0,1,1,1,0,2,1,1,0,1,1,1,1,1,1,1,1,2,5,1,1,1,1,1,1,1,1,1,2,7,1,2,0,2,1,1,2,1,2,2,5,1,1,5,1,1,1,1,1,1,1,7,2,10,2,5,2,2,2,6,9,2,1,1,1,1,1,2,1,1,1,1,1,2,2,1,2,5,2,1,1,1,1,1,2,1,2,5,9,11,6,7,2,13,1,2,5,2,1,1,1,1,2,2,5,9,10,6,2,9,10,10,10,10,40,2,10,2, +2,2,2,5,5,2,2,1,1,1,1,1,1,2,2,2,1,1,1,2,2,5,1,1,1,2,1,0,1,2,1,1,2,2,2,13,2,6,1,2,1,6,2,2,2,2,2,5,2,7,0,2,1,2,1,2,0,2,7,6,2,2,2,2,1,1,2,5,2,1,1,2,2,6,1,1,5,2,1,1,2,2,2,5,1,2,1,1,1,2,1,2,2,6,1,7,6,7,6,7,6,7,6,2,2,1,1,1,1,1,1,1,1,1,2,6,7,7,5,2,2,6,2,2,5,2,2,2,7,7,2,1,1,1,2,5,1,1,13,1,5,2,1,1,2,5,1,1,2,1,2,1,2,5,2,2,2,1,1,2,5,1,2,7,6,7,2,6,1,1,0,2,2,7,2,2,1,2,2,1,2,2,1,1,1,1,0,2,2,5,2,6,5,2,5,1,1,1,2,5,1,0,1,0,2,1,1,1,0,2,1,1,0,1,1,1,1,1,0,2,2,1,1,1,1,1,1,1,2,1,6,13,2,0,2,1,1,2,5,2,5,2,2,1,2,1,1,1,1,1,1,1,1,2,5,2,11,2,2,5,2,2,1,1,1,1,1,1,1,1,1,2,5,1,1,2,5,1,2,2,2,1,1,2,5,2,5,2,2,2,5,2,2,9,2,2,5,2,1,2,5,1,1,1,1,5,2,2,2,2,2,11,9,11,11,11,10,2,11,2, +2,2,6,2,2,5,2,1,1,1,1,1,1,2,11,1,1,2,1,2,5,2,2,2,1,1,1,1,1,1,1,2,2,11,7,2,11,6,2,2,5,2,2,5,2,2,6,1,7,2,1,1,2,2,1,1,2,2,7,7,2,2,1,1,2,1,6,2,2,1,1,1,7,7,2,5,2,6,1,0,1,2,5,2,1,2,1,2,1,1,1,6,7,2,13,7,7,11,7,7,7,13,6,5,1,1,0,2,1,1,1,1,1,5,2,2,2,2,2,2,5,2,5,2,2,2,13,2,7,7,6,1,1,2,1,2,1,2,5,2,2,1,1,2,2,2,1,1,2,1,1,2,2,2,2,5,2,6,2,2,2,6,2,11,6,11,6,0,1,6,1,2,1,7,7,1,1,2,1,5,2,2,1,1,0,0,1,2,1,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,0,2,1,1,1,0,2,1,1,1,1,1,0,2,1,2,1,1,1,1,1,1,1,1,1,2,12,6,0,1,1,1,2,1,2,2,2,5,2,2,1,1,1,1,1,2,0,1,2,5,2,2,2,12,6,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,5,1,2,1,1,6,1,2,2,2,5,2,2,5,6,2,11,6,10,2,1,2,1,1,1,1,1,2,9,10,5,10,7,5,5,5,7,10,7,2,10,2, +1,2,2,5,5,2,2,1,1,1,1,1,1,12,7,1,2,1,5,1,2,2,5,2,5,0,1,1,2,2,2,2,6,7,13,11,7,6,2,1,2,2,6,1,2,5,2,2,13,2,1,0,2,1,1,0,1,2,7,2,2,2,1,2,2,2,2,1,1,1,0,1,2,7,2,2,2,2,1,1,2,2,2,2,2,1,1,5,1,2,1,2,2,7,8,13,2,11,14,13,7,6,2,6,1,2,1,1,1,1,0,1,1,2,1,5,2,5,1,1,2,2,2,2,6,1,7,2,7,7,2,1,1,1,1,1,6,2,5,2,2,0,1,1,6,1,1,1,2,5,2,2,5,2,2,2,2,2,6,2,5,1,2,6,7,13,2,1,0,1,6,0,1,13,2,6,2,5,2,2,2,2,2,1,1,1,1,1,2,2,5,5,7,2,1,2,2,1,2,2,1,0,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,0,2,2,1,1,1,1,1,1,1,1,1,2,7,13,1,0,1,1,1,1,2,5,2,9,2,1,1,1,1,1,0,1,1,1,1,1,2,5,11,6,2,5,2,2,1,1,1,1,1,1,1,1,0,1,2,1,1,5,2,1,2,2,2,25,1,2,2,2,5,2,5,5,2,2,25,6,5,10,10,2,5,1,1,2,1,1,2,2,5,2,10,2,9,11,1,11,13,10,11,10,11,2, +1,1,2,5,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,2,13,1,2,2,2,5,2,2,2,2,2,11,6,2,2,2,5,2,5,2,2,2,5,2,2,1,1,1,1,1,2,1,1,6,13,2,1,1,1,1,1,2,5,2,1,1,1,7,2,6,1,2,5,1,1,2,6,2,5,1,1,2,2,1,1,5,2,6,7,7,7,8,12,6,2,7,7,6,1,1,1,1,0,2,1,2,1,2,2,6,1,2,2,1,1,2,1,6,1,2,2,6,2,7,6,2,5,0,1,2,1,1,2,2,1,1,1,1,1,2,2,1,2,2,2,2,2,2,5,5,5,2,5,2,2,2,6,2,11,6,7,0,2,1,2,2,2,1,7,2,2,2,2,2,2,5,2,2,6,1,0,2,1,1,12,7,6,12,1,2,1,1,2,2,1,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,14,6,2,1,1,2,2,2,2,6,1,12,2,1,2,6,1,1,1,1,1,1,1,2,7,11,7,13,1,2,5,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,5,1,2,5,2,2,5,5,5,2,7,2,6,10,1,2,5,10,5,1,2,6,2,1,1,1,1,5,2,10,7,9,12,10,10,13,11,7,2,5,10,2, +1,1,1,1,1,1,1,1,1,1,2,1,2,5,1,1,1,1,1,1,1,1,1,1,1,2,6,2,12,2,2,5,1,1,6,7,11,2,2,1,2,2,2,2,2,6,2,6,2,2,2,1,1,1,2,0,2,2,7,6,2,2,2,1,1,1,2,2,2,1,1,1,2,2,1,2,6,1,2,5,7,2,1,2,2,1,2,5,2,2,0,2,7,14,6,7,14,8,5,7,13,7,2,6,0,1,0,2,0,1,1,1,2,6,1,2,6,1,1,2,1,5,2,6,2,6,1,6,6,1,2,1,1,2,1,1,1,2,13,1,1,1,1,1,2,2,2,0,2,6,2,5,2,2,2,2,2,2,2,5,2,2,2,11,6,7,2,0,1,2,1,1,0,7,6,1,2,5,1,2,2,2,5,1,1,2,0,2,1,2,2,5,2,6,2,1,1,1,5,0,1,0,2,1,0,2,1,1,1,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,2,2,5,1,1,2,2,6,2,1,1,2,5,1,1,1,2,13,13,10,2,2,2,5,2,1,1,2,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,1,6,5,1,5,9,2,2,2,6,5,1,2,12,10,10,10,1,1,1,2,2,1,1,1,1,2,2,10,11,10,10,2,11,10,11,11,12,2,25,0, +1,1,1,1,1,1,1,1,1,1,1,2,5,2,1,1,1,1,1,1,1,1,1,1,2,6,1,2,11,2,5,2,1,5,1,2,11,2,1,1,1,1,2,2,6,1,2,7,7,1,0,2,1,1,1,1,2,1,7,7,6,6,2,2,1,6,2,5,2,2,1,0,1,2,5,1,2,6,1,1,7,2,1,1,1,1,2,2,1,2,1,2,14,7,2,7,14,13,6,6,2,5,2,2,1,1,1,1,1,1,1,2,2,7,2,6,1,1,1,1,2,1,2,7,6,2,2,7,2,2,13,1,1,5,2,1,1,2,2,2,1,2,1,2,5,0,2,1,2,2,2,5,2,6,2,5,2,5,2,2,5,1,11,6,6,6,0,2,1,0,1,1,2,6,2,2,1,5,6,2,2,2,2,11,1,2,2,0,1,1,2,5,5,2,2,5,2,2,2,1,1,1,0,1,1,0,1,1,2,5,2,2,2,1,2,1,1,2,1,1,1,6,1,1,1,1,1,2,1,1,2,2,1,2,1,2,2,6,2,5,2,11,1,2,2,6,1,1,1,1,2,1,5,13,10,11,2,12,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,5,2,2,2,25,1,2,2,2,2,2,2,5,1,2,11,5,10,5,5,2,5,2,5,1,6,1,1,1,1,6,5,11,10,7,11,7,10,11,10,10,5,2,2,1, +1,1,1,1,1,1,1,1,1,2,1,1,2,2,6,1,1,1,1,1,1,2,5,1,1,1,2,6,1,2,2,1,1,2,5,1,2,1,1,1,1,6,2,6,1,6,6,2,2,2,1,0,2,2,2,1,1,2,7,7,6,2,2,1,5,2,2,2,2,6,1,1,2,7,2,2,7,2,2,6,1,1,0,1,1,1,2,2,2,1,2,7,2,2,7,14,8,13,2,2,2,2,2,1,1,1,0,1,1,2,1,2,5,1,2,2,5,2,1,1,2,2,5,2,2,6,6,2,7,13,2,1,2,2,1,2,6,7,2,6,2,2,5,1,2,1,2,1,2,11,2,5,2,2,2,2,2,2,5,2,2,5,2,5,2,11,0,1,1,0,1,0,1,7,1,2,7,2,2,5,2,11,2,6,2,1,2,2,2,1,2,2,5,2,2,2,1,2,6,1,1,1,0,2,1,1,1,1,2,2,2,5,2,2,1,1,0,1,1,2,2,1,2,1,1,1,2,1,2,1,11,6,0,1,2,5,1,2,1,2,1,2,2,5,5,1,2,2,1,2,5,2,13,10,7,2,6,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,5,2,2,2,6,2,2,5,2,5,2,10,2,26,5,6,2,2,2,2,5,1,2,2,1,1,2,1,1,1,2,26,7,11,10,12,10,10,13,21,1,5,1,2, +1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,6,1,1,1,1,2,7,1,2,1,2,5,0,2,2,6,2,2,1,2,2,2,2,1,1,1,2,7,7,6,2,7,2,7,2,2,0,1,2,2,2,2,2,7,2,7,2,5,2,2,2,1,6,5,6,0,1,1,2,2,6,1,6,2,2,1,6,1,0,1,1,2,2,1,1,2,2,7,6,13,13,6,7,2,2,5,2,5,0,1,1,1,1,1,1,1,2,2,6,1,2,2,2,6,1,5,2,2,5,2,7,2,7,6,2,2,1,1,1,1,2,13,6,2,2,2,2,2,2,5,2,1,1,6,2,2,2,2,5,2,2,6,2,2,2,6,2,2,2,11,2,2,1,1,1,1,1,2,7,2,6,11,2,2,2,2,5,1,2,2,5,2,2,2,2,1,1,2,1,1,2,2,2,1,1,1,1,1,1,1,1,2,1,2,5,2,2,2,1,1,1,1,1,1,1,2,5,2,1,1,1,1,5,5,1,11,11,1,1,2,2,5,1,1,1,1,13,5,6,2,1,1,1,1,1,1,2,13,11,10,5,10,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,6,1,6,1,2,2,2,2,2,5,13,2,2,5,5,2,6,6,10,2,6,2,2,5,1,1,1,2,5,10,10,7,10,10,10,13,10,13,10,2,10,5,5, +1,1,1,1,1,1,1,1,1,1,2,2,12,6,7,2,2,1,1,2,5,2,1,1,1,2,2,1,2,11,1,2,1,1,1,2,1,0,2,1,1,2,2,7,2,6,6,7,7,0,0,2,1,1,2,1,1,2,6,2,13,2,2,6,1,6,1,2,6,2,1,1,1,0,2,2,6,1,2,12,0,2,1,1,1,0,1,5,1,1,2,2,7,13,6,7,2,14,2,6,2,2,2,1,1,1,1,0,1,1,2,5,2,2,6,7,2,13,1,2,1,2,2,2,5,2,2,13,5,2,5,2,2,1,1,7,7,6,6,2,2,1,2,5,2,2,1,2,2,2,6,2,5,2,2,5,2,2,6,1,2,2,5,2,13,2,1,2,2,1,1,1,2,7,7,2,7,6,2,5,2,2,6,2,5,2,2,5,2,2,1,2,2,1,1,2,2,2,1,1,0,2,1,0,2,1,1,1,2,2,1,2,1,1,1,1,0,2,1,1,1,2,2,1,1,1,1,2,2,6,6,2,1,1,2,2,1,1,1,2,12,1,2,2,2,1,2,1,2,1,2,7,13,11,12,2,7,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,2,1,1,5,2,2,7,2,2,13,1,2,5,9,6,2,5,12,1,11,2,2,9,11,1,2,2,5,0,1,1,1,1,9,10,10,10,10,13,10,26,13,10,13,9,27,26,2, +1,2,2,1,1,1,1,1,1,1,7,2,13,2,2,2,1,1,2,11,2,1,1,1,1,5,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,7,6,2,7,6,7,13,14,0,2,0,1,1,2,2,1,2,7,2,7,6,2,5,2,2,5,2,6,2,2,1,1,1,1,7,2,6,5,1,1,2,5,1,1,2,2,2,1,2,2,2,14,2,13,6,7,2,2,2,2,6,2,1,2,1,1,1,1,1,2,2,5,2,2,7,6,2,6,1,1,1,2,6,1,2,6,1,2,2,2,1,1,1,2,12,7,6,2,1,1,1,1,2,2,1,2,1,1,1,1,2,2,1,2,2,2,5,2,2,5,2,2,6,7,2,6,2,2,1,1,1,5,13,2,5,14,2,2,2,5,2,2,2,2,5,2,2,5,2,2,27,38,35,1,2,1,2,1,0,1,0,2,1,0,2,1,1,2,2,1,1,1,0,1,0,1,1,1,6,1,2,5,1,2,1,1,5,2,2,2,2,1,1,1,2,1,2,2,2,11,2,5,2,1,1,1,1,1,5,2,11,10,7,2,2,11,2,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,2,5,2,1,1,2,2,2,25,2,7,2,9,11,1,6,1,12,2,2,5,2,5,1,1,1,1,5,10,10,10,10,13,26,13,40,2,26,5,10,10,2, +2,6,6,1,1,1,1,1,1,2,12,6,2,6,1,1,1,1,2,2,6,1,1,1,1,2,1,1,2,1,2,5,1,1,1,1,1,0,2,1,2,13,7,7,13,7,7,13,6,1,1,2,1,1,2,1,1,6,6,6,6,2,6,2,2,2,1,2,7,2,2,1,1,2,2,6,1,1,2,1,1,2,2,1,1,2,2,2,1,5,1,7,14,2,14,6,6,6,1,2,5,5,1,1,1,1,1,1,6,1,1,1,2,2,5,6,6,2,1,6,1,0,2,5,2,6,1,2,6,7,7,1,1,2,5,10,2,11,2,2,1,6,1,2,5,1,0,0,1,2,7,2,6,2,5,2,5,2,2,5,2,2,2,2,13,2,2,2,6,0,1,2,2,7,1,2,2,2,5,2,2,5,1,2,5,2,2,2,2,2,1,0,1,7,7,1,1,2,1,1,1,1,0,1,1,1,0,2,5,2,1,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,2,2,5,2,7,6,1,1,1,1,5,1,2,5,6,6,2,2,5,2,1,2,1,2,2,5,11,2,2,5,2,2,5,1,1,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,5,2,2,2,5,2,2,2,5,6,2,12,2,2,2,2,2,6,2,2,2,1,5,1,2,11,26,21,10,26,26,26,13,21,2,9,13,10,5,1, +2,13,11,2,2,1,1,1,1,2,13,11,0,1,0,1,1,1,5,2,2,5,2,2,1,6,1,1,1,1,1,2,2,2,2,1,1,1,2,2,2,14,29,13,14,11,6,1,2,1,0,0,1,2,1,1,1,2,6,6,7,6,2,2,5,2,1,6,1,6,2,1,1,2,1,2,2,5,2,1,1,2,2,2,1,2,2,1,2,2,2,7,7,6,7,2,6,2,6,5,13,6,1,1,1,1,1,1,0,1,2,2,5,2,2,6,6,2,2,2,1,2,2,1,2,2,5,2,2,13,5,2,1,2,2,12,2,7,5,2,2,1,1,2,1,0,1,1,6,1,2,6,1,2,2,2,2,2,6,2,5,2,2,11,7,2,2,1,2,1,1,1,2,6,2,12,5,2,2,2,2,2,5,2,2,2,2,5,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,5,0,1,1,1,1,0,1,2,1,2,2,2,5,1,1,1,2,1,11,1,1,2,1,2,2,1,2,2,12,5,2,5,2,5,1,2,5,10,10,11,7,10,10,7,5,2,2,1,2,1,1,1,1,1,1,1,1,1,1,2,5,1,2,2,6,2,13,1,2,2,6,9,2,2,5,10,7,2,5,9,5,2,11,7,1,2,2,2,1,1,1,1,2,26,26,21,10,40,11,26,13,10,1,12,26,2,2,1, +7,7,6,2,1,1,1,1,1,2,13,1,2,5,1,1,1,2,2,2,2,1,1,6,1,1,2,1,2,1,2,2,2,1,1,1,2,1,2,2,7,13,5,6,2,2,2,13,6,1,0,2,1,1,2,2,5,2,7,7,6,6,6,2,2,6,5,2,7,6,2,1,1,1,2,2,6,2,1,1,2,2,2,1,1,1,1,1,1,2,2,7,1,7,2,6,2,6,2,13,13,1,1,2,1,1,2,1,1,1,2,1,2,2,2,14,2,2,1,1,1,0,1,2,6,1,6,1,2,6,1,2,5,2,2,13,2,2,2,2,5,0,1,2,2,2,1,1,2,2,6,1,5,2,6,2,2,5,2,2,2,5,2,2,7,2,1,1,1,1,1,0,7,7,2,2,2,5,1,1,2,2,2,2,5,2,1,1,1,5,0,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,2,2,2,5,2,6,2,5,2,6,5,2,13,2,2,9,1,2,2,5,1,10,2,6,2,2,2,2,5,1,1,2,2,13,13,13,10,5,2,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,2,6,2,2,6,2,5,5,2,5,9,2,12,11,2,5,2,10,2,11,6,2,2,1,5,1,1,2,6,10,12,21,13,1,10,10,5,13,5,1,10,9,2,6,0, +6,7,6,1,1,1,1,1,1,2,2,6,2,1,2,2,1,5,2,5,1,1,1,1,1,1,1,2,0,1,1,1,1,1,1,0,1,2,5,11,2,2,2,13,7,6,5,11,1,0,2,0,2,1,1,2,2,2,13,7,2,6,2,2,5,2,2,2,2,2,1,1,1,1,2,6,1,2,1,1,2,5,2,1,1,0,1,1,1,1,2,6,2,6,2,7,13,2,11,7,11,2,1,1,5,1,1,2,1,2,0,5,2,2,6,12,2,2,1,0,1,1,1,2,2,6,2,2,11,2,2,2,2,2,13,2,6,2,2,5,2,2,1,2,1,2,1,1,2,1,2,2,2,2,2,5,2,2,2,2,5,2,5,6,6,6,0,1,1,1,1,1,12,0,6,13,2,2,2,1,5,2,1,1,2,1,2,1,2,2,1,1,0,1,1,1,1,1,1,0,1,1,0,2,1,1,1,1,1,2,1,6,0,1,1,1,2,5,2,1,2,2,2,7,2,2,2,2,2,2,10,2,2,2,1,1,1,1,6,13,2,2,2,5,2,6,2,1,2,5,11,13,13,12,7,2,2,6,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,7,6,5,2,2,2,9,2,2,5,2,10,2,2,25,2,2,2,11,11,2,2,2,1,1,1,2,1,2,26,10,10,10,10,10,13,39,2,2,5,2,6,1,0, +11,6,2,1,1,0,1,1,1,2,11,1,2,1,2,2,2,2,2,2,1,2,1,1,1,2,1,1,2,1,1,1,2,1,1,1,1,2,11,7,2,2,11,13,14,6,6,2,1,1,0,1,1,1,2,6,2,6,7,7,7,2,2,2,2,1,1,2,6,2,1,1,1,1,1,2,5,1,1,1,2,2,2,1,1,1,2,2,2,1,2,7,2,7,7,7,2,13,21,21,7,2,1,1,2,1,6,1,0,1,2,1,2,5,7,7,6,0,1,2,0,0,1,2,7,2,6,2,7,7,2,2,2,13,7,2,2,2,5,2,2,2,1,5,1,1,0,6,2,5,2,5,2,5,2,2,2,5,11,2,2,2,2,2,11,1,1,1,1,1,1,2,2,5,2,14,1,2,1,2,2,1,2,2,5,2,2,1,2,1,1,1,2,1,1,2,1,1,2,1,1,0,1,0,1,1,1,2,1,1,1,2,1,1,2,2,7,5,5,2,2,2,5,2,2,5,2,5,2,11,7,2,1,2,2,1,1,5,1,13,2,5,2,2,2,2,2,1,5,2,11,13,21,2,11,2,2,2,2,6,1,1,2,1,1,1,1,1,1,1,1,1,2,1,5,2,6,5,11,2,2,11,2,5,2,2,2,12,1,5,2,5,2,2,13,11,0,5,2,2,1,1,1,2,12,10,11,10,40,6,13,12,21,6,2,10,5,1,1,2, +7,7,5,1,1,1,1,1,1,6,6,2,5,2,1,1,2,5,2,1,1,1,1,2,1,2,5,2,1,2,1,2,2,1,1,1,1,11,6,2,2,6,14,7,7,2,2,7,1,0,0,2,1,2,2,2,2,7,7,14,6,6,2,5,2,2,1,5,2,13,1,0,1,2,1,2,2,1,1,1,2,2,1,1,1,2,2,1,1,2,5,2,2,14,8,7,7,7,14,13,2,2,1,2,1,1,1,1,1,1,1,1,2,2,2,7,2,1,1,1,2,1,1,2,2,5,1,2,2,12,1,1,2,21,7,2,6,2,2,2,5,2,1,2,2,1,0,2,2,1,2,2,2,2,2,6,2,2,2,6,2,5,2,6,2,0,2,1,0,2,0,1,2,2,14,2,1,1,2,1,5,2,2,1,2,1,1,2,2,1,1,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,6,1,1,5,2,2,2,2,5,2,5,2,2,6,1,1,2,10,2,5,1,2,1,1,1,1,1,10,13,1,2,5,5,2,5,1,2,2,2,10,13,10,2,6,1,6,2,5,1,2,9,2,2,1,1,1,1,0,1,1,2,1,1,2,2,2,11,2,2,2,2,2,2,2,5,2,2,11,2,2,1,11,7,11,2,5,2,2,2,1,1,1,2,26,5,12,11,10,26,10,21,21,2,5,9,2,1,1,0, +2,2,2,2,1,1,1,1,5,1,2,11,2,2,1,11,2,2,2,1,1,5,2,5,2,2,2,5,2,2,1,2,5,1,1,0,1,2,2,13,7,7,7,13,11,2,13,1,1,1,1,0,2,1,2,5,2,2,6,2,6,2,2,2,2,5,1,2,2,7,1,2,1,1,1,6,1,0,2,2,1,1,1,1,1,1,2,1,2,2,2,6,7,7,7,6,7,13,7,2,5,0,1,1,2,1,2,6,2,1,2,1,13,1,6,1,6,1,5,1,1,1,2,5,2,2,2,2,13,2,2,2,2,12,11,2,1,2,2,6,2,2,5,1,2,1,1,1,2,1,6,2,5,2,5,1,11,2,2,2,2,1,11,7,6,1,0,2,1,0,1,1,2,2,6,1,1,1,1,1,2,1,5,2,1,1,1,2,2,1,1,1,1,1,1,1,2,1,1,0,1,1,1,1,1,1,1,2,5,1,1,1,1,2,2,1,2,6,2,2,2,2,5,1,2,2,6,2,10,7,2,1,2,2,1,1,2,5,7,11,2,6,2,2,2,1,1,5,5,7,26,11,2,5,1,11,1,2,2,2,2,2,2,1,1,1,1,0,1,1,1,2,1,2,6,1,6,7,6,6,2,6,2,6,2,2,2,5,9,10,2,2,10,10,13,2,1,2,6,9,1,1,2,25,1,10,9,26,12,10,13,21,13,2,2,5,2,1,1,2, +2,6,2,2,2,1,1,2,2,2,5,2,5,1,2,11,2,2,2,6,1,1,2,1,1,2,2,2,5,1,1,1,2,1,1,1,1,2,6,7,7,6,14,29,13,5,7,2,1,1,1,1,0,1,1,1,6,1,6,7,13,2,2,6,2,2,2,2,2,7,2,1,1,1,2,1,1,6,1,1,1,2,1,1,1,1,0,2,1,2,7,2,13,7,7,13,12,6,13,2,2,1,1,1,2,1,1,1,1,2,1,1,2,1,2,5,2,2,2,2,2,1,1,2,2,2,1,11,13,1,1,2,1,14,2,2,5,2,5,2,2,2,2,1,2,1,1,2,2,5,2,2,2,2,2,5,7,2,5,2,5,2,2,13,2,1,1,1,0,2,1,1,2,1,2,1,1,1,1,2,2,2,1,2,2,5,2,2,5,1,2,5,1,1,1,1,1,2,1,1,1,0,1,1,1,1,1,1,2,1,5,2,1,2,6,2,2,2,5,2,2,5,2,2,2,5,2,5,11,5,2,2,1,2,1,1,1,2,10,2,5,9,2,2,5,1,2,10,2,13,7,2,2,2,6,2,5,2,1,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,2,6,5,13,5,2,11,2,6,2,2,6,2,12,1,11,2,5,11,11,13,5,1,2,2,2,1,1,2,1,2,5,5,26,2,12,11,13,13,2,9,12,2,1,1,1, +11,2,2,6,2,5,2,2,5,6,2,1,1,1,1,11,5,1,7,2,1,2,1,1,1,1,1,6,2,2,1,1,1,1,1,1,2,2,7,7,2,14,16,21,2,2,13,2,1,1,1,1,1,2,2,2,7,14,6,7,7,6,1,2,7,2,2,1,2,13,2,2,1,1,1,2,2,2,1,1,1,1,0,2,1,0,1,1,2,2,6,14,8,14,6,2,6,2,2,7,2,1,1,2,1,2,1,1,2,2,1,6,2,1,1,2,2,2,5,1,2,1,1,1,2,1,2,13,13,2,2,5,2,2,2,5,2,2,2,2,11,2,2,2,2,1,1,2,2,2,2,6,2,6,6,2,5,2,2,2,2,5,7,7,6,1,1,0,1,1,1,1,6,1,2,1,5,1,1,1,5,2,2,6,1,2,2,6,1,1,2,2,5,1,2,5,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,1,2,5,2,2,12,2,2,2,6,2,2,5,5,1,2,2,7,5,1,1,1,1,1,2,5,5,7,11,5,2,6,2,1,5,2,2,5,7,12,10,5,2,2,2,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,7,6,13,5,2,10,2,2,11,2,6,2,2,2,2,12,1,2,10,10,11,1,5,2,10,2,1,1,1,1,1,2,2,2,2,2,21,11,6,2,6,9,2,1,1,1, +2,1,2,2,2,1,1,2,2,11,2,6,1,1,1,2,6,2,11,2,2,5,1,2,2,2,11,11,11,2,2,0,2,1,1,1,1,11,13,7,7,13,16,13,2,5,2,2,1,1,1,1,2,2,6,1,6,6,7,7,13,1,6,2,2,6,1,13,2,11,2,2,2,0,2,1,2,1,1,1,0,1,0,1,0,2,1,2,2,2,14,7,7,13,7,6,5,2,13,2,6,1,1,1,2,1,1,0,1,1,2,2,2,1,1,2,6,2,2,2,6,2,2,1,2,13,13,5,2,2,6,2,2,6,2,2,2,5,2,11,6,2,2,6,2,1,1,2,5,2,5,2,2,2,2,6,2,2,1,6,2,2,2,6,7,1,1,1,1,1,1,2,7,14,2,2,1,2,2,2,2,2,5,2,13,2,5,1,1,2,1,5,1,2,2,1,1,1,6,1,1,1,1,2,1,1,1,1,2,1,1,1,1,2,2,5,2,2,6,1,2,6,2,5,5,2,2,5,10,7,0,2,1,1,2,5,1,2,13,13,1,2,2,6,2,1,2,2,5,13,13,2,2,5,1,2,6,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,5,2,2,10,11,2,7,2,6,2,11,6,2,5,11,9,2,5,5,10,11,2,5,2,5,2,5,1,1,1,1,1,2,2,13,2,10,11,7,11,0,9,2,5,1,1,2, +2,1,1,5,1,1,1,2,2,5,2,2,1,1,1,2,1,2,2,11,2,2,6,2,5,2,26,7,2,2,1,1,1,0,1,2,5,2,2,7,13,13,2,2,1,2,2,1,1,1,1,0,1,2,2,6,1,7,7,13,6,2,2,2,7,2,2,2,13,6,2,5,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,14,2,7,7,7,7,2,6,1,2,2,0,1,1,1,1,1,1,1,1,1,2,2,1,2,13,2,2,2,1,0,2,1,2,1,5,7,13,1,5,2,2,2,2,5,2,5,2,2,5,11,11,2,1,2,2,1,1,2,2,2,2,5,2,5,2,2,5,1,2,2,6,2,7,2,0,1,1,0,1,1,2,2,13,2,6,2,1,5,1,5,2,2,2,7,2,2,6,2,5,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,0,1,6,1,5,1,2,5,5,9,2,1,2,12,2,2,2,11,2,5,1,11,7,5,2,1,1,1,1,2,2,5,13,2,2,5,2,1,2,2,5,5,10,13,10,2,5,2,11,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,11,7,6,2,10,13,2,11,5,11,2,2,10,2,2,2,2,12,11,2,6,1,9,2,2,1,1,1,2,2,2,26,13,2,13,11,6,2,5,5,2,2,1,1,2, +1,1,1,2,1,1,1,5,2,2,1,1,2,1,1,5,2,2,10,5,2,2,2,2,1,2,5,2,2,6,1,1,1,1,1,1,2,11,7,13,1,6,2,2,6,1,2,0,1,1,1,1,1,2,2,2,12,7,6,2,6,2,2,11,6,13,7,13,7,1,2,2,2,1,0,1,1,1,1,1,2,1,0,2,0,1,2,2,2,7,7,6,7,7,6,2,2,2,13,7,1,1,1,1,1,1,0,1,1,6,1,5,2,2,1,2,2,5,2,5,12,1,0,1,2,13,13,2,2,2,2,5,2,2,2,2,2,5,2,2,5,2,2,6,2,1,1,1,1,2,5,2,2,1,2,5,2,2,6,2,12,2,7,6,13,1,1,1,1,0,1,6,2,7,2,2,2,2,1,2,2,2,6,1,13,1,5,7,2,1,2,6,1,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,2,1,1,1,6,1,1,1,1,5,2,2,2,5,5,2,10,2,2,10,10,2,1,1,1,2,5,10,5,10,21,6,2,2,1,1,5,2,6,2,10,12,11,2,2,2,2,11,2,2,5,1,1,1,1,1,1,1,1,0,1,1,5,2,2,2,11,5,10,11,2,11,2,2,7,2,7,2,6,10,6,2,1,5,10,12,2,2,5,11,1,6,1,1,1,2,25,2,2,2,2,13,6,10,2,2,2,25,2,1,2,1, +1,2,2,5,1,1,2,2,2,1,1,2,2,1,2,2,5,2,2,1,1,1,5,1,2,2,2,2,5,1,1,2,1,1,1,2,13,7,13,2,6,2,6,7,13,2,0,1,1,1,1,0,2,1,1,1,2,2,2,2,13,2,12,6,7,2,13,7,2,6,2,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,6,7,2,6,14,6,2,2,13,13,11,2,1,1,1,1,1,2,5,2,6,1,2,2,5,2,5,2,2,2,2,6,2,2,1,0,13,11,11,2,6,1,5,1,2,5,2,1,5,1,2,5,2,11,1,2,2,2,1,1,2,2,2,2,5,1,2,2,2,5,1,2,5,7,7,13,2,2,1,2,2,1,1,2,2,6,7,2,2,2,6,1,2,5,2,13,2,6,2,2,1,2,5,2,1,2,2,2,1,2,5,2,1,1,1,1,1,1,1,1,1,1,1,2,2,5,2,2,2,2,5,2,5,2,5,2,2,2,5,10,13,2,2,1,1,1,2,7,2,40,7,2,2,5,1,2,2,2,2,11,13,13,2,2,5,2,11,6,2,6,2,1,1,1,1,1,1,1,0,1,1,1,1,2,5,2,7,5,10,2,12,1,6,2,6,6,2,2,2,12,6,2,6,10,10,11,2,5,2,11,11,2,1,5,2,2,2,2,7,9,11,11,6,10,2,5,9,1,1,1,2,0, +1,1,2,2,6,1,5,2,1,1,1,5,1,2,1,2,2,6,1,1,2,2,2,5,1,5,13,6,1,2,1,5,1,2,1,2,2,11,2,2,2,2,7,13,14,6,1,0,1,1,1,1,0,1,1,1,2,5,2,2,7,2,6,2,2,2,13,13,2,2,7,6,2,2,0,1,1,1,1,2,1,1,1,1,1,1,1,1,2,2,6,14,6,2,6,7,14,13,2,2,1,1,1,1,2,1,2,1,2,1,2,2,1,1,2,2,5,6,2,5,2,2,2,26,13,7,11,6,1,2,6,2,2,2,2,2,2,12,2,2,2,5,2,6,2,1,1,1,1,2,5,2,2,5,2,1,2,1,2,6,2,2,7,6,2,6,2,5,2,1,1,2,12,6,13,1,1,2,1,2,2,2,2,21,1,2,2,5,6,2,2,2,2,5,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,5,2,2,5,2,2,2,2,10,12,2,5,2,5,10,10,13,5,1,1,2,1,2,12,7,14,5,6,2,2,5,2,5,2,2,10,13,13,2,6,2,2,7,6,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,2,12,6,5,5,2,5,2,2,11,6,2,5,2,11,7,2,2,10,7,6,2,2,10,13,6,1,1,1,2,5,9,2,5,5,11,13,6,10,6,2,5,1,1,2,5,0, +1,2,6,1,1,2,2,1,1,1,1,1,1,2,5,2,2,2,2,5,11,6,2,2,6,7,21,5,2,5,2,1,1,1,1,2,10,7,11,2,13,14,11,11,13,1,1,1,0,1,1,1,1,0,1,2,1,2,2,6,7,2,2,2,5,2,2,2,2,2,13,1,2,1,1,1,2,1,2,5,1,0,1,1,1,1,1,1,7,2,7,2,6,7,7,7,6,7,13,2,1,2,2,1,1,5,2,1,5,2,5,2,1,2,2,12,11,7,2,2,2,5,11,6,5,13,7,2,2,6,1,2,2,5,1,2,5,2,1,5,2,2,2,2,2,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,2,2,5,2,5,2,2,2,1,1,2,5,11,5,1,0,1,1,6,1,7,2,13,7,2,2,5,2,2,2,5,2,1,2,1,6,1,6,2,5,1,1,1,1,1,2,1,0,1,1,1,2,6,2,1,2,2,5,1,5,12,2,2,5,11,13,10,2,10,1,1,1,2,5,2,10,2,21,2,2,2,2,2,2,2,5,13,13,13,7,2,2,2,6,6,6,7,2,1,1,1,2,1,1,1,1,1,1,1,1,1,2,5,5,6,2,7,11,2,2,2,5,6,6,2,2,2,11,6,2,2,12,6,1,2,2,5,11,2,2,1,2,6,9,9,9,5,2,11,11,2,11,2,2,2,1,1,1,2,2, +2,11,10,2,5,10,1,1,1,2,1,1,2,5,2,2,5,11,2,2,2,5,2,2,2,13,10,1,1,2,1,2,1,1,1,1,6,2,11,7,7,7,13,14,6,1,1,1,1,0,1,1,1,1,1,1,2,2,5,1,13,7,6,2,2,11,11,6,5,5,2,5,2,1,1,0,2,2,2,2,2,1,1,1,1,1,1,1,14,6,7,7,7,13,6,5,2,10,11,2,1,1,1,1,2,2,1,1,2,2,2,2,2,2,2,11,13,12,1,5,7,2,12,21,6,7,2,2,5,2,2,5,2,2,2,2,2,2,2,1,2,5,1,2,6,2,1,1,1,5,2,5,2,2,2,2,5,1,1,2,5,2,2,2,2,2,5,1,5,2,2,14,13,6,1,1,0,2,2,2,5,2,12,7,2,2,2,2,5,2,2,2,2,5,2,1,5,7,2,2,1,1,2,1,1,1,1,1,0,1,1,5,1,2,1,5,2,2,5,1,2,2,1,2,12,11,2,11,1,1,1,1,2,2,2,12,2,10,2,6,1,5,2,5,5,2,10,7,13,2,6,2,2,2,6,2,2,6,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,25,6,5,7,2,6,2,2,6,2,2,1,11,6,11,2,9,10,11,2,2,10,12,11,12,1,1,1,2,6,2,2,2,6,10,10,6,7,2,5,1,1,1,1,5,0, +2,13,1,5,2,1,1,1,1,2,1,1,5,2,2,1,6,1,5,2,6,2,5,2,1,5,1,1,1,1,1,1,1,1,1,1,5,2,2,11,6,11,7,11,2,2,1,1,1,1,1,1,1,2,1,2,2,10,10,2,21,2,2,2,5,2,10,5,5,2,2,2,5,0,1,1,1,1,2,2,1,1,0,2,1,1,1,1,7,2,14,14,13,7,13,2,13,14,14,2,1,1,1,1,2,1,1,2,6,2,5,2,2,2,12,5,5,2,2,10,11,5,28,7,7,7,6,1,2,5,2,1,2,5,1,2,5,2,1,1,2,2,5,11,1,6,1,1,2,2,2,2,2,13,1,2,2,1,2,2,2,2,6,1,13,1,2,2,2,2,6,7,14,6,6,0,1,2,5,2,13,2,13,1,2,13,1,2,6,1,2,5,5,2,2,2,2,2,13,2,1,1,2,5,2,1,1,1,1,1,1,0,1,1,1,2,5,2,2,6,2,2,1,7,7,13,5,5,1,1,1,1,2,5,2,2,21,11,2,1,2,1,2,2,2,5,10,10,12,2,7,2,11,6,6,2,7,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,5,11,11,6,2,2,2,6,2,11,2,6,1,6,6,6,2,2,5,10,11,11,13,11,2,2,5,2,1,2,2,2,25,7,2,13,11,11,10,2,1,1,1,1,2,2,2, +2,2,6,2,1,1,1,1,1,1,1,2,5,2,1,1,1,2,6,1,2,2,2,2,1,2,6,1,1,5,1,2,2,2,2,2,2,6,7,11,13,7,14,2,2,1,1,1,1,1,2,2,1,2,5,5,5,2,10,2,13,2,2,5,2,2,11,2,2,2,13,2,2,1,1,1,2,1,1,2,2,1,0,2,2,1,0,2,2,12,14,7,13,2,7,2,12,13,11,2,1,1,2,2,5,2,1,1,2,2,2,13,1,1,5,2,5,5,12,13,5,10,11,13,13,6,2,6,2,2,2,2,1,1,1,1,2,1,1,2,5,2,2,5,2,2,2,2,1,2,2,5,5,2,6,2,5,2,5,2,2,6,1,2,2,2,1,1,1,1,2,7,14,6,1,1,6,1,1,2,2,2,21,2,6,2,5,5,2,2,6,1,2,6,1,2,13,2,7,2,2,6,1,2,1,1,1,1,1,1,2,1,1,1,1,2,6,2,5,2,2,2,1,7,12,5,2,2,2,1,1,1,1,2,2,6,5,2,2,1,1,2,1,6,9,10,13,21,2,2,2,11,1,11,2,2,6,2,2,1,1,1,2,1,1,1,1,1,1,1,1,2,5,2,2,11,6,7,6,1,2,7,2,2,2,2,11,6,7,11,2,2,10,2,13,26,1,2,2,1,1,1,5,2,2,2,2,10,13,10,10,2,1,2,1,1,2,1,5,1, +1,1,2,1,1,1,1,1,1,1,1,1,1,6,1,1,5,2,2,2,5,2,5,2,1,2,2,2,2,2,5,2,2,1,5,2,11,7,11,7,13,13,2,13,2,2,2,1,1,1,2,1,1,2,1,2,2,5,5,13,11,2,6,1,6,1,5,2,6,5,6,1,2,1,1,1,1,1,1,2,1,1,0,2,1,1,1,1,2,16,7,7,11,6,2,2,21,7,6,1,1,1,1,1,1,1,1,1,1,5,2,2,2,13,21,2,2,2,5,2,21,12,13,13,11,2,13,2,2,2,5,1,1,2,2,1,2,1,1,2,2,2,5,2,2,2,5,2,1,2,12,2,5,2,5,2,2,2,2,5,2,13,13,13,2,1,1,1,2,5,2,13,2,2,1,1,2,2,6,2,10,13,2,6,1,2,2,2,1,5,1,2,6,1,5,2,13,2,13,1,1,2,5,1,1,1,2,2,1,1,1,0,1,1,1,1,2,2,2,2,2,1,1,10,10,2,2,1,1,1,1,1,1,2,5,6,11,7,5,2,2,5,2,2,11,2,13,2,6,2,7,6,2,6,6,2,2,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,12,7,11,7,2,6,2,2,11,2,2,5,6,6,2,2,2,5,10,6,11,1,2,5,2,1,1,2,2,5,2,5,2,10,10,2,12,2,1,1,1,1,2,2,1,2, +1,1,2,2,2,2,1,1,1,1,1,1,2,2,1,1,2,2,5,2,2,2,2,1,2,13,2,1,2,5,2,5,2,2,2,2,2,13,7,7,5,2,2,2,2,2,1,1,1,1,2,5,1,2,5,5,10,1,6,7,21,1,2,2,7,2,5,2,2,11,7,6,1,0,1,1,1,1,1,1,1,1,1,0,2,1,0,2,2,7,13,7,7,2,11,5,7,7,2,1,2,1,1,1,2,1,2,1,2,2,2,12,2,7,13,2,2,12,7,11,14,2,14,7,13,13,7,2,2,6,2,2,2,1,1,1,2,2,1,2,5,2,2,2,2,5,2,2,2,5,2,2,6,1,5,2,6,1,6,1,2,14,7,7,2,1,2,6,2,1,7,14,2,2,1,1,2,6,1,2,12,11,6,5,2,5,5,2,2,1,1,1,2,2,6,1,2,6,6,6,1,2,2,1,1,2,2,2,1,1,1,1,1,0,1,1,1,2,12,2,5,1,1,5,10,1,1,1,1,1,1,2,2,1,2,2,13,2,2,5,2,2,5,2,2,2,13,2,2,2,2,2,2,11,2,6,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,12,6,10,11,7,2,2,2,11,6,2,1,2,7,11,6,2,2,2,11,1,12,10,2,2,5,1,1,5,2,2,6,1,2,11,26,6,9,6,1,1,1,1,5,2,2,6, +1,1,1,1,5,2,5,1,1,1,1,2,5,2,1,2,5,2,2,6,7,5,2,2,11,7,6,2,2,2,1,2,5,1,2,5,2,7,11,7,2,2,6,13,2,1,1,1,1,2,1,1,1,1,2,5,5,5,1,2,2,2,2,6,5,2,2,5,2,13,11,2,1,1,1,0,1,1,1,2,0,1,0,2,1,0,1,1,2,13,1,2,7,13,11,11,10,14,1,0,2,1,1,0,1,6,2,1,2,6,5,7,2,12,6,1,2,2,2,21,2,13,21,14,7,13,2,2,5,2,2,2,2,5,2,2,5,2,1,2,1,2,2,5,2,2,2,2,5,2,1,5,2,2,2,2,2,5,2,2,5,13,5,5,2,1,1,2,1,1,13,2,2,13,0,1,2,5,2,12,7,14,7,1,2,6,2,5,1,2,2,5,2,5,1,2,5,7,7,2,6,1,2,6,1,1,5,2,1,1,1,1,1,1,1,1,1,2,12,1,12,5,5,10,2,1,1,2,1,1,1,5,1,2,2,5,11,2,2,2,5,2,2,2,10,13,5,2,5,2,2,11,2,6,7,6,2,6,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,5,11,11,7,6,2,2,5,2,5,1,6,2,11,5,6,2,5,2,12,10,10,2,9,2,2,2,1,1,1,1,2,11,2,21,10,10,10,2,1,1,1,1,1,2,5,1, +1,2,1,1,2,2,2,1,1,1,1,6,1,2,2,6,2,9,6,1,2,2,11,2,13,13,2,1,2,6,1,1,2,1,2,2,13,26,2,6,2,5,7,2,1,2,1,1,2,2,1,1,1,2,2,2,5,2,5,2,5,2,10,1,2,1,2,11,13,7,2,2,2,1,0,1,2,2,1,5,1,1,1,0,0,2,1,2,7,5,6,5,7,13,21,14,14,13,1,1,1,1,0,1,1,2,1,5,2,1,5,2,6,13,1,1,1,2,7,10,2,5,13,6,2,7,6,1,1,2,5,2,2,2,2,6,2,2,2,1,5,2,5,2,2,5,2,1,2,1,0,1,2,6,1,5,1,2,2,2,13,6,7,7,1,1,1,1,2,2,7,2,5,2,1,1,2,5,2,2,13,12,6,2,5,2,7,2,6,1,6,2,2,2,6,2,2,13,2,6,1,5,2,2,5,1,2,1,2,1,1,1,1,0,1,1,1,2,6,2,5,2,2,2,2,1,1,1,1,1,2,1,2,5,2,12,10,2,6,1,1,2,5,11,11,2,6,2,2,2,11,2,6,7,6,6,1,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,11,7,11,6,2,2,2,2,2,6,1,2,2,2,11,2,2,2,5,9,10,5,2,2,2,5,1,1,1,2,2,5,1,13,10,11,1,2,1,1,1,1,2,1,2,6, +1,5,2,1,2,5,1,2,2,1,1,1,2,2,5,2,2,2,1,2,5,11,11,11,11,13,1,1,1,1,1,1,1,2,5,2,2,2,2,7,2,10,10,2,0,1,2,1,2,2,2,1,1,1,2,5,5,2,2,6,2,11,2,5,2,2,12,1,7,13,2,2,2,1,1,1,1,1,2,2,1,1,1,1,1,1,2,2,13,7,6,7,14,30,21,14,13,2,6,1,1,1,1,1,1,2,2,2,1,2,13,2,2,13,2,1,2,14,7,6,5,7,7,7,11,13,2,2,2,2,2,2,6,1,2,7,2,2,9,2,2,13,1,13,2,2,2,2,2,2,6,2,5,2,2,2,2,6,2,5,13,6,13,14,1,1,0,2,5,6,6,2,2,2,5,1,2,2,6,1,7,2,2,2,2,5,2,6,1,5,2,2,2,6,1,2,2,7,2,2,2,6,1,2,2,6,2,1,5,1,1,1,1,1,1,2,1,1,2,2,2,6,2,1,2,2,1,2,0,1,1,1,1,2,1,2,12,7,2,2,5,2,2,14,11,2,2,2,6,1,11,6,2,11,5,2,7,2,2,1,1,1,1,1,1,1,1,1,1,1,1,5,2,12,10,7,10,11,6,2,2,5,6,2,2,11,6,2,9,2,6,9,2,2,2,2,2,2,5,2,1,1,1,5,2,1,11,12,13,2,5,1,1,1,2,1,1,5,2,2, +2,2,2,5,6,7,1,2,5,2,2,1,5,2,2,1,5,2,5,2,2,13,12,1,13,26,2,2,1,1,1,2,1,1,1,1,2,13,12,7,5,5,7,6,1,1,1,1,2,2,1,1,0,1,2,2,2,2,5,1,2,2,2,1,2,13,7,2,13,2,2,2,1,2,1,1,2,2,2,6,1,0,2,1,2,2,5,13,2,2,5,14,13,13,17,12,13,1,1,2,1,1,2,1,1,2,5,1,1,2,5,1,5,2,1,1,13,1,12,1,11,2,7,7,7,7,2,5,2,2,12,6,5,2,5,12,2,2,2,2,5,2,13,1,2,5,2,5,2,5,2,1,2,2,6,2,5,2,2,5,14,2,2,13,1,2,1,2,2,13,7,2,2,6,2,2,2,5,2,2,6,1,1,1,6,2,6,1,2,2,1,5,2,5,1,5,13,12,6,1,2,2,1,2,5,2,2,1,2,1,1,1,1,1,1,1,1,2,25,28,2,1,1,2,5,1,1,1,1,1,2,1,1,5,2,13,7,2,2,5,2,2,13,13,2,2,6,1,2,6,6,2,11,6,2,2,6,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,11,7,7,11,2,2,5,2,2,5,2,2,2,11,2,2,2,2,6,7,11,1,6,2,2,2,1,2,1,1,1,2,11,13,10,2,1,1,1,1,1,1,2,1,2,2, +7,1,1,1,2,10,1,10,10,1,1,1,2,2,1,2,2,2,2,2,10,7,11,2,6,1,2,1,1,1,1,1,1,1,1,1,6,2,2,2,13,13,11,2,2,0,1,1,1,2,1,1,1,1,2,2,5,2,2,2,5,2,6,1,10,11,2,6,2,7,2,6,1,0,1,2,2,2,13,5,0,1,0,1,1,2,5,7,6,13,7,6,14,14,13,6,7,2,2,1,1,1,2,5,1,1,1,1,1,2,2,1,2,1,5,2,5,2,5,6,5,7,11,13,11,13,2,2,2,2,13,6,2,5,13,2,2,2,2,5,2,6,2,2,6,1,1,2,2,1,2,1,2,5,2,2,2,2,6,1,2,6,14,13,1,1,1,1,2,2,6,2,5,2,2,5,2,2,2,1,1,1,1,2,2,7,2,1,5,2,2,2,5,2,1,2,5,6,1,1,5,2,5,2,2,2,1,6,1,1,1,1,2,1,1,2,2,1,65,5,12,1,2,2,2,2,1,5,1,1,1,1,1,2,2,12,10,2,2,2,2,6,11,11,2,2,2,5,2,2,2,2,11,6,13,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,25,7,7,11,10,2,2,6,1,11,2,2,25,6,6,11,2,2,10,2,10,6,2,2,2,5,1,1,2,1,1,1,2,11,13,2,2,1,1,1,2,1,1,5,2,12,2, +2,5,2,1,5,10,2,10,1,1,1,1,2,5,1,1,2,1,1,1,2,10,2,2,2,2,5,1,1,1,1,1,1,1,1,2,2,2,2,13,13,14,11,2,1,2,0,1,1,2,2,1,0,2,2,2,2,1,5,2,2,2,2,1,5,2,2,5,10,11,2,7,0,2,1,0,2,5,2,6,1,1,1,1,1,6,13,5,13,14,11,16,21,13,7,13,13,0,2,1,1,1,2,1,1,2,1,1,1,13,1,1,2,5,7,2,2,2,5,5,13,28,11,13,13,7,6,1,2,5,7,2,11,7,13,2,2,5,2,2,6,5,1,6,1,2,1,6,1,6,1,1,2,2,2,5,2,5,2,2,6,1,14,13,2,2,6,1,2,13,2,2,2,6,1,2,1,1,1,1,1,2,1,2,5,7,6,2,2,2,6,1,6,1,1,2,13,1,2,2,2,5,2,2,5,2,2,1,2,1,2,38,2,1,1,5,1,1,5,38,1,1,2,5,2,2,1,1,1,1,1,2,1,2,5,7,1,2,5,2,5,2,13,7,6,2,5,2,2,5,2,11,7,7,2,6,2,2,5,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,7,11,10,7,5,2,2,2,6,1,2,2,10,7,2,6,9,6,7,11,5,2,2,6,2,5,1,1,1,1,2,5,26,6,9,5,1,1,1,1,1,2,2,2,10,2, +2,1,1,1,2,2,5,2,2,1,1,1,2,2,1,1,1,1,5,1,1,2,5,2,2,6,1,1,1,2,1,1,1,2,1,5,7,6,7,12,21,7,12,2,0,2,1,2,1,2,1,2,1,1,1,2,2,1,1,2,5,2,2,2,2,11,5,7,2,5,10,11,0,2,0,1,2,2,2,7,0,1,1,1,2,2,14,11,11,13,16,14,8,2,21,11,2,2,1,1,0,1,1,1,1,1,1,2,5,7,6,5,7,2,2,2,5,2,2,13,7,11,13,13,7,13,2,2,2,2,5,7,7,7,13,2,2,2,2,2,7,2,6,7,2,6,1,2,6,1,5,1,2,6,1,2,2,2,2,5,2,5,13,6,2,6,2,5,7,2,7,2,2,1,2,2,2,1,2,2,1,5,1,2,2,7,1,2,2,6,1,2,2,2,1,2,13,1,6,2,5,2,1,1,6,2,5,2,1,2,2,1,1,2,1,1,1,2,1,0,1,1,1,2,5,2,1,1,1,1,1,1,6,2,12,2,2,2,2,2,2,2,21,6,2,2,2,2,5,2,5,2,11,6,5,7,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,12,1,10,2,2,2,5,6,2,2,5,6,5,2,5,2,2,11,11,7,2,2,6,1,2,2,1,2,1,1,1,5,26,5,9,2,1,1,1,2,1,1,6,9,12,0, +2,6,1,1,2,5,0,2,5,2,1,1,5,2,1,1,1,2,1,5,2,10,1,5,2,1,2,1,5,2,2,2,1,1,2,2,11,2,5,21,13,13,7,1,1,1,0,1,1,2,1,1,1,2,1,2,5,2,1,1,2,5,2,5,5,2,2,6,5,7,10,2,1,0,2,1,1,2,5,2,1,1,2,2,2,10,11,12,6,14,14,11,7,13,12,7,2,1,1,1,1,1,6,1,1,2,1,1,2,2,1,11,2,2,1,2,2,6,2,7,21,13,15,13,13,7,2,5,2,2,2,13,13,7,7,6,1,1,1,2,13,7,7,2,13,1,2,5,2,2,2,1,2,2,6,2,5,2,2,2,2,13,14,6,2,5,2,2,5,2,7,1,1,1,12,7,2,0,1,1,2,2,2,6,2,5,1,2,5,2,2,12,2,2,6,7,7,13,2,2,2,5,2,2,7,2,2,1,1,1,5,1,1,1,1,1,2,1,0,1,1,1,1,2,2,1,1,1,1,1,2,2,5,2,2,6,1,6,2,5,1,2,13,2,5,1,1,6,2,2,2,2,11,7,11,2,6,5,2,1,1,1,1,1,1,1,1,1,1,1,1,5,2,5,7,10,13,2,5,2,2,2,11,2,2,5,11,2,5,2,5,11,11,2,6,1,2,5,2,2,1,1,1,2,5,11,11,2,2,1,1,1,2,1,1,1,1,2,5,2, +2,2,2,1,6,2,5,1,2,2,5,2,2,5,1,1,1,1,2,2,10,26,5,2,1,2,1,1,2,1,5,2,1,1,5,2,2,2,13,13,13,7,12,1,2,2,1,1,0,2,1,1,0,1,1,2,2,2,1,1,1,2,2,2,2,7,5,7,11,7,13,2,1,1,1,1,1,1,2,2,1,1,2,2,5,21,7,2,29,14,11,7,13,7,7,6,2,1,1,1,0,1,2,1,1,1,2,2,5,2,5,5,2,1,0,1,2,2,6,13,13,7,14,13,13,6,2,2,2,5,5,13,7,13,7,2,2,1,2,5,7,7,6,2,7,2,6,1,2,5,2,1,2,5,2,2,6,2,5,2,5,13,7,6,1,2,2,1,2,7,13,1,2,1,1,0,0,2,0,1,1,2,6,7,2,2,1,1,2,2,12,2,2,6,1,7,5,7,2,2,5,2,5,1,6,2,5,2,1,2,2,1,1,1,1,0,12,2,1,1,1,1,1,1,6,1,2,1,1,1,1,5,7,1,5,2,5,1,2,2,2,5,13,2,2,2,6,1,2,5,2,2,6,2,10,2,5,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,9,11,1,5,2,2,2,5,2,2,2,2,6,7,2,10,2,5,2,11,11,2,2,5,2,2,2,5,1,1,2,1,2,26,5,2,25,2,1,1,5,1,2,1,1,9,9,2, +1,2,5,1,2,2,2,1,5,2,5,2,2,10,5,2,1,6,1,6,1,1,1,5,2,2,5,2,2,2,2,2,10,2,2,11,7,11,2,6,7,13,5,2,6,1,2,5,2,11,2,1,1,1,1,2,5,2,1,1,1,2,5,6,12,11,10,12,13,14,13,2,1,1,1,1,1,1,2,2,1,1,1,7,14,14,22,5,13,7,5,14,7,7,6,2,5,1,1,0,1,1,2,1,1,2,5,5,2,5,7,7,2,1,1,2,5,7,2,21,11,14,13,13,13,6,2,2,5,2,2,21,7,13,12,1,1,1,1,2,7,7,2,7,7,2,1,2,6,2,1,1,2,2,2,5,2,2,2,2,2,21,13,2,2,6,2,6,5,7,6,2,1,1,0,2,1,1,1,1,1,2,5,2,2,5,1,2,6,1,14,2,2,2,5,2,6,7,2,6,2,2,2,13,1,2,2,2,5,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,5,1,1,1,2,2,2,2,2,2,6,1,1,2,1,10,2,1,6,1,2,6,1,6,1,11,6,6,2,2,6,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,7,2,13,2,5,2,2,11,2,6,2,12,6,2,5,2,2,10,11,5,2,2,5,1,2,1,1,1,1,6,7,11,5,1,2,1,1,2,1,1,1,5,2,6,10,2, +1,1,2,13,10,1,1,5,1,5,9,2,5,5,2,2,2,1,1,1,1,2,1,2,2,2,6,1,1,5,2,2,1,2,2,5,5,7,11,2,2,5,7,1,2,0,1,1,2,7,1,2,0,1,5,2,2,5,1,1,2,1,1,2,11,7,13,7,10,21,6,2,1,1,2,1,1,1,2,2,1,1,1,2,13,21,7,2,13,13,11,5,2,13,13,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,5,2,2,5,1,1,2,2,2,13,13,13,13,13,13,2,2,2,2,2,13,13,13,13,7,2,1,1,2,5,7,13,7,6,7,2,2,5,2,5,1,1,2,2,5,2,2,2,5,2,7,13,2,6,2,2,2,7,7,7,7,2,1,0,2,0,2,1,1,1,1,2,2,2,6,1,1,6,1,7,6,2,5,2,2,7,7,5,2,2,2,6,1,2,6,7,6,2,1,1,1,5,1,1,1,1,1,0,2,1,1,1,1,2,1,1,6,2,1,1,2,7,5,1,2,2,5,1,2,1,2,12,2,2,6,1,2,5,2,2,2,5,10,6,2,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,5,10,10,7,2,2,1,6,2,5,2,2,2,2,2,2,2,5,2,13,6,2,2,6,2,5,2,1,6,1,5,1,26,2,2,2,5,0,2,1,1,2,1,2,5,10,2,1, +1,1,2,13,2,1,1,2,2,5,2,1,1,2,2,5,2,1,1,1,2,5,2,2,5,2,2,2,2,2,5,2,1,2,6,1,11,2,7,2,5,5,10,1,5,1,1,1,2,11,0,1,1,1,2,2,6,2,1,1,1,2,13,2,12,6,5,13,13,21,11,0,2,1,1,2,2,5,1,13,1,2,5,13,7,16,2,12,13,13,6,13,14,13,2,2,1,1,1,1,1,1,1,1,1,2,1,1,2,2,6,2,1,1,2,12,1,6,13,21,13,11,13,13,11,6,2,5,2,2,13,14,11,13,6,1,2,2,6,1,7,7,2,2,7,6,2,2,2,2,2,1,2,6,2,2,2,5,2,2,21,6,7,6,6,6,6,7,6,14,7,0,2,0,2,1,1,1,1,2,1,2,6,2,2,1,1,2,2,13,2,2,1,2,6,7,7,2,5,2,5,2,6,2,7,7,6,6,1,2,2,2,1,1,1,1,1,1,0,1,1,1,1,2,5,1,2,2,2,1,2,2,1,6,1,6,2,2,5,1,2,12,1,1,1,2,5,2,2,5,2,2,13,6,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,5,6,5,1,2,2,2,11,6,2,11,6,5,2,2,2,13,5,2,1,2,2,1,2,1,1,2,1,2,10,2,5,9,2,5,1,1,1,1,1,2,2,5,2,1, +1,1,5,13,5,1,2,11,9,2,1,1,1,2,1,1,2,1,2,1,1,1,1,1,2,2,5,1,1,1,2,1,2,1,2,5,10,11,10,2,10,7,13,1,2,2,1,1,1,5,1,1,1,1,2,5,1,2,2,5,2,5,2,2,13,13,15,13,21,13,2,2,1,2,5,1,5,2,16,5,2,2,14,6,2,13,2,14,7,7,7,13,13,11,2,2,1,2,1,1,1,2,2,2,2,2,1,2,2,6,7,2,6,2,12,5,2,12,14,16,13,13,13,14,11,2,2,2,2,13,13,14,13,7,2,1,1,1,2,5,7,2,7,5,7,1,2,13,2,5,1,1,1,2,2,2,2,2,2,2,16,12,6,6,2,6,13,7,7,8,7,1,0,2,0,0,2,1,1,1,2,7,14,2,5,5,1,2,5,1,2,2,5,2,2,7,2,6,2,2,2,2,2,7,7,6,7,2,6,1,6,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,5,2,5,1,1,2,1,5,2,2,6,2,1,2,10,2,5,1,1,2,2,6,2,5,2,11,2,2,5,2,5,2,1,1,1,1,1,1,1,1,1,1,1,1,2,5,9,7,5,2,2,2,5,2,6,2,10,11,6,6,6,2,2,6,11,2,2,9,2,5,2,2,9,1,1,6,10,5,2,2,5,9,2,1,1,1,5,1,2,6,9,9,2, +1,2,21,7,2,1,1,2,1,1,1,2,1,2,5,2,9,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,1,5,2,10,2,5,6,2,2,5,2,2,1,5,0,1,1,2,1,2,1,1,2,2,5,2,1,1,2,7,2,13,13,13,14,28,13,13,6,1,1,2,2,2,5,2,13,13,6,7,6,7,7,16,6,7,13,7,11,13,12,2,2,1,2,2,2,1,1,1,2,2,2,7,1,2,7,7,14,6,1,7,2,2,13,21,13,21,15,21,14,13,13,2,6,1,6,1,14,13,7,11,2,1,1,1,2,7,5,7,2,7,2,1,5,2,2,2,2,1,1,2,5,2,5,6,5,7,13,2,7,2,2,13,1,6,7,7,6,2,0,2,0,2,0,1,1,1,2,5,2,2,5,2,1,5,6,2,5,2,2,13,7,7,6,2,2,2,5,2,6,7,2,6,6,2,1,5,2,1,1,1,1,1,1,0,2,1,1,1,1,1,1,2,1,1,1,2,1,2,1,1,2,2,5,2,2,2,2,2,1,1,1,2,1,5,1,2,2,2,10,6,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,5,5,2,5,2,6,2,5,2,2,11,6,2,11,2,2,2,2,26,2,1,6,1,1,2,2,2,1,2,2,5,2,2,6,9,2,2,5,2,1,2,1,5,6,9,5,1, +1,10,5,5,2,1,2,1,1,1,1,5,1,2,2,2,2,1,1,1,1,1,1,5,1,2,1,2,5,1,2,5,2,2,2,2,5,2,10,2,1,5,10,1,1,2,2,1,1,5,1,1,1,2,2,5,2,5,2,1,5,11,2,7,21,21,21,16,13,13,2,1,1,1,1,1,1,2,12,6,7,7,13,7,13,7,6,7,2,11,14,7,2,1,2,1,1,2,2,2,1,1,2,2,2,13,1,2,21,13,2,2,2,6,2,5,21,13,14,14,21,13,29,14,11,2,2,5,2,5,13,13,7,11,2,1,1,1,2,2,14,7,2,7,6,1,1,2,5,5,1,1,0,1,2,2,2,2,2,13,7,6,7,6,6,7,2,7,7,7,7,2,0,2,1,0,2,2,1,1,2,2,2,6,2,5,1,2,1,2,1,1,2,2,7,7,7,6,2,5,2,2,6,6,7,7,5,6,1,2,2,1,1,1,1,1,0,2,1,1,1,1,1,1,1,2,1,2,2,1,6,1,1,1,2,5,2,2,2,6,1,6,1,2,6,1,1,2,6,2,5,11,6,6,2,6,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,12,10,2,2,1,2,2,2,6,1,2,11,7,6,2,11,2,10,7,2,1,2,2,1,1,5,2,1,1,5,10,2,5,2,2,6,1,1,1,2,1,2,1,10,2,2,1, +5,10,2,1,1,1,5,2,2,1,1,1,1,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,5,2,5,2,5,1,1,5,5,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,1,1,6,2,12,13,10,11,13,7,5,13,6,0,1,2,2,1,1,2,12,2,12,7,2,6,7,14,6,7,13,7,2,2,1,1,5,1,1,1,2,1,0,1,2,5,7,11,2,2,13,13,2,2,5,5,2,7,17,13,21,14,13,13,13,14,2,2,2,2,2,11,13,13,13,11,2,1,1,1,6,2,7,7,6,7,2,1,6,2,7,2,5,1,1,1,2,2,5,2,6,7,2,6,2,2,2,2,13,6,14,7,2,1,1,0,0,2,1,2,5,1,2,7,5,2,2,2,5,2,1,1,1,6,2,7,6,13,1,5,2,2,2,2,7,6,7,6,1,2,2,6,1,1,1,1,1,1,1,1,0,1,1,2,1,1,5,1,6,2,5,1,1,1,2,1,2,2,2,2,5,1,1,2,5,2,1,2,6,9,2,2,2,11,11,2,6,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,12,1,6,1,1,2,5,2,9,5,2,6,11,6,6,2,5,5,10,2,2,2,10,1,1,2,1,1,2,9,5,1,2,5,26,1,1,1,1,2,1,5,9,10,5,5,2, +2,1,1,1,1,2,1,2,2,2,1,1,2,2,1,2,5,1,1,1,1,1,1,1,2,1,1,1,2,1,1,1,1,1,2,10,2,5,2,2,5,1,2,1,1,2,2,1,1,21,1,1,1,1,2,2,5,2,2,2,2,14,15,11,29,14,21,13,11,13,2,2,1,1,1,1,2,2,6,2,13,2,2,13,7,7,13,7,7,11,6,1,1,1,2,1,5,2,5,1,1,1,2,2,7,2,1,11,14,6,2,2,2,2,11,13,29,13,13,8,13,13,13,13,6,2,5,2,5,13,13,7,7,2,2,1,1,1,2,2,7,7,2,2,5,2,2,2,13,2,2,1,2,1,2,1,2,2,5,13,2,6,7,2,12,11,6,6,7,6,2,2,1,1,2,0,2,2,2,1,6,1,2,2,5,2,2,2,5,2,2,1,2,7,2,6,2,2,2,6,1,6,6,13,7,2,2,5,2,2,2,1,1,1,1,1,0,2,1,1,2,2,2,1,1,1,1,2,2,6,1,1,5,1,1,2,2,2,2,5,2,1,1,1,1,1,2,2,2,5,2,11,2,6,2,2,5,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,12,1,1,1,2,1,11,2,2,2,25,11,2,2,9,2,13,2,1,5,2,2,1,1,2,1,5,2,5,9,6,2,2,2,1,1,1,2,5,5,9,7,9,2,5,1, +1,2,1,1,1,1,1,5,2,1,1,2,5,2,2,2,2,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,2,5,2,10,2,10,2,1,2,7,1,1,6,2,1,2,12,2,2,2,1,2,2,5,2,5,2,1,13,21,7,14,29,29,14,13,11,13,2,1,2,1,1,1,1,1,2,2,2,2,13,11,13,7,11,2,11,6,1,1,1,2,1,1,2,2,2,2,1,1,2,6,5,1,1,13,21,6,1,2,2,12,21,11,14,11,14,13,13,13,14,11,2,2,2,2,12,13,13,7,7,6,2,1,2,2,2,13,7,6,2,6,2,2,5,2,2,2,5,1,2,1,2,5,2,2,2,7,6,1,2,2,6,6,2,6,7,7,6,0,1,0,1,0,2,2,5,1,2,5,2,7,2,2,5,2,2,1,6,6,2,7,6,2,2,2,5,2,5,2,7,7,13,6,2,2,5,2,2,2,1,1,1,1,1,0,2,1,1,2,2,1,2,1,1,2,5,1,1,1,2,2,5,2,5,2,5,2,5,2,2,2,6,1,5,2,2,2,5,11,11,2,2,6,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,5,2,9,2,5,1,2,5,2,2,2,5,2,5,2,10,11,2,10,7,2,2,2,5,2,1,2,2,1,2,25,1,2,2,9,11,0,2,1,1,1,2,5,9,2,2,12,2,5, +1,1,1,5,1,2,2,2,2,1,1,1,2,5,1,2,1,1,1,1,1,1,1,2,6,5,5,2,2,1,1,1,1,2,5,5,2,2,2,5,10,12,1,1,2,2,2,13,2,2,2,1,1,2,5,2,2,2,6,1,11,7,13,13,14,21,14,13,13,14,2,1,5,2,2,1,2,5,2,13,2,14,2,7,7,11,7,7,7,2,2,1,2,1,2,2,2,9,2,2,1,1,2,2,2,2,2,13,14,2,2,6,7,7,11,13,16,11,17,11,6,16,13,13,2,2,1,2,7,13,11,13,2,2,1,2,6,1,7,7,7,2,5,2,2,2,6,1,7,5,2,2,1,2,2,1,2,5,13,7,2,2,7,7,5,2,6,7,7,7,2,2,1,1,1,1,2,7,2,2,2,2,6,2,2,6,2,2,1,2,2,7,2,7,2,2,2,5,2,2,2,2,13,5,7,2,6,2,2,5,2,1,1,1,1,1,0,2,1,1,1,1,2,2,1,1,1,1,2,2,1,1,1,2,1,2,2,2,2,2,2,5,2,1,2,2,6,2,5,2,2,11,5,11,2,2,2,6,1,2,1,1,1,1,1,1,1,1,1,1,2,2,7,6,2,2,1,1,2,2,11,2,2,9,11,2,6,1,10,10,11,5,1,2,2,2,1,5,1,2,2,2,6,2,5,2,5,1,1,1,1,1,9,10,9,1,25,1,9,2, +1,1,2,1,1,5,5,2,5,2,1,1,1,1,1,2,2,1,1,1,1,1,1,1,2,2,1,1,5,2,2,2,1,2,2,11,10,5,2,5,21,2,2,5,2,5,13,1,2,2,2,2,1,2,2,2,5,2,2,2,11,7,14,16,29,16,13,13,2,6,2,1,2,2,2,5,1,2,2,6,7,13,6,13,7,7,2,11,13,6,1,2,1,2,5,1,2,2,2,5,0,2,5,2,2,1,7,13,7,6,2,2,12,6,7,16,11,17,13,8,13,11,7,2,6,2,2,2,13,7,7,2,14,2,1,2,2,2,2,7,2,7,2,2,5,6,1,2,6,2,1,2,5,1,2,2,2,2,5,2,2,6,2,13,6,7,6,14,7,13,2,0,1,1,1,1,2,7,2,5,2,6,2,5,2,5,2,6,1,5,7,7,2,2,5,2,5,2,2,2,6,2,2,13,7,2,2,2,6,2,2,1,1,1,1,1,1,0,0,2,0,1,1,2,1,1,1,1,5,2,2,2,1,1,1,2,6,2,9,2,5,1,2,1,2,5,2,2,2,6,2,7,7,11,2,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,11,2,2,1,2,1,2,5,2,1,2,5,2,5,11,6,10,11,2,2,2,5,2,6,1,1,1,5,6,2,2,2,2,2,1,5,1,1,1,1,25,2,5,5,5,9,2,2, +1,1,2,1,1,2,5,2,2,2,1,1,1,1,2,5,1,1,1,0,1,1,1,1,1,5,1,2,2,2,5,1,2,2,5,13,13,2,2,5,2,1,2,1,2,2,2,1,1,6,1,1,2,2,2,5,2,2,5,2,7,13,29,29,16,16,11,6,5,13,1,2,2,5,2,2,2,2,2,13,13,2,6,14,2,7,7,13,13,2,5,1,2,2,1,2,5,2,5,1,1,2,2,5,2,2,13,13,13,1,7,7,13,7,14,16,13,11,11,13,13,17,6,2,6,2,2,5,14,6,6,7,6,2,1,2,1,2,7,7,13,2,6,1,2,2,2,6,1,2,1,6,2,1,5,2,14,2,2,2,5,1,2,7,13,1,7,13,7,7,6,1,0,2,0,1,2,2,7,1,2,2,2,2,2,2,2,1,2,2,7,7,6,2,1,2,2,2,2,5,2,2,13,7,6,6,5,1,2,2,5,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,2,5,2,2,2,2,2,6,1,2,2,5,2,1,5,2,5,2,10,11,2,2,2,2,1,5,1,1,1,1,1,2,1,1,1,1,1,2,12,6,2,2,5,1,2,1,2,2,1,5,2,10,2,13,5,5,2,5,2,1,2,2,1,1,6,1,2,10,2,25,6,2,2,1,2,1,1,2,2,2,25,1,5,2,2,6,1, +1,1,1,2,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,2,1,2,5,2,2,1,5,2,5,11,5,2,13,5,1,1,1,1,6,7,11,0,1,2,1,1,1,2,7,2,5,2,2,6,13,29,16,17,29,13,11,6,11,6,2,2,2,2,2,2,5,1,11,13,7,6,7,7,6,7,13,14,16,2,2,2,2,1,5,2,2,6,2,1,5,1,5,2,5,5,21,11,2,2,12,2,11,7,29,16,13,11,17,11,17,13,17,2,2,2,6,7,13,7,7,8,6,2,1,1,1,2,13,7,2,7,2,6,1,5,2,2,2,13,1,2,1,2,2,2,13,1,13,2,2,6,7,13,2,6,6,7,6,7,6,6,0,1,1,0,2,5,2,2,2,5,2,5,2,1,1,2,2,2,6,6,2,2,1,6,1,6,1,5,2,2,11,6,2,7,13,2,5,2,2,1,1,1,1,1,1,0,2,1,1,1,1,2,1,1,2,1,2,2,5,1,1,2,2,2,5,2,5,2,2,1,5,2,2,2,2,2,2,2,6,10,2,7,6,2,1,1,2,2,5,1,1,1,1,1,1,1,1,1,2,2,7,2,13,2,1,2,2,5,1,2,2,2,6,2,13,2,11,2,2,1,2,5,2,1,1,2,1,5,7,6,1,2,6,2,5,2,1,1,1,2,5,9,2,2,25,2,2,2, +1,1,1,1,1,1,5,2,5,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,11,7,11,14,5,0,1,2,5,1,13,2,1,5,2,1,0,1,2,2,6,2,5,2,7,21,14,29,14,30,13,13,22,16,12,2,2,11,2,2,2,2,6,28,14,8,2,11,13,14,13,14,16,17,2,2,5,2,2,2,2,7,2,2,2,1,2,2,2,2,13,13,7,6,7,6,7,13,7,16,29,7,13,13,14,13,11,11,6,2,6,2,7,6,7,7,6,7,2,2,1,1,2,7,6,6,2,2,2,6,2,5,2,5,7,2,2,2,2,13,13,1,6,2,2,5,2,6,2,2,5,6,7,7,13,2,2,2,1,1,1,2,2,2,5,1,2,2,2,2,2,1,2,5,1,2,7,6,1,2,1,5,2,6,7,2,12,7,7,6,6,2,2,2,2,6,1,1,1,0,2,1,1,0,2,1,1,1,1,1,1,1,1,2,1,2,1,6,2,6,1,2,2,1,2,1,2,1,5,2,2,6,5,1,11,1,2,13,11,2,6,1,6,2,5,2,2,1,1,1,1,1,1,1,1,2,12,6,6,2,2,1,5,2,2,1,6,1,6,2,10,11,10,10,2,1,1,5,2,2,1,1,2,5,10,10,1,9,11,1,2,1,2,1,2,5,2,9,5,1,9,2,2,9,2, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,2,5,13,2,16,2,1,1,2,2,5,5,5,2,2,2,1,1,1,6,2,2,2,1,2,13,13,21,14,21,29,14,14,30,30,13,2,2,13,12,6,2,5,2,36,14,7,7,13,13,14,13,14,29,13,2,2,2,2,2,2,2,7,2,2,2,2,2,5,2,6,21,6,7,2,2,2,13,6,16,29,14,11,13,7,13,13,17,11,6,2,6,2,14,6,6,6,7,6,2,1,1,1,2,7,7,6,6,6,6,2,2,2,2,1,2,5,2,6,5,7,2,6,5,2,2,2,2,11,5,13,1,11,2,13,7,6,6,0,1,1,1,1,2,5,2,2,2,1,0,1,1,1,1,2,2,7,7,2,1,2,2,2,2,2,7,2,11,11,6,2,6,5,1,2,5,2,1,1,1,1,0,2,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,2,6,2,6,1,6,9,2,2,2,2,2,6,7,7,2,6,2,6,1,2,2,2,6,1,5,1,1,1,1,1,1,1,2,10,5,2,2,1,2,2,1,2,2,11,2,6,7,13,11,5,1,1,1,2,2,2,1,2,5,1,11,1,6,6,10,7,2,1,1,1,1,2,2,10,2,2,25,2,2,25,2, +1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,5,2,2,2,1,13,13,7,2,13,2,1,1,1,1,2,10,2,1,1,1,2,5,1,5,7,5,2,2,6,13,21,17,21,12,29,14,29,24,13,2,2,2,5,2,2,6,5,13,16,13,14,13,14,14,15,13,13,16,13,1,2,2,5,2,2,5,2,2,1,2,2,5,1,2,14,13,2,7,2,2,21,7,6,17,14,11,7,13,29,11,8,7,11,11,2,2,2,7,6,13,7,7,13,2,1,1,1,13,14,2,7,7,2,2,2,2,6,2,5,2,2,2,6,13,7,2,2,2,2,5,2,11,7,6,2,5,13,2,14,13,6,2,6,0,1,1,1,2,2,2,2,2,1,1,1,1,2,2,2,5,13,7,1,2,5,2,5,2,13,10,13,13,2,6,6,6,6,1,2,5,2,1,1,2,1,1,0,2,1,1,1,1,1,1,1,6,1,1,1,1,1,2,5,2,2,5,2,6,1,2,1,2,2,2,2,2,5,2,5,5,2,13,6,6,6,6,6,2,6,1,6,1,2,2,1,1,1,1,1,1,5,6,2,2,12,2,1,5,2,1,1,5,6,6,6,7,13,5,2,6,1,1,2,5,2,1,1,9,10,2,5,1,11,9,2,5,1,1,1,5,2,5,10,9,5,2,9,2,2,1, +2,1,1,1,1,1,1,1,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,2,6,9,2,5,2,2,5,2,5,6,21,13,11,11,14,6,1,1,1,2,12,12,1,1,0,2,2,2,2,2,2,2,5,1,2,21,21,23,15,30,36,30,36,17,14,6,2,2,2,2,5,2,13,21,7,14,29,29,29,14,13,13,13,16,13,0,2,2,2,1,6,2,2,2,5,2,5,2,5,5,21,2,5,11,6,2,13,6,6,22,13,11,7,17,15,13,13,13,11,13,6,2,13,7,7,11,7,6,8,6,1,1,2,7,7,6,14,7,6,2,2,6,1,2,2,2,2,13,2,7,2,6,2,13,2,2,2,5,7,7,2,2,14,2,13,6,7,6,6,2,2,1,1,2,2,2,1,1,1,0,2,1,2,1,2,7,13,6,2,1,2,2,2,2,2,2,2,11,7,6,6,7,2,6,2,6,2,1,1,0,0,2,1,0,1,1,1,1,1,2,1,1,1,5,2,1,1,1,2,2,5,2,2,2,1,5,2,2,6,5,1,2,2,10,2,2,2,10,11,6,6,6,6,1,2,5,2,5,2,2,2,2,1,1,1,1,2,10,2,6,2,2,2,2,1,1,2,1,26,11,11,7,7,2,5,1,1,1,2,2,6,5,2,2,2,1,1,6,13,5,2,1,1,1,1,2,2,10,12,1,2,2,2,5,2,1, +1,1,1,1,1,1,1,1,1,1,2,5,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,11,11,5,13,13,2,2,2,2,12,13,21,2,0,2,2,2,2,2,2,2,6,2,5,11,13,16,29,14,30,29,21,29,22,14,2,6,1,2,2,2,2,5,13,13,36,29,16,16,14,14,16,13,13,11,0,1,2,1,5,2,2,2,6,2,2,2,2,2,21,13,2,2,12,2,13,2,7,7,29,13,13,12,13,11,8,11,8,7,7,6,2,6,7,8,7,7,7,7,2,2,1,1,14,7,7,6,7,2,6,6,7,6,2,1,1,6,5,7,13,2,2,2,7,2,6,2,2,7,2,6,13,2,2,7,7,6,2,13,2,1,1,1,1,1,1,1,1,0,1,1,1,1,2,1,2,7,2,2,1,5,2,2,5,7,2,7,11,7,6,7,6,2,1,2,2,1,1,0,2,1,1,0,1,2,1,1,1,2,2,1,2,1,2,1,1,1,2,5,1,2,2,5,2,2,1,2,1,2,1,2,5,2,2,5,2,5,11,6,6,6,2,6,6,2,2,2,2,1,1,1,1,2,1,1,1,2,10,7,7,2,1,6,5,1,1,2,2,13,11,7,10,11,2,2,6,1,2,5,9,2,1,1,1,1,1,2,2,10,2,6,1,1,1,1,2,11,9,6,5,10,10,10,2,2,1, +2,1,6,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,6,5,2,1,2,1,5,13,13,7,11,0,1,2,2,13,2,21,2,1,5,6,5,2,1,2,11,2,2,2,13,13,21,21,29,22,13,22,43,14,14,6,1,2,6,2,2,2,11,6,16,23,16,16,13,29,14,13,16,13,6,2,1,1,2,2,2,5,7,2,2,2,5,2,9,14,2,12,7,2,11,2,2,21,13,16,13,13,16,11,8,13,8,13,11,11,6,2,6,7,7,13,7,6,6,2,1,1,2,7,6,1,7,14,2,2,7,16,7,2,6,1,2,2,2,2,5,2,2,5,2,2,6,1,13,2,2,13,6,13,13,7,6,2,7,1,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,7,6,2,5,2,2,2,5,2,13,2,12,2,11,6,7,2,2,5,2,1,1,1,1,1,1,1,1,1,1,0,2,1,2,1,1,5,1,1,1,1,1,2,2,2,5,2,2,2,5,2,5,2,2,2,6,1,2,11,6,6,2,11,5,6,6,7,6,1,2,1,1,2,1,2,2,1,1,1,1,1,5,10,10,10,9,2,2,2,1,1,5,2,2,26,6,10,2,5,2,2,1,2,2,5,1,2,1,1,1,2,5,27,21,2,1,2,1,1,1,5,1,9,10,6,10,10,11,5,11,0, +2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,6,1,2,2,2,2,2,1,5,2,7,13,11,7,5,6,5,5,5,10,10,13,2,2,12,5,13,1,1,5,2,2,5,5,13,2,13,11,13,17,21,29,16,6,7,2,6,2,5,2,12,11,14,14,29,16,16,16,21,14,13,14,29,13,6,2,1,1,1,1,5,5,2,5,1,2,1,2,10,7,2,13,2,1,11,2,2,6,13,16,13,13,15,13,13,11,13,8,11,13,6,2,7,7,7,13,6,7,13,2,6,1,2,7,11,6,14,6,6,6,7,35,7,13,2,2,5,2,5,2,2,5,2,2,2,2,2,13,7,2,13,7,13,7,8,11,2,5,2,1,1,1,0,2,1,1,1,1,1,2,1,1,1,1,6,1,2,2,2,2,6,2,2,2,2,5,2,11,13,6,13,25,2,1,1,1,0,1,0,2,1,1,1,1,0,1,1,1,6,2,1,1,1,1,2,1,1,2,2,5,1,5,2,2,2,1,2,1,5,2,9,6,2,5,10,7,11,7,2,7,7,6,2,5,2,25,2,5,2,1,2,1,1,1,1,1,2,11,9,5,2,5,2,1,1,1,2,2,10,11,10,10,10,2,2,1,2,5,2,2,6,2,1,1,1,1,2,13,10,2,1,1,1,1,1,6,9,6,6,10,6,6,6,2,10,2, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,5,2,5,2,2,1,5,21,11,13,5,2,2,13,2,6,5,12,0,2,5,2,5,2,1,2,2,5,2,13,7,2,13,7,14,23,30,36,22,29,16,11,7,13,13,13,13,11,14,29,13,16,29,13,29,13,14,14,17,13,2,2,2,1,2,2,2,2,6,2,2,2,2,2,13,5,2,10,2,12,2,10,7,11,16,29,17,13,16,13,17,13,8,11,11,6,6,6,14,8,6,7,7,6,2,7,1,1,2,14,2,2,14,6,2,6,2,14,7,2,2,2,6,2,2,2,5,2,2,13,2,5,2,14,7,2,7,7,7,2,14,6,6,2,1,1,1,1,1,1,1,0,2,1,0,1,0,1,1,1,2,2,6,2,5,5,7,2,5,13,11,11,11,11,11,7,7,2,2,1,1,1,1,1,1,0,2,1,0,2,1,1,1,1,2,1,1,1,1,1,1,1,1,2,10,2,2,2,6,9,1,2,1,2,1,2,1,2,2,2,11,2,11,2,2,2,7,6,6,6,2,2,2,2,2,2,1,1,5,2,2,6,1,6,5,2,1,2,2,1,2,2,2,5,10,10,9,13,1,5,2,2,1,2,2,2,2,2,5,1,1,1,11,10,5,2,1,1,2,1,2,2,2,11,6,6,10,6,6,5,11,2, +1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,1,1,1,2,5,2,2,2,2,2,6,1,10,21,13,13,2,1,6,13,21,11,2,2,0,1,11,2,2,5,1,2,2,5,11,6,5,5,11,7,30,23,34,68,11,22,17,13,11,7,6,2,21,13,11,11,14,17,21,14,36,13,21,29,14,11,2,6,1,1,2,6,1,6,1,2,2,2,5,6,5,2,13,2,14,13,12,2,2,7,16,21,14,13,11,13,13,16,13,11,13,6,6,2,7,7,13,6,7,7,6,7,1,1,7,14,2,2,14,2,2,6,2,14,13,2,5,1,2,2,2,5,2,6,5,2,2,2,2,21,13,5,7,7,2,7,6,13,2,2,2,1,1,1,0,2,0,2,0,1,1,1,1,1,2,6,1,5,2,2,2,2,5,1,2,2,2,5,2,2,13,5,2,2,1,0,1,1,0,1,0,2,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,2,2,5,2,2,2,1,1,5,2,2,1,2,2,5,2,7,11,6,2,6,6,5,13,6,2,2,6,2,1,2,1,1,1,2,1,6,1,1,2,1,5,2,2,5,1,1,2,2,10,10,10,10,2,5,2,1,1,2,5,2,25,2,5,2,1,1,5,10,10,2,1,2,1,1,1,2,5,9,11,6,6,6,10,6,10,11,2, +1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,6,1,1,1,1,5,2,1,1,1,1,1,1,1,5,2,2,2,21,13,10,11,5,2,21,16,14,10,1,1,1,1,5,2,12,2,5,2,5,2,5,2,2,2,2,21,29,43,47,18,12,31,29,13,13,13,13,13,15,2,14,22,21,30,15,29,30,13,16,13,13,13,6,1,1,2,5,5,5,2,2,6,2,2,2,12,6,5,21,5,6,6,1,1,2,13,6,2,13,6,6,1,7,15,8,11,8,7,6,2,6,7,11,13,6,8,7,7,2,1,7,7,1,6,7,2,6,6,2,14,6,2,1,2,5,2,6,1,2,2,5,7,6,6,7,7,2,2,6,2,7,13,7,7,6,2,2,1,1,0,1,1,1,0,1,1,1,0,2,1,2,2,2,2,5,2,5,2,2,2,5,1,1,1,2,2,13,13,2,1,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,5,2,2,2,6,1,1,2,1,5,2,2,5,2,2,5,9,7,11,2,2,13,7,7,2,2,5,2,2,5,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,5,2,10,12,10,1,10,5,2,1,1,1,2,9,2,2,2,2,1,6,1,5,2,1,5,2,1,1,1,1,1,10,6,6,6,7,6,10,6,10,2, +2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,5,2,2,5,2,2,6,1,2,6,2,2,2,5,10,11,13,5,5,14,21,14,26,2,2,1,1,2,13,5,2,2,1,1,2,2,2,5,1,2,11,14,30,37,34,29,11,34,14,17,21,21,16,21,21,14,22,29,16,22,21,36,22,14,15,13,14,13,6,1,2,5,2,2,2,2,5,2,5,1,5,7,11,7,13,1,5,7,2,2,2,2,7,8,11,2,2,2,13,17,11,15,11,6,2,6,13,8,11,11,7,7,7,7,1,1,7,5,2,13,2,2,7,6,1,13,2,2,1,1,2,2,7,2,13,2,2,2,2,7,2,13,2,5,2,7,13,7,7,6,2,6,1,1,1,1,1,1,1,1,1,1,1,1,0,1,2,13,5,2,2,2,2,2,2,5,1,6,2,5,2,2,13,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,2,1,2,2,1,1,1,1,1,1,1,2,10,2,1,1,1,1,2,1,2,2,2,6,1,6,6,7,7,2,5,11,6,13,2,2,2,5,2,2,5,1,1,1,1,5,2,2,1,1,2,2,1,2,5,1,1,2,1,25,2,2,12,6,2,5,1,1,2,2,5,2,11,6,11,2,2,10,5,2,2,1,1,2,1,1,2,2,1,11,6,6,6,6,6,5,6,2, +2,1,2,5,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,1,2,2,2,2,5,1,2,5,2,2,11,7,10,10,10,5,2,5,11,1,1,2,2,1,5,2,2,1,2,6,2,13,2,2,6,6,21,30,45,49,34,47,13,37,21,13,21,13,7,7,16,13,14,14,29,16,29,30,13,21,14,14,14,14,2,6,2,5,2,2,5,2,2,2,2,2,13,12,1,27,2,6,7,5,2,1,1,2,2,21,6,2,6,13,17,15,15,13,11,11,6,7,11,7,14,7,13,2,5,2,6,1,2,2,2,2,5,2,2,6,2,6,2,1,1,6,2,6,13,2,2,2,2,13,1,6,7,2,2,2,2,2,7,8,7,6,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,6,1,7,13,2,2,5,1,1,2,1,2,2,2,11,13,13,1,1,2,1,1,1,1,2,0,1,1,1,1,1,1,1,1,1,2,1,2,5,1,1,1,1,1,1,1,5,2,2,2,10,1,1,6,1,1,5,2,5,2,2,2,5,11,13,1,2,10,11,6,2,6,2,2,2,6,2,5,1,2,1,2,5,1,1,2,1,1,2,5,2,1,1,2,2,2,5,2,10,10,2,2,1,1,5,11,2,10,2,11,11,5,11,10,2,2,1,2,1,5,1,1,1,5,9,6,6,2,10,11,9,6,6,2, +2,5,2,5,5,5,1,2,5,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,2,5,2,7,5,5,2,2,11,5,12,13,2,2,5,2,5,2,13,1,1,5,1,5,2,2,7,2,13,22,49,45,16,45,47,21,32,2,13,11,13,13,13,21,11,29,22,30,43,29,22,12,21,14,11,13,29,1,2,2,2,5,2,1,2,5,2,5,2,13,1,12,2,5,5,2,2,2,5,1,2,11,11,13,6,2,11,17,15,15,15,7,11,6,6,11,7,7,2,6,5,2,2,1,1,2,1,2,2,2,2,6,2,2,7,2,2,1,1,2,7,6,2,5,5,13,2,2,2,6,1,6,1,6,6,14,7,6,7,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,5,2,2,2,2,2,6,2,5,1,13,11,13,13,13,2,1,0,2,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,1,1,1,1,2,2,5,2,1,1,6,1,2,6,1,2,2,2,5,2,10,7,2,5,6,7,13,11,2,2,12,2,2,2,2,2,1,1,1,6,2,1,5,1,2,1,1,2,2,2,1,5,2,12,11,2,5,6,2,5,1,1,2,2,2,5,10,10,10,6,10,5,1,2,1,2,1,1,1,1,2,1,2,11,9,6,5,2,11,6,6,2, +10,2,5,5,9,2,1,1,1,1,1,1,1,2,1,1,5,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,10,13,10,5,5,10,10,10,1,2,6,2,2,2,5,2,5,1,2,2,5,2,11,2,2,14,30,30,29,35,45,21,43,16,5,5,30,14,13,14,14,21,37,22,34,30,29,16,21,29,14,13,16,7,2,2,2,6,2,1,2,2,2,2,2,2,7,1,2,2,2,2,2,5,2,2,2,2,7,11,13,11,6,7,17,8,15,13,7,8,6,6,6,6,6,6,2,6,7,2,1,1,1,1,1,1,6,6,2,6,2,5,2,2,1,2,5,5,7,2,2,2,12,2,6,1,7,5,2,2,7,7,6,7,13,7,6,1,1,1,0,2,1,1,1,1,0,1,1,1,1,1,2,5,2,2,2,5,2,5,1,2,2,5,2,2,2,13,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,6,1,2,1,2,2,6,1,2,2,5,2,10,1,7,11,2,6,13,7,11,6,6,6,7,12,11,2,1,2,1,1,2,2,2,6,1,2,5,2,2,5,2,10,2,2,9,25,2,13,7,10,6,2,1,1,2,26,2,2,10,11,6,13,2,2,1,5,1,1,1,1,1,2,1,2,5,9,6,6,6,6,6,6,11,2, +2,1,1,2,5,2,5,2,2,1,1,1,1,1,1,1,1,2,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,5,10,10,1,5,5,1,2,12,1,9,2,2,5,2,5,7,2,2,2,5,2,2,5,2,6,29,22,30,30,117,36,29,30,13,7,13,22,5,14,29,16,21,30,23,43,15,21,16,17,22,11,5,13,7,6,2,5,1,2,6,6,2,2,6,2,2,6,6,2,5,2,5,2,1,2,2,5,1,2,21,13,16,11,7,22,15,29,11,6,11,6,6,6,13,6,7,13,5,7,6,0,1,1,0,2,2,7,7,6,1,2,2,5,2,1,2,2,2,13,2,2,13,7,2,2,5,6,1,2,5,7,2,14,7,11,13,1,1,2,1,1,1,1,1,1,1,1,1,0,1,0,2,2,2,2,5,2,1,2,2,6,2,1,2,5,2,11,11,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,5,2,2,2,5,1,2,5,2,2,5,2,2,2,2,6,10,6,5,2,13,6,11,7,2,11,11,2,2,2,5,1,1,2,2,5,2,2,1,1,1,2,2,2,6,13,2,5,6,2,9,1,13,9,2,2,1,6,2,9,2,2,11,2,9,2,2,6,1,2,5,2,2,1,1,5,1,2,2,2,11,6,6,5,9,7,2,5, +1,6,5,5,10,5,2,5,10,2,1,1,1,1,1,1,1,1,5,1,1,2,5,1,2,1,2,1,1,2,1,1,2,2,5,5,1,2,2,6,5,10,2,2,10,2,2,2,5,2,2,1,2,2,2,2,2,2,7,16,47,23,70,120,22,15,7,7,6,2,16,13,13,16,22,29,16,32,22,17,16,30,29,13,6,7,7,2,2,2,2,6,2,2,11,2,6,2,1,5,6,1,2,2,2,2,2,2,2,2,1,2,2,30,13,17,7,7,18,15,13,8,11,7,11,7,13,11,11,7,2,2,5,2,1,1,1,1,2,6,6,6,2,2,2,6,2,2,6,1,6,13,2,2,26,7,2,5,2,2,2,6,2,2,6,7,6,7,8,2,2,1,1,1,0,2,1,1,1,1,1,0,1,2,1,2,14,2,6,2,2,2,1,1,2,1,6,1,2,5,7,6,1,1,1,1,1,1,1,0,2,0,1,1,1,1,1,0,1,2,1,1,1,1,1,1,5,2,1,1,1,1,2,5,2,2,2,1,2,2,2,2,6,2,5,2,2,7,5,11,2,2,11,7,6,7,2,5,6,2,2,5,2,1,2,1,6,2,2,1,2,6,1,1,6,1,7,10,7,2,2,6,5,5,10,2,5,2,1,1,2,5,2,25,6,2,2,6,1,2,1,2,1,2,1,1,1,2,1,2,6,9,6,6,9,6,2,2,7,2, +2,2,1,2,6,1,2,6,1,2,1,1,1,1,1,1,2,1,2,1,1,1,2,5,1,2,5,1,1,1,1,1,1,1,5,2,2,10,2,5,2,5,2,12,7,13,13,2,2,13,2,1,1,5,2,12,6,2,11,29,48,120,32,16,13,7,14,11,13,13,14,15,21,22,32,13,29,30,32,29,14,21,14,13,2,21,13,1,2,5,2,1,2,2,11,2,6,2,2,2,2,2,6,1,5,2,5,2,5,2,1,2,7,29,17,21,11,13,18,13,8,7,11,7,7,13,8,11,8,11,7,6,7,1,1,1,1,1,2,7,6,2,7,6,6,13,2,1,2,7,2,21,7,1,5,2,1,6,1,5,7,6,2,6,7,7,7,6,7,2,2,1,1,1,1,1,1,0,2,1,1,1,1,2,2,5,21,2,2,2,2,6,2,5,1,2,1,1,2,2,11,11,2,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,1,2,1,1,2,5,2,6,1,5,2,5,2,1,2,2,6,5,6,6,2,2,13,7,11,8,6,2,2,2,5,2,2,2,1,5,1,2,2,2,5,2,1,1,2,1,5,10,11,11,2,10,2,2,2,10,2,2,2,6,5,2,6,1,2,2,2,9,7,5,1,2,5,2,1,1,1,1,6,1,5,1,11,6,9,11,1,6,2,9,2, +1,2,5,2,2,5,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,6,1,1,1,1,1,1,1,5,10,7,5,12,7,2,2,2,5,5,2,2,5,2,2,2,2,2,2,2,6,5,5,7,13,14,13,13,13,13,6,13,29,13,13,7,7,7,14,36,23,22,37,47,22,14,13,13,21,13,2,7,2,6,1,2,2,5,2,5,6,6,6,6,2,5,2,5,1,6,2,1,2,2,2,1,2,5,2,29,16,16,11,16,17,15,11,8,6,6,11,8,11,13,6,6,6,6,6,1,1,1,1,1,2,7,2,2,2,2,2,7,2,2,2,6,5,11,2,2,12,2,1,2,2,7,7,5,2,1,2,7,6,7,13,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,6,1,5,2,5,2,2,2,5,2,1,1,11,7,13,12,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,5,2,1,5,2,2,1,2,2,2,2,2,2,1,6,5,2,5,1,2,11,2,2,2,11,11,7,6,2,1,2,5,2,2,5,2,1,1,5,2,5,2,6,1,2,1,1,2,6,11,2,13,6,2,2,5,5,6,1,11,2,2,2,2,2,9,5,2,25,2,2,2,6,1,2,1,1,2,1,2,2,2,6,2,25,9,7,2,9,2,2,11,2, +2,5,2,1,2,2,1,5,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,1,2,1,2,2,12,2,2,13,2,5,2,2,5,2,9,2,2,2,5,2,2,1,5,5,2,5,7,21,21,14,14,15,7,14,13,29,14,14,21,15,21,29,16,32,18,30,47,36,29,13,21,22,17,2,13,21,2,2,2,13,2,2,2,2,11,2,2,2,2,2,2,2,6,1,2,2,2,5,2,5,1,2,2,16,29,29,14,16,23,15,11,11,6,7,7,7,7,11,6,6,7,7,2,2,1,1,1,1,2,2,2,6,2,6,7,12,2,1,2,2,7,7,2,6,1,2,1,2,6,7,2,2,2,5,6,14,7,8,13,2,2,1,1,1,1,1,1,1,1,1,1,1,0,12,0,21,2,1,2,2,2,2,2,5,2,2,2,5,11,10,13,2,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,1,1,5,2,2,1,1,2,1,10,2,10,1,10,5,2,2,2,2,2,2,6,5,1,11,2,5,6,6,7,2,6,1,2,2,2,5,2,5,1,2,1,2,2,2,2,2,5,1,1,1,2,2,10,2,2,25,2,9,2,6,9,5,2,2,2,5,2,5,2,2,2,9,2,6,1,1,5,2,1,1,5,1,2,5,2,2,2,2,2,9,5,2,10,11,11, +2,1,1,2,5,1,1,2,1,2,1,1,1,2,1,1,1,1,2,5,1,1,1,1,1,1,2,5,1,1,2,2,2,5,5,2,2,5,2,10,2,1,1,1,2,5,1,1,1,1,1,1,1,2,2,2,14,43,13,7,13,14,29,29,14,16,13,5,7,13,13,13,21,22,29,23,32,16,29,21,16,29,14,11,7,2,6,2,7,2,2,5,2,7,2,6,6,6,1,6,2,5,2,2,6,1,6,2,2,2,2,2,13,13,16,13,6,29,17,17,8,11,8,13,6,8,7,11,7,6,7,2,6,1,1,1,1,1,2,2,6,2,6,11,6,5,6,1,2,2,21,7,6,1,6,1,1,2,2,7,7,7,6,1,7,7,13,7,13,2,0,1,2,1,1,1,1,1,1,1,1,1,1,1,1,38,2,1,6,2,5,2,1,1,2,5,2,2,10,13,11,2,2,1,1,1,1,1,1,1,0,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,2,2,1,5,1,2,2,2,2,5,2,5,2,2,2,2,13,5,6,7,11,6,6,2,2,2,5,10,2,2,2,2,1,1,5,2,2,5,2,2,2,1,2,5,2,5,1,5,2,2,5,2,2,2,2,5,1,9,2,1,2,2,6,10,7,2,1,1,6,1,6,1,2,1,2,2,2,1,2,25,2,9,7,2,13,13,6,36, +2,2,5,2,1,1,1,5,5,2,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,5,2,5,2,2,5,5,13,11,2,6,13,13,5,2,2,5,2,2,2,9,2,2,2,2,1,1,2,2,11,13,36,13,5,2,14,29,22,16,29,16,29,13,14,13,16,16,13,21,29,30,29,17,16,30,13,21,11,7,6,2,2,7,11,2,2,6,2,2,6,6,6,2,6,1,2,2,2,5,2,5,2,2,2,5,2,5,7,6,13,11,11,13,22,16,11,11,7,11,6,7,6,8,11,13,6,5,2,1,0,1,1,1,2,5,2,7,7,11,6,1,2,5,2,2,2,11,2,2,2,1,2,2,5,5,7,7,2,1,7,14,6,13,7,5,60,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,1,2,5,1,2,11,10,2,13,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,5,2,2,1,2,5,2,2,6,1,2,2,2,5,2,2,5,12,6,6,11,7,11,2,2,2,6,2,2,6,1,1,1,1,1,2,5,2,2,5,2,5,2,1,2,2,11,10,2,2,2,1,2,1,5,2,2,5,2,5,2,2,11,5,10,11,1,1,2,1,1,2,1,2,6,1,1,1,5,2,2,2,5,9,2,10,11,43,74, +5,5,2,5,5,1,1,5,5,5,1,1,1,1,1,1,1,2,6,2,2,5,1,2,1,2,11,2,2,2,6,5,14,11,13,7,16,26,15,1,2,2,2,5,2,2,1,2,2,2,1,2,1,2,13,30,16,13,6,13,30,32,43,34,29,30,30,22,29,29,22,13,30,13,21,37,45,43,14,21,14,21,11,11,8,2,2,6,6,2,2,2,5,2,6,6,6,7,2,6,2,2,6,1,2,2,2,6,1,2,1,2,7,6,7,11,11,11,18,13,15,13,6,11,6,6,13,6,6,6,6,6,1,2,1,1,1,2,6,2,2,6,6,6,2,6,2,2,2,12,11,6,2,5,1,0,1,2,2,5,13,2,6,1,7,14,7,13,11,1,0,2,1,1,1,1,1,2,1,1,0,2,1,1,1,1,1,2,5,2,1,2,2,1,1,2,5,2,2,11,13,2,1,1,1,1,1,1,2,1,1,1,0,1,2,1,1,1,2,1,1,2,1,1,1,1,5,1,1,1,1,2,1,5,2,1,2,2,5,1,1,5,2,2,1,2,6,2,2,5,12,2,9,11,6,2,2,2,6,1,2,5,2,1,5,1,1,2,2,6,2,2,1,1,2,5,5,13,2,2,5,1,5,2,2,2,2,1,2,2,2,2,5,9,6,1,9,5,1,1,1,2,1,1,1,2,5,2,2,2,5,2,9,2,2,10,6,70,205,131, +2,5,9,2,1,1,1,2,5,2,5,2,2,1,1,1,2,14,11,2,2,2,6,1,5,5,26,2,6,10,21,7,13,13,13,21,21,14,2,1,2,6,2,2,2,2,5,1,2,2,1,1,2,11,7,30,2,13,13,11,14,36,46,30,30,30,16,29,14,29,14,13,36,2,30,36,46,30,21,13,13,16,8,21,22,2,2,7,2,6,1,2,2,6,6,7,6,6,2,2,2,5,2,5,5,2,5,2,5,2,2,5,2,2,7,7,11,8,16,13,13,11,6,13,6,7,11,11,11,6,2,6,2,2,1,0,1,2,2,2,6,7,11,6,2,2,2,6,2,5,12,2,2,1,1,1,1,2,7,7,13,7,2,2,13,13,6,7,13,6,1,0,1,0,2,1,0,0,2,1,1,1,1,1,1,1,1,2,2,2,5,2,1,1,5,1,2,5,7,6,2,2,0,1,0,1,1,1,1,1,1,0,1,0,2,1,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,6,1,2,6,1,1,2,6,2,2,2,2,13,2,2,2,5,6,2,2,6,1,2,2,2,2,1,2,2,5,1,1,6,1,2,5,1,2,6,2,11,13,2,5,2,2,1,5,1,2,1,1,25,6,2,5,9,2,2,25,6,2,1,5,2,2,5,2,2,2,2,5,2,9,2,2,6,5,10,5,131,201,201,74, +2,2,2,6,2,2,1,1,6,2,2,2,2,5,2,2,5,13,26,2,5,2,2,2,2,5,2,5,7,21,10,13,16,15,13,14,13,27,2,2,5,2,2,5,2,2,2,6,12,2,2,6,2,7,29,10,2,11,17,11,22,34,32,30,16,29,13,13,14,14,13,21,29,2,21,43,22,13,21,29,16,29,13,17,15,1,6,17,2,2,7,6,2,7,6,13,6,6,2,6,2,2,2,2,2,5,2,2,2,2,2,2,2,6,6,6,7,7,13,13,8,11,6,11,13,8,11,7,6,6,6,2,2,2,1,0,1,5,2,5,7,11,13,7,11,2,2,2,2,6,5,2,2,2,1,1,1,2,2,2,5,7,6,2,2,14,2,13,13,2,2,1,1,1,1,1,57,38,0,2,1,1,1,1,1,1,0,2,2,5,2,1,2,2,1,2,5,2,2,5,1,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,9,5,2,2,2,6,2,2,6,2,2,2,7,2,6,2,2,13,11,1,2,5,9,11,2,6,1,2,2,2,1,1,1,2,6,2,5,2,2,2,11,5,2,9,2,6,2,1,1,5,1,2,2,2,5,2,6,10,10,7,11,2,2,2,2,2,2,25,2,5,2,2,2,6,1,9,11,11,16,192,205,201,200,74, +2,6,5,1,2,1,1,5,2,5,2,2,6,2,2,5,2,13,12,5,2,5,2,5,2,6,2,5,21,16,11,2,30,16,14,21,16,2,2,2,2,2,6,2,2,2,21,2,28,13,22,15,6,7,17,9,2,11,22,30,22,34,43,30,22,29,14,29,14,15,13,21,17,29,16,30,30,17,17,17,17,16,13,15,8,2,14,11,2,2,6,2,2,2,7,7,7,6,2,2,2,5,5,2,6,1,2,13,2,5,2,5,13,7,2,6,7,13,6,2,17,7,2,11,7,11,8,13,11,6,2,2,6,1,1,1,1,2,1,2,2,2,2,6,2,7,2,11,5,13,7,2,5,2,1,1,1,7,5,13,1,5,1,2,2,14,6,14,8,2,2,1,1,1,1,1,1,1,1,1,2,1,0,2,0,2,1,1,2,2,2,1,1,1,2,5,2,2,6,2,11,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,6,1,6,1,11,7,6,2,6,2,2,10,2,2,11,11,2,6,2,2,5,6,2,2,1,1,2,1,5,1,1,5,1,2,9,2,5,9,6,2,2,6,1,2,2,6,2,1,2,2,2,11,6,2,11,10,6,10,2,1,5,2,2,25,2,2,2,9,2,25,1,2,6,11,13,165,205,201,201,204,201,131, +2,2,2,6,1,1,1,2,1,2,11,7,2,2,2,10,2,13,10,10,2,5,2,1,2,2,5,11,14,21,15,21,22,29,13,14,11,6,2,5,2,5,1,2,2,2,13,5,21,22,117,29,2,30,17,2,6,14,20,15,22,31,32,33,29,29,21,13,14,13,14,16,47,106,31,16,24,17,33,29,29,15,13,29,11,0,29,11,2,6,6,2,6,6,7,7,13,7,0,6,2,2,5,6,1,5,6,1,2,2,2,6,5,7,6,2,7,7,7,7,16,6,7,8,11,11,13,11,17,6,6,2,2,1,1,1,1,2,2,2,5,2,5,2,2,2,13,5,12,7,2,6,2,2,1,1,1,2,7,5,2,2,1,2,13,13,7,17,13,2,2,2,1,1,5,2,1,1,9,40,2,5,2,1,1,1,1,1,2,2,1,2,5,1,2,2,5,1,2,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,2,1,2,2,2,2,11,11,6,6,6,2,6,5,11,2,7,13,12,1,1,2,5,1,9,7,7,1,2,2,21,1,1,2,1,2,6,2,5,2,5,2,2,5,1,6,2,5,1,1,2,6,2,11,2,5,11,10,5,10,6,1,2,2,5,2,2,2,5,2,2,5,2,2,9,11,13,13,205,201,201,204,201,201,74, +2,5,1,1,6,2,1,5,2,7,13,11,2,5,7,29,14,15,13,21,13,5,5,2,6,1,2,5,7,21,21,29,22,22,13,29,7,2,2,2,2,2,6,2,2,12,7,21,12,29,130,18,15,120,6,6,1,14,22,18,22,122,37,29,16,16,13,14,13,15,47,106,43,18,15,24,24,29,33,18,30,22,11,8,8,1,16,7,1,11,2,2,2,7,6,7,13,2,2,2,5,2,2,2,12,7,2,13,2,5,7,2,13,7,6,6,7,13,8,6,16,6,13,17,13,11,11,11,11,11,6,6,2,0,1,1,1,1,1,5,2,2,2,2,6,1,14,6,2,2,1,2,2,6,1,1,2,7,7,2,2,13,1,5,13,14,7,7,13,2,2,7,5,5,65,7,2,2,1,9,9,51,9,10,59,1,2,1,2,1,5,2,1,2,5,2,2,5,2,5,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,6,5,2,5,2,11,2,10,6,6,7,11,6,2,2,7,11,11,10,2,2,2,5,2,6,2,10,5,2,2,25,51,11,1,1,5,2,2,5,2,12,2,5,2,2,6,1,2,2,6,1,6,1,2,25,2,11,6,2,9,11,5,2,2,26,38,64,10,5,2,5,2,2,9,5,6,26,8,130,205,204,201,201,200,201,74, +2,1,1,6,1,1,1,2,5,10,7,12,5,2,12,21,14,14,14,13,13,10,10,12,1,5,6,5,12,21,13,16,29,22,13,29,2,2,2,5,2,2,14,14,13,2,12,16,29,36,47,37,106,33,11,2,2,21,22,30,18,132,24,33,30,22,29,13,29,47,46,17,109,33,22,33,33,17,33,33,30,17,13,15,11,6,16,11,2,2,2,6,2,13,7,13,7,2,2,2,5,2,5,2,6,7,2,2,2,2,13,1,7,6,2,7,13,7,11,13,6,6,7,11,11,17,13,8,8,11,11,2,6,1,1,2,1,2,2,2,2,2,2,7,2,13,2,2,2,1,1,2,2,2,1,1,2,2,6,1,6,2,2,13,13,6,6,13,7,2,12,2,2,1,71,72,40,1,1,2,2,2,5,57,27,1,1,2,6,2,2,2,5,2,2,6,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,11,2,11,6,8,11,6,2,6,6,5,12,1,6,1,2,2,2,10,2,13,11,1,2,2,5,2,5,2,2,2,5,2,5,2,2,5,2,5,2,2,5,2,2,2,2,5,2,2,9,2,11,1,10,2,2,5,2,9,2,2,2,9,2,9,2,5,10,2,12,8,166,206,200,201,204,204,201,201,69, +2,6,1,2,1,1,1,2,13,13,13,5,2,2,16,29,26,2,21,15,12,10,5,12,10,5,2,12,21,29,13,13,16,22,29,13,1,6,2,2,2,13,13,2,2,2,13,21,13,23,43,31,31,11,8,6,6,6,16,21,29,47,46,24,31,21,22,11,34,47,31,31,46,105,29,46,18,31,33,18,30,17,11,17,8,2,14,11,2,6,6,1,7,6,11,13,7,6,6,1,2,2,2,2,5,2,5,6,2,6,2,2,2,6,6,6,7,11,11,13,13,11,7,11,17,11,11,8,7,7,6,2,6,2,1,2,1,2,2,2,2,12,6,7,2,2,2,6,2,1,0,2,2,5,1,1,2,5,2,6,1,2,1,2,6,6,7,7,13,2,1,2,1,64,40,5,9,1,1,1,40,25,38,6,1,0,1,1,2,1,2,6,2,2,5,2,5,1,2,1,5,1,2,2,5,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,5,2,1,5,2,6,6,6,7,11,11,13,7,6,6,2,11,2,6,1,2,2,2,5,1,13,11,2,2,2,6,2,2,1,2,5,2,2,2,2,5,12,7,2,12,1,5,2,5,2,5,2,2,2,11,2,11,10,9,10,5,2,2,2,6,1,5,2,2,6,2,5,2,9,9,21,176,205,201,201,201,201,201,201,204,131, +2,2,1,5,1,2,2,10,13,14,13,2,2,13,21,12,12,2,14,21,6,2,7,10,5,13,7,16,13,14,13,13,16,24,16,13,6,1,5,2,2,2,7,2,13,7,11,14,21,36,30,18,13,6,11,2,2,11,16,22,30,34,109,110,109,31,8,32,123,31,24,18,31,33,33,113,44,8,33,18,31,30,13,15,11,2,29,2,2,2,7,13,5,2,7,11,13,2,2,2,2,6,1,6,1,6,2,6,2,7,6,6,12,2,11,7,6,13,11,11,29,7,13,11,17,11,11,11,11,11,6,7,2,2,6,2,1,5,1,2,7,13,11,5,1,1,1,2,7,2,1,1,2,2,1,1,2,2,2,1,1,5,2,13,7,6,7,7,7,6,1,6,25,9,2,2,1,1,1,5,27,60,1,1,1,1,1,1,1,2,1,2,2,9,51,2,2,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,2,2,6,2,11,2,2,7,6,11,8,11,6,10,11,7,6,2,2,5,1,2,5,2,11,11,7,6,6,5,2,2,1,6,2,9,2,5,9,25,9,1,2,13,10,6,2,2,2,1,2,5,2,5,2,2,10,12,10,2,2,2,13,26,2,6,2,5,0,2,2,2,9,13,2,121,205,198,204,201,198,201,204,201,198,74, +2,5,2,2,1,2,6,7,13,11,11,7,5,5,10,13,12,2,13,11,2,7,7,6,2,13,13,7,11,6,7,13,13,17,29,6,2,2,6,2,5,2,11,2,13,16,10,12,16,13,36,17,11,11,6,11,29,22,17,13,13,22,34,110,114,24,30,34,20,24,20,18,106,33,33,33,18,13,109,24,33,18,11,15,6,11,14,2,6,6,7,6,6,7,13,13,7,2,2,2,5,1,5,7,11,7,7,7,2,11,2,7,11,2,13,2,11,11,11,8,8,11,11,13,21,28,17,13,7,13,11,6,2,6,1,2,2,2,2,5,7,7,7,2,1,1,2,7,2,2,1,1,2,6,1,1,2,5,2,2,1,2,7,6,13,6,7,7,13,1,5,2,2,2,1,2,2,1,1,2,1,27,40,2,1,1,1,1,1,2,6,1,6,1,2,2,1,1,1,1,2,2,2,5,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,2,1,1,2,2,6,1,2,2,11,6,6,11,13,8,11,6,2,12,11,7,6,1,2,2,2,2,2,13,11,11,1,9,2,5,2,5,1,9,2,25,7,2,2,5,9,10,10,5,2,5,2,5,1,1,1,1,2,2,11,2,2,6,1,2,5,10,1,2,2,51,76,91,40,2,2,9,2,29,206,201,200,201,198,204,201,204,204,201,74, +2,1,2,6,1,6,1,10,11,13,7,13,5,2,5,13,2,2,21,13,6,6,7,11,6,7,6,2,2,6,7,6,14,36,11,6,6,2,2,2,2,2,7,7,21,16,2,7,12,30,130,8,13,6,16,21,13,29,14,29,14,30,34,109,122,22,17,46,33,33,18,33,33,24,24,24,17,11,110,24,24,18,13,15,13,16,13,11,2,6,7,7,7,6,7,7,2,6,2,2,6,2,5,5,2,7,7,6,6,7,11,13,6,2,2,2,11,13,11,7,13,6,13,16,13,29,29,13,17,11,11,6,6,2,5,2,5,1,2,2,5,6,1,1,1,1,2,6,13,1,1,2,5,2,1,1,2,1,1,1,1,1,2,7,11,7,6,6,2,2,2,2,2,1,2,26,5,1,1,1,1,5,9,0,1,1,1,1,1,1,1,7,2,5,1,2,2,1,1,1,1,1,2,2,2,9,2,2,2,1,1,1,1,1,1,1,2,1,1,2,2,1,1,1,1,1,1,1,1,2,1,2,1,10,1,2,5,2,6,11,2,7,11,6,11,11,2,11,7,11,11,6,6,2,2,2,10,11,13,11,6,2,5,9,2,1,2,5,5,5,9,5,9,2,5,2,25,2,11,2,2,9,2,2,2,5,2,2,9,11,2,2,2,5,2,2,9,11,5,2,2,12,2,6,10,12,35,67,192,204,204,200,198,204,201,198,200,200,201,74, +2,6,1,2,6,1,5,11,5,10,13,13,11,11,5,2,2,13,13,13,11,11,13,8,7,7,2,6,6,2,6,13,16,16,21,7,2,2,5,2,5,2,2,13,16,30,30,17,29,22,47,17,8,13,116,16,21,22,14,30,11,16,43,110,132,18,43,108,18,24,24,33,24,109,33,24,11,11,114,33,24,44,7,18,22,17,11,2,2,11,6,6,2,13,7,13,6,2,7,2,2,2,2,2,5,6,1,2,2,5,2,13,2,2,6,12,11,14,11,13,17,1,13,22,13,30,16,7,21,13,11,7,2,2,1,2,2,1,2,14,35,1,0,1,1,1,2,7,2,2,1,2,2,2,1,0,1,1,2,1,1,2,2,13,6,2,7,2,6,2,6,2,2,5,2,2,1,1,1,1,2,1,1,1,1,1,1,60,131,13,13,2,2,2,2,2,1,1,1,1,1,2,5,2,2,1,2,1,1,1,1,1,1,1,1,2,1,5,1,2,1,1,2,1,1,1,1,1,1,2,5,2,1,2,2,6,1,2,13,11,2,11,13,11,8,11,7,7,11,10,11,2,6,2,2,13,11,5,2,2,11,10,2,2,5,1,2,9,5,2,5,9,2,25,2,2,2,5,2,6,2,2,2,5,1,2,5,5,6,1,2,2,6,1,5,2,5,9,2,25,2,2,2,2,11,192,206,204,200,200,200,199,199,200,198,200,200,195,200,74, +2,2,5,2,2,2,5,10,7,13,7,13,17,21,11,2,2,2,21,11,11,13,6,11,6,8,2,6,7,13,13,14,17,30,13,6,6,2,2,2,2,2,12,13,30,47,47,34,36,119,114,8,13,20,20,13,13,11,16,13,14,29,16,24,20,15,22,108,20,33,18,111,109,109,20,31,13,6,109,24,33,18,11,29,18,14,13,2,7,7,7,13,7,7,13,7,2,13,2,2,6,2,13,5,7,12,12,13,2,2,2,11,2,2,2,2,11,15,13,13,11,2,16,16,13,16,29,6,16,8,7,6,6,2,2,6,1,1,2,16,12,1,1,1,1,0,2,7,6,1,0,1,5,2,2,1,1,1,1,1,1,1,2,7,7,13,6,6,1,2,2,2,5,2,2,1,1,1,1,2,6,0,1,1,1,1,2,9,11,1,2,2,6,2,1,1,1,1,1,1,1,1,2,2,5,2,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,2,2,5,2,9,6,6,7,2,6,11,11,7,7,7,11,2,10,2,13,2,2,2,1,2,2,6,2,11,5,7,5,9,2,5,9,9,5,9,2,5,2,2,5,2,9,5,10,1,2,6,2,2,6,9,2,5,5,78,7,11,1,2,6,2,9,2,5,11,51,7,2,11,166,201,198,200,198,196,199,199,199,199,196,199,195,196,199,131, +2,5,2,2,5,2,2,10,21,11,7,13,13,21,6,1,5,13,13,7,7,11,7,11,17,6,2,13,13,14,13,13,22,16,11,6,2,2,5,2,2,5,14,45,117,119,119,32,47,47,125,29,11,24,114,26,6,7,13,7,22,16,16,45,122,18,22,111,33,109,24,114,111,109,31,18,11,11,114,24,37,18,11,33,33,11,13,2,11,7,13,7,6,13,21,11,2,7,2,7,2,2,2,13,11,13,2,2,2,5,2,5,2,5,2,7,17,11,11,7,13,1,13,17,11,21,17,6,17,11,11,6,2,1,2,2,1,1,2,10,7,2,2,1,1,1,2,7,2,2,1,1,2,2,1,1,1,1,1,2,1,1,2,2,6,7,7,2,2,12,1,26,10,1,1,1,1,1,1,1,25,26,2,1,1,2,1,1,5,2,2,11,2,2,2,9,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,5,2,1,2,1,2,2,2,2,10,6,2,11,11,6,11,8,11,13,11,6,7,7,2,11,1,1,1,11,2,2,5,9,2,2,5,2,2,9,2,2,2,2,2,6,2,2,2,2,10,2,11,2,2,2,2,2,2,1,12,69,200,65,74,70,5,1,9,2,10,13,60,35,64,78,188,204,204,200,200,200,198,200,196,195,200,199,199,198,199,200,74, +2,1,5,2,2,5,5,13,11,13,5,7,13,7,2,2,13,12,7,13,13,11,8,8,7,11,2,13,6,11,13,22,31,17,11,6,6,2,2,2,2,2,29,106,32,30,34,30,117,140,123,19,8,34,105,1,11,6,29,29,30,24,30,45,34,11,22,106,33,33,24,118,114,109,33,18,13,11,114,108,109,16,13,46,18,11,21,2,6,11,7,7,13,17,16,2,11,2,2,13,17,6,5,26,2,5,2,6,2,2,7,2,2,2,11,13,13,13,7,13,6,1,7,13,16,13,16,11,13,11,13,2,6,2,2,5,1,1,2,22,7,6,0,1,1,1,2,7,6,2,1,2,1,1,1,1,1,1,2,1,1,1,2,7,6,6,6,2,2,2,1,21,1,1,1,1,1,1,0,1,2,1,1,1,1,5,2,2,2,2,5,2,2,5,2,2,1,1,1,1,1,2,1,1,1,2,2,5,1,1,1,1,1,1,2,1,1,2,1,1,1,2,1,1,1,1,1,1,2,1,5,2,2,5,2,2,6,6,6,6,6,7,7,7,11,11,13,11,5,2,12,10,2,1,1,5,1,9,9,2,5,2,5,2,2,6,2,5,11,2,2,2,2,2,2,6,6,2,2,11,2,2,11,2,6,6,134,204,200,204,196,190,134,1,13,29,5,11,192,131,200,204,204,204,198,201,198,200,203,199,196,179,200,179,200,179,199,198,179,74, +2,1,2,5,10,2,10,10,7,13,10,7,21,11,2,6,5,13,6,11,13,13,11,13,11,17,2,7,7,7,29,24,24,16,11,13,2,2,2,6,2,11,22,29,22,30,47,36,45,147,125,31,8,136,33,11,2,6,11,13,16,16,13,33,106,32,43,110,33,33,24,111,114,111,24,15,11,15,118,33,110,11,29,34,109,13,2,2,11,11,11,13,14,22,13,7,6,2,6,21,29,13,13,2,2,2,5,2,5,2,6,2,5,2,11,13,13,11,11,13,2,1,11,13,16,21,29,7,11,11,11,6,2,2,6,1,1,1,12,14,6,2,1,1,1,1,2,6,1,1,1,6,1,1,1,1,1,1,1,1,1,1,1,1,6,7,2,2,6,1,26,10,12,10,1,1,1,1,1,1,5,2,1,1,2,2,2,2,6,1,2,2,2,10,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,1,1,1,2,1,2,1,2,1,6,1,5,2,2,11,11,6,6,6,6,6,7,13,11,7,6,10,10,2,2,1,1,2,9,5,5,2,6,9,2,9,2,2,2,2,2,11,2,6,43,67,155,78,28,13,167,67,16,7,13,22,50,198,200,200,199,199,195,200,204,178,204,201,30,175,204,201,198,204,199,200,200,200,200,200,200,198,198,199,194,198,179,198,202,194,198,157, +2,2,6,2,2,2,2,5,12,11,13,13,13,11,5,2,5,2,6,11,13,11,7,13,11,11,2,7,11,17,29,30,24,11,7,7,6,2,2,2,7,23,16,16,22,36,45,30,116,145,109,18,16,18,24,11,2,2,13,29,13,22,30,47,119,32,36,34,33,109,109,114,111,109,32,17,13,13,111,20,110,13,18,109,20,11,2,1,11,15,15,10,16,24,13,13,6,2,6,13,16,21,14,2,6,12,2,2,2,5,1,2,2,2,13,13,7,11,14,17,2,1,7,15,17,16,13,11,11,11,11,11,2,6,1,2,1,1,14,11,2,5,0,1,1,1,2,2,2,2,41,2,2,6,1,1,2,1,1,1,1,1,1,2,11,7,35,40,2,60,67,2,10,2,1,1,2,1,1,1,1,2,2,1,2,6,9,2,2,11,6,2,2,2,2,2,0,1,1,1,0,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,2,2,6,1,2,2,2,11,6,6,11,8,11,11,13,2,2,10,11,2,2,1,1,2,5,2,5,2,2,2,5,5,2,2,5,6,65,78,65,167,199,179,177,199,194,170,202,198,195,176,195,199,203,179,198,179,200,198,179,200,195,199,200,200,200,204,196,200,200,198,200,198,204,200,200,198,200,199,199,198,198,194,198,198,198,198,179,74, +1,1,2,2,5,2,6,5,13,14,13,10,11,13,2,2,11,2,11,7,11,7,13,11,13,13,2,11,11,14,32,33,29,110,105,15,2,2,6,7,16,29,16,17,22,22,22,34,126,146,114,18,8,8,24,8,11,6,6,14,29,16,13,34,34,46,17,34,33,24,33,118,114,108,109,15,2,7,122,111,111,11,22,22,24,11,6,0,13,11,15,15,22,22,13,6,2,2,13,13,13,29,7,2,2,2,5,6,2,2,5,2,2,13,7,7,29,17,29,21,2,2,13,16,16,14,13,13,8,13,13,11,2,1,2,6,1,1,13,7,2,2,1,1,1,1,2,13,6,0,2,1,6,1,2,0,2,0,2,2,2,2,2,11,2,21,38,6,1,40,51,6,2,1,1,1,1,1,1,1,2,1,1,2,1,2,2,6,1,5,6,11,2,2,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,1,5,1,1,1,1,1,1,1,1,1,1,1,2,2,2,6,2,5,2,2,5,2,6,6,6,7,11,11,11,8,2,11,11,13,2,11,2,1,5,2,2,2,2,2,2,29,175,7,66,190,75,2,169,179,194,169,171,194,173,171,194,194,194,173,179,194,173,179,194,179,179,198,198,179,198,198,179,196,199,199,199,200,198,200,199,200,200,203,200,198,200,202,196,198,179,198,179,198,198,179,198,177,179,131, +1,1,5,2,2,5,11,6,7,13,7,11,7,10,6,5,7,2,2,11,7,7,13,13,7,7,2,13,11,16,34,36,46,119,116,11,6,2,6,29,16,30,16,22,11,106,110,114,126,150,115,8,8,22,19,31,31,2,16,30,30,32,22,22,37,109,14,33,31,33,109,111,111,109,111,11,11,29,111,122,109,6,6,110,111,11,0,2,11,16,15,22,30,13,21,11,6,6,7,14,22,30,2,5,5,5,7,2,2,2,6,2,5,13,13,14,17,29,29,14,5,1,2,13,13,29,14,13,15,13,11,6,6,2,6,1,1,1,14,13,1,1,1,1,1,2,6,5,2,6,2,2,2,64,76,1,1,1,1,1,1,1,2,11,2,12,2,2,72,12,9,1,2,1,1,1,1,1,1,1,1,9,5,2,2,5,2,2,6,6,7,2,5,2,2,5,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,2,2,2,2,6,1,6,6,11,6,6,11,6,7,7,2,6,8,11,13,6,2,2,2,2,2,6,2,6,21,168,179,168,173,179,158,66,177,173,171,171,177,169,194,177,179,179,177,194,173,194,179,179,179,194,179,198,179,202,195,179,200,198,199,179,199,199,200,199,196,198,200,200,196,199,199,195,198,198,198,198,198,202,179,198,179,198,179,74, +1,1,2,2,6,1,11,6,13,13,13,11,7,7,2,10,11,6,2,13,13,13,13,11,13,7,2,7,14,18,37,22,110,132,120,11,2,13,16,34,18,37,29,23,106,138,106,136,138,146,113,6,13,20,15,24,122,6,22,18,29,29,22,29,34,33,14,17,31,34,114,114,116,106,111,29,3,29,109,125,109,6,14,126,117,13,2,0,11,17,22,16,11,7,11,2,2,2,13,16,30,30,2,2,5,5,5,12,2,5,2,2,13,11,7,14,23,29,16,2,2,5,2,13,15,14,17,13,17,5,11,13,7,6,1,2,1,2,13,1,2,1,1,1,2,2,2,13,6,2,2,2,5,1,1,1,2,1,1,1,1,1,7,13,2,6,2,2,5,1,2,5,1,5,1,1,1,1,1,1,1,1,2,5,2,2,2,1,2,10,10,13,2,5,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,6,1,2,1,1,1,1,1,1,2,6,1,5,2,5,2,2,2,2,11,11,11,6,11,6,11,6,6,7,6,2,6,5,2,2,1,6,5,2,11,2,155,171,162,194,171,168,177,177,171,169,194,168,168,171,177,169,194,171,177,194,194,177,194,194,173,179,198,194,195,179,198,198,179,196,198,199,198,179,198,199,200,199,199,200,198,200,196,199,195,198,198,179,198,179,199,179,198,179,194,74, +1,2,2,5,2,2,10,6,13,11,10,5,11,5,2,13,13,2,11,13,7,13,7,14,21,7,2,13,16,22,46,16,46,126,106,6,2,7,7,29,16,32,15,132,119,126,124,144,140,152,19,6,8,19,22,18,21,2,29,22,22,30,17,14,30,24,13,17,110,109,109,111,109,109,109,15,11,13,108,132,116,6,110,126,122,13,2,11,14,22,45,2,5,13,2,13,2,7,13,29,32,21,1,2,6,2,2,2,2,2,2,2,21,7,13,29,16,23,2,1,2,2,2,13,13,13,14,11,11,8,13,13,6,2,2,6,2,2,2,5,6,1,1,1,2,5,2,13,7,6,1,2,7,6,2,5,5,1,1,1,1,2,13,11,2,2,2,2,1,1,2,9,2,1,1,1,1,1,1,1,1,2,1,2,10,5,5,2,2,10,7,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,5,1,2,1,1,1,1,5,2,1,2,2,6,1,2,5,2,5,2,6,2,13,6,11,13,11,11,11,2,2,13,2,2,2,6,6,2,2,11,66,171,194,162,168,169,194,171,171,171,177,168,171,171,171,175,171,169,194,168,173,168,171,179,194,194,179,198,179,194,198,179,202,195,194,198,198,179,198,202,179,198,200,199,199,199,199,199,199,198,199,179,202,198,198,179,198,202,179,179,74, +1,5,2,2,1,2,5,5,10,11,7,10,7,5,5,21,11,2,5,13,13,13,14,13,13,7,6,13,14,32,43,17,48,106,33,11,6,13,11,30,29,16,8,106,132,138,149,140,138,153,19,6,8,126,114,33,11,2,7,16,36,17,29,22,34,15,22,22,34,33,109,114,119,33,24,8,6,13,109,109,44,2,119,123,114,17,29,2,21,30,11,1,2,7,6,7,7,12,13,21,32,11,2,2,2,2,6,2,11,2,6,5,7,7,7,29,22,16,0,2,2,2,11,13,13,17,13,8,6,14,11,13,6,1,6,1,7,2,13,2,2,1,1,1,2,2,2,14,7,2,1,2,13,1,1,2,6,2,5,2,1,1,11,7,11,6,2,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,2,5,2,2,5,2,11,6,2,2,6,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,6,1,5,2,2,2,6,2,2,2,2,11,7,7,7,6,14,11,6,6,2,6,1,2,6,11,11,6,6,6,42,194,169,168,162,171,162,168,162,168,171,173,169,171,168,171,171,162,168,168,171,194,168,194,168,169,179,177,179,179,198,198,179,198,179,195,179,179,198,195,194,179,195,179,202,195,202,179,200,195,198,198,198,179,199,179,198,198,179,179,179,69, +1,2,2,5,1,1,2,5,12,11,7,10,13,2,5,13,11,11,2,14,13,13,13,13,7,5,2,13,29,36,22,16,18,119,120,11,7,7,7,34,11,17,29,119,123,125,140,138,140,148,4,13,15,126,33,13,13,29,14,29,32,29,13,13,32,11,13,24,110,106,106,114,116,110,18,13,6,15,111,132,18,11,116,119,111,15,29,6,6,13,11,2,2,2,2,5,13,7,11,30,30,2,12,2,5,5,1,2,21,2,2,2,13,13,14,30,30,29,1,1,1,2,12,11,8,13,11,13,13,13,11,13,2,2,2,5,2,13,6,2,2,2,1,1,2,5,5,6,7,6,2,2,2,2,6,1,2,7,7,6,1,2,5,11,2,2,6,1,1,1,1,1,1,1,1,2,5,1,1,1,1,2,1,2,2,2,5,2,2,9,6,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,2,6,1,2,1,5,1,5,2,2,11,2,11,2,10,10,13,10,7,11,1,2,2,6,11,11,11,11,2,69,169,162,162,167,169,169,168,171,175,169,171,168,168,171,171,162,169,168,168,168,168,169,168,171,194,177,175,171,177,179,179,195,202,179,198,179,179,179,198,179,179,198,198,198,179,198,198,198,177,198,194,179,179,198,179,198,198,179,198,179,194,74, +1,2,6,6,1,6,5,10,2,2,5,11,5,2,13,13,13,11,6,13,14,14,16,16,13,29,7,16,16,33,13,13,22,106,119,15,7,11,13,22,7,17,22,133,116,116,137,144,139,150,8,13,16,122,29,11,13,16,16,16,16,13,5,6,109,6,7,34,110,116,34,123,106,111,24,11,6,15,111,141,8,13,122,122,116,22,18,2,6,13,6,2,2,5,2,5,2,10,16,43,6,7,6,2,2,2,6,2,12,2,6,5,14,7,16,30,23,13,2,1,2,1,2,13,11,11,16,6,13,13,11,13,6,1,2,2,2,5,2,7,1,1,2,6,2,2,11,6,2,2,5,2,11,2,1,13,5,11,13,6,2,6,2,21,36,21,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,2,5,5,11,2,2,2,10,6,7,2,1,1,1,1,1,1,1,1,26,5,1,1,1,1,1,1,1,1,5,2,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,2,5,2,2,6,2,2,5,2,10,10,5,11,13,13,6,5,10,2,11,11,11,15,11,2,6,66,169,166,162,169,162,168,162,169,162,162,162,171,171,168,168,169,168,168,168,177,162,168,168,177,162,171,171,169,177,194,194,177,177,179,202,179,179,179,179,177,198,202,179,177,199,179,198,179,179,179,179,179,179,179,173,195,179,195,202,179,179,177,74, +1,2,2,11,5,1,2,7,2,5,2,5,2,5,21,13,13,13,13,11,13,13,13,13,11,13,6,14,22,32,8,11,22,106,114,15,13,2,16,22,11,15,119,141,110,106,144,138,128,150,4,11,24,24,6,16,16,29,13,13,13,6,6,7,114,2,29,37,110,106,106,123,116,46,8,13,6,17,118,138,6,13,122,122,120,20,15,2,2,13,6,2,2,2,2,2,2,13,6,11,13,6,2,2,2,5,2,2,13,2,2,2,14,7,14,29,30,13,2,1,2,2,2,21,13,29,16,13,14,8,7,13,2,2,2,6,5,2,13,1,1,1,1,2,2,2,12,2,11,2,2,12,2,2,5,11,2,12,11,7,6,2,2,35,30,2,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,5,2,2,2,11,2,12,2,11,6,7,2,6,1,1,1,1,1,1,2,1,2,6,9,2,1,1,1,1,1,1,2,2,1,2,5,1,1,1,1,1,1,1,1,1,1,5,2,1,6,1,1,2,2,6,5,7,6,2,6,7,17,13,2,9,2,7,10,13,13,11,6,66,159,169,162,169,162,162,162,162,162,162,162,169,168,168,168,169,168,168,168,169,162,168,168,168,168,168,169,168,168,194,162,171,171,194,179,194,179,179,194,173,198,194,173,194,179,198,194,194,179,194,179,179,202,179,177,194,179,173,179,179,202,194,179,171,74, +1,2,5,2,2,2,6,5,5,2,1,2,10,12,11,11,13,13,17,11,11,11,13,13,6,11,2,29,16,33,13,13,33,116,116,31,17,6,22,16,7,37,144,139,110,117,141,127,138,150,4,6,17,24,11,22,16,7,13,13,7,6,2,14,111,2,34,109,47,122,33,47,116,22,17,6,2,22,116,126,1,22,122,122,116,33,7,11,2,6,6,2,6,2,2,6,2,13,13,13,13,2,7,2,5,2,2,2,13,2,2,6,2,6,7,13,22,11,6,1,2,1,2,15,13,11,7,6,13,13,13,11,2,2,5,1,2,2,13,2,1,1,2,5,2,5,2,6,2,6,7,6,2,2,6,5,6,7,13,13,7,7,13,7,2,2,5,2,1,1,1,1,1,1,1,5,2,1,1,1,1,2,2,2,6,2,5,2,7,6,7,6,11,6,6,0,6,1,1,1,1,1,1,1,2,51,2,1,1,1,1,1,5,2,5,2,1,2,2,2,1,2,1,1,1,1,1,2,1,2,2,2,2,6,1,5,1,2,2,2,6,6,21,16,11,10,5,9,11,1,13,10,13,42,168,162,162,162,167,169,168,162,167,169,169,167,168,162,162,162,168,162,168,162,171,162,171,162,168,168,162,162,171,171,162,168,171,171,177,171,177,194,194,177,194,179,179,194,173,179,177,179,179,173,194,179,194,177,194,173,179,177,179,179,179,194,179,169,173,74, +1,1,2,2,5,2,2,5,2,2,6,1,2,2,2,5,11,13,22,11,6,8,11,8,11,13,7,29,16,30,11,15,44,122,122,106,17,7,46,17,16,133,139,149,106,132,144,138,138,153,113,19,22,44,17,21,13,13,13,13,6,2,2,13,110,2,36,22,106,34,33,31,114,11,6,6,6,18,106,106,2,114,126,126,122,108,6,2,2,2,7,6,2,2,2,2,11,7,14,14,13,2,6,2,2,2,2,5,7,13,1,7,6,14,13,17,22,7,2,2,2,5,7,6,6,2,6,11,13,11,13,7,1,2,2,13,1,7,7,6,1,1,2,2,6,11,11,6,2,7,5,2,5,1,5,7,2,11,13,13,7,13,6,7,6,2,2,1,2,2,1,1,1,1,2,2,1,1,1,1,2,5,2,2,5,2,10,11,6,7,8,11,11,6,2,2,2,1,5,2,2,1,1,1,1,1,1,2,1,1,1,1,2,1,2,2,2,5,2,2,5,1,2,1,1,1,1,1,2,5,2,5,2,2,2,6,2,5,11,2,6,11,14,15,13,2,5,11,11,5,15,13,15,69,162,162,162,162,162,169,162,162,162,162,171,162,168,162,168,162,162,168,162,162,162,168,162,168,168,162,162,171,162,171,169,194,160,171,162,194,171,177,171,194,169,179,194,177,179,194,194,173,173,194,179,179,171,179,171,179,177,194,173,179,179,179,173,171,171,74, +2,5,2,5,10,27,21,7,2,5,2,6,2,5,2,2,13,11,16,11,6,13,13,13,13,11,6,17,16,22,13,17,34,119,120,111,17,6,109,18,30,130,144,133,119,132,144,149,142,150,115,147,113,13,13,13,13,16,29,14,7,6,6,22,8,13,116,24,116,110,46,139,108,8,13,2,15,18,46,6,11,123,138,132,123,109,11,6,6,6,11,6,2,6,6,2,11,7,17,15,13,2,2,6,2,13,2,2,7,6,6,2,6,7,7,22,32,6,2,2,1,2,2,7,2,6,11,13,11,7,13,6,1,2,6,2,5,11,7,2,1,2,2,2,13,13,14,8,2,7,6,2,2,2,5,2,13,13,11,13,11,11,14,2,5,2,2,5,2,5,1,1,2,1,1,1,1,1,2,1,2,1,5,2,2,7,13,11,11,13,11,11,17,6,2,6,1,1,1,0,2,1,6,0,1,1,2,51,2,0,1,1,2,6,1,5,1,1,1,2,2,5,1,2,1,1,1,1,1,2,2,2,2,5,2,2,2,2,9,13,6,14,13,21,26,10,27,11,11,6,11,49,166,169,162,159,162,162,162,162,162,168,169,162,168,168,160,175,169,162,168,162,162,168,162,168,162,169,162,168,168,162,171,162,194,162,194,171,177,162,168,171,169,194,171,173,177,171,177,171,179,179,177,194,179,179,194,179,177,179,179,194,173,179,173,171,177,171,162,74, +2,2,5,2,5,5,1,5,5,11,1,1,2,2,6,2,11,13,29,15,11,15,15,13,11,11,6,16,29,16,8,22,36,116,123,122,8,11,119,122,37,133,149,137,133,132,132,136,149,150,113,150,115,6,11,11,17,16,13,7,6,1,6,18,2,32,111,46,119,138,34,133,105,13,18,6,29,24,15,2,14,144,136,116,126,111,15,6,11,1,13,11,2,2,11,7,13,11,23,17,11,2,2,2,7,2,2,2,13,7,6,7,2,7,13,22,17,6,2,2,1,2,7,2,2,13,7,13,13,11,13,2,2,2,13,2,2,13,6,2,2,2,2,6,7,13,6,14,7,6,2,2,2,2,5,6,7,13,13,11,11,7,11,2,2,6,2,2,1,2,1,1,1,2,1,1,1,1,1,1,1,2,2,5,11,11,11,11,6,11,13,11,8,11,2,2,2,2,72,72,73,27,38,10,1,1,2,27,25,10,1,1,1,2,2,2,6,2,5,2,6,1,1,1,1,1,1,1,2,6,1,5,2,2,2,11,11,10,11,2,21,7,13,7,10,5,10,11,40,155,168,168,162,159,162,162,169,159,162,162,168,162,168,168,168,162,171,169,162,162,168,169,162,162,168,168,168,168,168,168,162,171,162,168,162,168,169,169,162,171,162,167,168,168,168,171,168,168,171,169,171,179,177,194,173,169,179,173,194,169,173,179,194,179,194,173,194,173,162,74, +5,1,1,2,5,2,6,10,7,13,2,1,5,2,2,2,2,13,17,22,6,11,15,13,11,11,6,16,17,17,6,33,109,132,116,125,17,6,123,122,116,132,130,133,126,126,133,144,150,153,115,150,114,2,6,6,7,7,6,2,6,6,2,7,2,106,22,114,132,123,34,122,114,33,33,2,33,109,15,2,22,138,140,150,126,29,8,2,2,2,11,11,2,2,5,11,13,13,21,2,2,2,6,2,7,2,6,2,1,11,2,6,5,7,13,22,11,11,6,1,2,2,6,7,12,2,6,13,13,13,13,6,6,7,5,2,2,2,12,2,1,2,7,7,7,6,13,7,7,13,2,5,1,1,12,6,7,11,13,7,6,11,6,2,5,2,2,5,2,2,5,2,1,1,1,1,1,1,1,1,2,5,2,2,2,13,11,11,6,13,11,17,15,11,6,2,5,1,9,25,9,38,51,38,51,10,1,9,25,9,1,5,2,2,1,5,2,2,2,2,2,2,1,1,2,1,1,2,5,2,2,2,5,2,2,11,10,7,11,2,11,13,10,10,28,11,17,43,169,162,160,162,162,162,162,162,160,169,162,162,162,162,167,169,169,162,162,162,168,168,169,169,169,169,169,169,168,168,168,168,162,169,162,162,169,162,167,169,169,162,171,162,162,162,168,169,162,168,169,173,162,173,179,177,194,194,171,177,171,177,194,169,179,173,179,171,173,171,168,74, +2,6,2,5,5,1,2,5,5,2,1,2,2,5,2,5,6,13,22,15,11,17,8,7,13,11,16,43,17,29,13,34,34,119,110,132,18,11,117,119,34,130,132,133,150,123,133,144,150,152,143,148,105,6,6,6,6,6,6,6,2,6,6,6,16,123,18,132,114,123,144,125,114,34,106,6,34,114,15,2,34,148,144,124,114,8,11,2,2,6,16,6,2,6,7,13,11,7,2,6,7,6,1,7,6,2,13,6,13,7,5,7,6,13,12,8,13,6,2,6,2,1,7,2,2,2,11,13,13,16,7,13,6,2,7,6,2,2,13,1,2,2,13,11,6,8,7,7,7,7,2,2,2,1,5,7,7,10,7,11,11,11,6,2,2,2,5,2,2,6,2,5,1,1,1,1,2,1,1,2,5,2,2,5,2,11,11,6,13,8,13,8,17,8,2,2,2,2,1,2,27,10,1,1,1,1,1,10,1,1,2,2,5,2,2,2,2,2,5,2,2,5,2,2,5,2,1,2,2,2,1,6,2,5,2,6,10,9,11,6,13,10,21,13,14,11,22,169,160,160,162,160,162,169,167,160,167,160,168,162,162,171,162,168,162,168,168,169,169,162,168,168,168,169,162,168,168,171,162,168,162,162,162,162,162,162,162,162,171,169,162,162,162,162,167,171,162,171,162,171,171,173,171,169,177,194,179,177,171,169,177,173,194,173,173,194,171,173,169,74, +2,1,2,6,2,2,5,2,5,2,1,5,2,6,1,2,7,13,17,15,5,13,15,8,13,13,36,109,32,16,16,47,46,106,110,126,31,13,106,132,129,123,136,130,136,119,130,139,146,153,143,143,113,11,17,8,11,6,6,6,6,2,6,2,110,116,31,123,126,140,144,136,126,116,108,7,32,110,31,2,106,138,138,122,110,17,2,6,2,21,17,11,1,2,11,16,13,11,6,7,7,2,2,2,7,7,7,2,6,2,13,1,7,13,8,13,7,11,6,2,6,6,2,2,13,7,13,14,11,8,6,14,6,1,12,1,2,13,6,7,2,5,7,13,7,13,13,8,6,2,2,2,2,2,2,2,12,11,6,13,8,17,6,2,2,5,2,2,6,1,1,2,2,1,1,1,1,1,1,1,2,2,5,2,5,11,13,15,13,17,11,13,17,11,6,1,2,5,2,1,1,1,5,1,2,2,1,1,1,2,5,2,2,2,1,6,5,1,2,2,5,2,5,2,2,2,1,2,6,1,1,2,2,2,2,5,2,2,5,11,10,6,21,28,15,64,155,162,169,166,162,162,162,167,169,162,168,162,162,169,162,162,168,162,168,162,169,169,171,168,168,171,162,169,171,168,171,168,168,162,162,171,162,162,162,162,162,168,169,162,171,162,167,169,162,162,167,162,168,162,175,169,171,171,177,194,169,173,171,173,171,177,171,173,171,169,177,194,162,74, +1,2,1,2,2,5,5,1,6,2,1,2,2,2,2,6,13,11,15,33,8,14,14,13,13,16,109,33,31,13,29,34,34,126,31,126,109,15,46,132,119,137,137,141,120,132,117,133,153,150,150,142,113,17,122,17,6,6,7,6,2,2,7,6,123,122,106,126,116,139,138,122,122,119,111,16,109,132,109,6,126,138,138,126,114,24,19,15,18,24,18,2,6,7,13,13,13,2,2,7,2,2,6,2,6,11,7,6,7,2,2,13,6,7,11,13,7,13,6,2,2,13,1,6,2,7,11,13,13,11,11,2,2,2,13,2,5,11,7,13,17,11,13,11,6,7,7,7,6,6,2,1,2,2,2,13,11,13,13,11,7,17,7,2,6,2,2,5,1,1,1,1,1,2,9,2,1,1,1,5,1,6,1,6,2,10,11,15,17,15,8,17,17,15,2,2,2,2,2,60,5,2,1,9,38,25,1,6,1,1,2,6,2,5,1,2,2,2,5,2,6,5,2,10,2,13,11,2,2,6,2,2,5,2,5,2,5,2,2,13,15,157,168,169,162,169,160,162,160,169,162,168,162,162,162,162,162,162,162,162,167,162,162,168,168,168,171,171,171,162,169,177,162,194,162,168,168,162,168,169,162,162,162,168,167,169,162,167,162,162,162,162,168,162,168,168,162,171,162,171,162,168,168,171,171,169,194,177,173,171,171,169,179,173,171,171,177,169,168,74, +1,1,5,2,6,2,2,5,1,2,1,2,5,2,5,2,13,13,32,46,17,21,13,13,7,22,32,22,17,13,14,34,106,124,22,123,111,8,120,110,106,151,114,139,144,132,132,132,148,153,150,115,114,17,114,13,6,6,7,2,6,2,2,12,140,108,116,132,144,151,150,144,137,119,110,16,36,106,18,13,137,138,138,126,110,18,22,6,17,22,11,13,15,13,13,2,2,2,11,6,2,6,2,2,7,7,11,2,6,2,11,7,7,7,16,11,7,11,6,6,2,2,13,1,5,13,7,6,6,6,1,6,1,2,7,2,2,13,11,14,11,13,13,7,6,7,13,7,7,5,2,1,1,2,6,13,7,11,13,7,17,8,7,2,2,5,2,2,5,2,1,1,1,2,2,1,2,1,1,1,1,2,5,2,2,10,13,15,18,29,11,15,17,15,6,2,2,5,2,2,1,2,1,2,2,0,1,1,1,6,5,1,2,2,6,2,5,2,1,2,5,2,10,11,7,13,13,11,6,2,2,25,2,2,2,2,9,2,11,78,162,161,160,162,162,162,160,167,169,162,162,162,167,169,162,162,167,169,162,162,162,162,168,162,162,171,171,168,169,169,168,171,171,169,168,168,169,168,171,167,169,162,162,162,162,162,159,169,162,162,162,162,167,162,162,162,168,162,162,171,162,168,169,168,194,169,177,171,169,179,173,194,168,177,171,173,168,171,168,74, +2,1,2,1,2,2,6,2,2,1,1,1,2,2,2,2,11,13,20,36,33,10,11,11,13,22,33,36,32,13,30,24,37,123,8,119,114,33,119,34,119,145,114,122,137,136,133,139,153,146,142,127,18,33,18,6,2,6,2,2,2,6,2,34,24,129,138,144,149,146,153,138,119,120,8,36,15,33,8,22,144,138,147,126,114,6,18,13,13,16,13,117,29,11,13,11,2,13,7,7,6,2,7,14,7,7,13,1,12,6,10,13,10,11,13,13,11,11,13,7,7,2,2,2,13,13,7,7,2,6,13,1,5,10,13,1,10,7,13,13,13,7,11,7,2,7,2,13,2,2,6,1,1,1,12,7,7,7,7,13,13,17,2,6,2,2,2,5,2,1,1,1,1,2,2,5,1,1,1,1,1,7,2,2,5,11,11,17,15,8,13,17,31,15,2,2,2,2,5,51,11,1,1,1,1,1,1,1,2,2,2,2,5,2,2,2,2,6,1,2,10,7,13,13,11,13,13,21,13,6,2,2,2,2,6,10,5,10,11,87,160,159,162,160,159,162,162,162,162,167,169,162,162,162,162,168,162,168,168,169,169,169,162,162,162,162,168,168,168,169,162,168,168,168,162,167,168,162,162,162,162,167,169,162,162,162,162,162,167,171,162,168,162,162,175,162,162,162,162,162,168,168,162,168,169,171,171,169,194,173,194,171,177,171,173,173,171,173,168,74, +1,2,1,2,1,6,1,2,5,2,1,5,2,2,5,2,11,13,22,18,110,6,13,16,11,32,37,34,36,13,30,16,123,125,29,37,34,43,136,149,151,138,144,132,138,139,132,133,149,152,143,143,113,18,18,11,6,2,6,6,2,7,6,37,24,144,144,138,150,152,150,136,137,116,5,126,11,13,2,106,146,153,144,123,8,13,13,17,17,22,11,14,6,2,13,2,6,6,11,11,7,6,7,29,13,7,2,6,5,2,12,13,11,7,13,17,7,7,2,2,6,6,12,2,12,11,13,6,2,13,2,1,2,10,2,2,12,13,13,13,11,13,7,6,7,7,16,16,11,2,2,1,2,1,7,11,13,13,13,7,11,8,2,2,2,5,2,2,2,1,5,1,1,1,2,1,1,1,1,5,1,5,2,6,1,5,13,13,15,15,15,30,29,6,6,2,2,1,9,12,10,1,1,1,1,1,1,1,2,5,1,6,2,2,5,2,5,1,12,1,5,10,7,11,7,11,21,24,111,46,131,131,11,2,2,9,11,6,29,163,162,162,162,162,162,162,162,162,162,162,162,162,162,167,169,162,162,171,167,168,168,169,169,162,168,162,171,168,168,168,168,168,169,168,168,162,162,162,162,162,162,168,162,162,167,169,162,162,162,162,162,168,162,162,162,162,162,162,162,162,168,169,168,173,171,173,173,194,169,194,177,171,173,171,173,171,169,177,169,74, +2,5,1,2,1,2,2,10,2,1,2,2,2,6,2,12,1,14,36,114,119,6,21,29,14,29,34,45,17,29,23,45,132,122,33,31,44,132,122,132,183,138,149,123,147,132,132,138,154,145,150,146,127,20,31,6,6,2,2,2,6,1,2,33,24,144,144,149,149,144,147,139,137,116,16,31,8,8,11,136,144,144,123,122,11,14,14,29,22,16,11,2,2,2,2,40,41,41,40,27,40,73,73,49,2,2,2,2,6,2,11,7,13,13,11,6,11,6,2,2,2,5,2,2,13,13,7,7,5,2,2,2,2,5,2,2,13,13,13,13,11,6,7,13,6,7,15,6,6,2,2,2,1,2,7,11,13,13,6,6,11,17,2,2,6,2,2,5,1,2,2,9,2,2,2,1,1,1,1,2,1,2,5,1,2,5,11,8,17,15,18,30,30,11,2,38,6,1,1,1,1,1,5,2,2,1,1,2,2,2,6,1,2,5,2,2,2,6,10,2,5,9,13,13,26,29,120,45,180,173,198,202,30,2,5,2,2,42,156,162,162,161,168,168,162,162,168,168,169,162,169,162,168,162,168,168,162,162,162,162,167,169,169,162,162,162,162,162,168,169,168,162,168,162,162,169,162,162,167,162,162,162,162,162,162,162,167,169,162,162,162,162,168,162,162,162,162,168,162,169,171,171,162,177,171,171,177,171,177,177,173,171,177,173,171,173,171,171,171,74, +2,2,5,2,1,5,5,25,2,1,2,5,2,2,11,7,13,30,34,46,109,13,16,22,15,22,46,34,22,29,32,30,106,140,33,110,18,126,114,151,153,126,126,48,150,140,119,139,184,146,154,146,145,24,114,19,7,6,6,2,6,2,2,32,109,139,144,149,144,150,150,137,139,109,22,33,21,117,6,126,126,138,136,114,30,11,7,13,30,16,7,11,2,5,2,2,6,1,6,2,2,1,2,5,2,2,5,2,2,2,2,11,13,13,11,13,8,2,2,6,2,2,6,2,12,13,11,2,7,2,2,2,2,5,2,2,12,7,7,2,7,11,13,13,6,11,7,6,6,2,6,1,2,13,7,13,13,13,15,29,16,29,7,2,2,2,2,6,2,1,2,1,1,1,2,2,1,1,5,2,1,2,10,2,5,11,6,17,15,17,33,17,36,2,2,2,2,2,6,1,1,2,6,57,21,5,1,2,5,2,2,2,5,2,5,2,5,10,2,5,10,10,12,14,7,117,132,129,194,179,171,179,159,2,65,41,159,162,160,171,160,162,168,162,162,169,168,169,168,168,162,168,169,162,162,167,162,162,168,168,162,171,162,168,168,162,169,162,171,160,162,162,162,162,162,167,162,160,162,162,168,162,167,171,169,162,168,162,169,168,169,162,162,168,168,162,168,169,171,171,171,173,171,173,169,171,179,173,171,171,194,171,173,171,173,171,171,173,162,74, +2,5,2,2,1,2,2,2,1,1,2,2,5,2,7,13,21,29,22,34,33,8,29,32,16,36,117,46,29,22,17,22,120,132,114,116,120,110,144,153,183,144,120,117,153,144,106,133,150,153,153,146,150,115,33,8,6,2,2,6,6,6,2,117,126,133,147,150,149,144,147,139,144,31,22,34,18,109,1,126,126,128,125,126,109,24,29,6,2,6,11,13,2,2,1,2,2,6,1,2,6,2,2,2,1,1,2,1,5,2,5,11,11,11,8,15,13,6,2,2,2,2,7,2,13,11,7,7,7,13,1,1,2,10,2,2,21,11,11,6,13,13,14,11,11,13,11,11,8,2,6,2,2,11,7,13,13,11,18,29,18,20,11,6,2,5,2,2,2,6,1,1,1,1,1,2,2,1,2,1,5,2,2,5,2,2,11,8,15,29,31,24,17,6,2,6,6,2,2,1,1,1,2,1,1,1,1,2,2,5,2,6,2,2,2,2,2,21,2,6,5,1,21,164,18,119,141,176,179,179,173,173,171,194,173,173,169,171,162,162,162,162,162,171,169,171,169,162,168,169,168,168,162,162,162,168,162,162,162,168,162,168,168,168,168,162,171,162,167,169,168,162,169,160,162,162,160,167,169,169,171,169,171,162,171,177,168,177,171,162,168,171,162,173,162,171,171,173,194,171,194,179,171,179,194,177,171,177,194,173,179,194,173,173,171,177,171,171,169,74, +2,2,2,5,1,2,5,1,1,1,5,2,2,2,13,13,13,16,30,43,17,13,16,46,17,29,23,45,16,30,46,106,110,126,126,132,109,106,149,183,144,144,126,45,152,149,106,144,153,183,153,152,142,19,108,8,11,6,2,6,2,2,6,37,110,138,144,149,151,150,146,123,136,15,29,24,24,109,13,144,122,127,125,122,24,22,11,2,2,2,8,13,2,6,2,5,7,2,11,2,2,2,6,1,1,2,5,1,2,2,2,6,13,8,15,22,15,2,6,2,2,13,10,13,13,7,6,6,7,2,1,1,2,13,2,2,13,11,2,11,14,15,11,7,8,17,11,11,13,2,6,2,2,13,5,11,11,13,24,31,108,109,6,2,2,2,2,5,1,1,2,2,12,1,2,2,5,5,2,2,6,1,5,2,5,2,11,15,15,17,33,24,34,15,6,6,2,11,6,2,2,1,1,2,1,6,1,2,6,1,2,2,2,2,5,2,2,21,13,7,6,68,202,198,176,176,179,179,179,179,179,169,173,171,171,168,171,162,162,162,168,169,162,162,171,162,169,162,171,162,168,168,169,168,168,168,162,162,168,171,162,168,169,169,162,171,162,162,168,162,162,168,162,160,169,162,162,162,168,168,168,171,168,169,194,168,171,171,173,173,171,179,171,171,171,173,194,173,179,179,179,173,194,173,179,179,179,194,173,194,173,179,179,179,194,169,179,173,169,74, +2,6,5,1,2,1,6,2,1,1,2,2,6,2,21,13,13,14,31,34,29,7,33,37,22,17,29,32,22,106,120,116,122,126,132,138,126,119,153,184,141,144,140,36,154,144,117,149,153,154,153,154,127,34,20,15,11,6,6,6,6,2,2,29,24,150,151,144,139,146,138,138,122,11,16,24,18,24,22,145,142,122,140,20,31,17,13,2,5,2,15,17,2,2,2,2,5,2,7,11,2,2,2,1,1,1,1,1,2,5,2,7,15,13,15,17,13,6,6,2,2,10,7,11,13,10,13,5,11,6,2,0,2,13,2,11,11,13,13,11,7,13,13,11,14,11,8,13,11,6,2,6,2,13,13,21,17,13,18,24,33,24,2,2,2,6,2,2,5,1,2,9,9,1,1,1,1,2,2,1,2,2,6,1,2,11,13,17,22,30,109,24,15,36,11,7,13,110,16,22,2,1,2,2,6,1,2,6,1,11,2,2,6,2,2,6,5,29,30,21,78,198,198,179,179,202,179,171,179,171,179,173,171,173,168,194,162,168,168,168,168,169,162,171,171,169,171,177,162,171,162,169,168,168,168,162,162,167,171,162,168,168,162,168,162,171,162,169,168,162,162,168,168,162,162,162,162,162,168,168,169,173,162,171,171,173,171,173,171,179,179,194,173,179,179,194,179,177,179,179,179,179,202,179,179,179,194,179,202,179,179,179,194,179,179,179,179,171,169,74, +2,2,6,2,6,1,2,1,2,5,2,5,1,2,14,16,16,32,46,30,16,7,117,130,114,11,16,109,24,106,33,106,126,126,122,141,126,147,153,151,139,149,128,23,154,151,153,150,154,153,152,152,143,17,24,105,26,6,2,11,2,2,6,7,24,149,144,144,144,144,126,138,34,6,17,17,22,6,24,138,143,128,126,46,33,29,11,6,2,11,8,17,11,2,6,2,2,2,13,6,2,2,5,1,1,1,1,2,6,2,13,16,17,15,15,13,6,2,2,2,7,13,6,14,13,8,2,13,13,2,6,1,1,13,2,13,11,11,2,11,13,14,14,13,13,11,17,15,15,13,2,2,15,21,13,21,29,22,29,18,109,17,11,6,2,2,2,12,9,2,2,1,1,1,1,2,5,2,1,2,5,2,2,2,6,5,13,29,33,109,109,31,13,30,109,33,127,106,114,22,1,2,12,5,21,36,2,2,2,11,6,2,2,2,2,2,12,11,30,196,198,179,179,198,179,179,179,194,179,179,171,179,171,173,171,169,171,162,168,168,168,162,194,162,169,171,171,171,171,171,171,162,168,168,168,168,162,162,168,168,171,162,171,169,162,168,168,168,168,168,168,162,169,168,162,167,169,169,162,171,194,171,173,171,171,171,194,169,179,179,179,198,179,195,179,179,177,179,179,194,179,179,195,202,195,173,179,198,179,198,198,173,198,198,173,198,173,179,179,74, +2,7,32,17,8,2,5,2,1,2,2,2,6,7,29,13,36,45,22,36,24,12,117,132,29,2,22,34,34,110,31,122,126,138,122,123,149,133,139,139,141,144,140,36,153,150,154,186,153,153,152,150,143,20,20,127,18,11,2,2,11,6,2,13,22,123,122,138,144,145,141,126,18,11,11,22,24,3,110,151,144,128,123,32,31,11,2,2,2,13,15,17,6,2,1,2,13,2,7,2,5,2,2,1,1,1,2,1,2,2,15,8,13,15,13,6,11,6,7,6,6,13,7,16,16,13,11,13,11,2,2,1,6,13,13,6,13,7,2,21,21,29,13,11,11,15,17,15,29,11,7,13,14,15,13,13,13,18,22,34,33,6,6,2,6,6,2,2,5,1,1,1,1,1,2,5,2,5,2,1,2,2,5,2,2,2,13,13,34,44,108,18,13,119,19,114,115,47,136,133,11,6,9,11,29,18,11,11,2,11,2,6,2,6,2,2,15,24,200,179,179,179,179,179,179,179,179,179,179,179,179,179,171,179,171,173,171,171,171,171,171,171,171,169,177,168,173,168,194,168,194,168,168,169,169,162,168,169,168,162,171,168,169,168,169,171,171,171,162,169,162,171,169,162,162,162,168,162,168,171,171,169,179,179,177,179,194,173,194,179,194,179,195,198,179,179,179,198,202,194,198,198,179,198,198,198,179,179,179,179,198,195,198,202,198,198,198,179,179,69, +2,13,22,114,33,15,16,11,2,6,9,2,2,12,36,30,47,16,21,33,29,18,47,46,11,6,29,17,18,36,24,122,138,144,109,130,110,136,149,122,123,132,148,24,154,183,186,154,183,153,153,153,142,18,24,127,108,6,1,6,6,2,2,6,114,126,122,136,144,138,144,132,17,6,6,17,110,8,137,150,140,139,33,30,33,6,2,2,5,15,11,6,6,2,2,2,2,2,12,2,2,2,5,1,1,2,5,2,5,2,21,16,29,17,11,11,17,6,8,7,13,13,11,13,16,7,11,13,13,7,1,1,7,21,21,29,17,7,10,13,13,13,11,29,32,32,15,22,15,11,11,13,14,7,13,21,29,17,33,116,116,36,34,34,13,22,2,2,2,1,2,1,1,1,1,2,2,1,1,5,2,5,2,2,5,10,13,13,33,109,33,15,13,109,32,46,33,46,117,133,11,5,10,1,11,11,119,109,1,2,2,11,6,2,29,29,16,179,179,179,179,179,179,194,179,179,179,194,179,179,179,179,179,173,171,171,171,173,168,171,173,173,171,171,169,171,194,171,171,171,168,168,168,169,171,168,169,162,169,168,169,171,162,168,168,169,162,171,171,194,162,171,162,168,162,162,167,171,162,168,171,179,173,179,179,179,179,195,179,198,179,199,198,195,198,179,198,198,179,195,199,196,198,195,198,195,198,196,198,198,198,203,203,198,200,203,195,198,179,74, +1,2,29,34,34,22,17,22,2,2,2,6,1,7,29,30,49,2,14,34,22,18,21,22,8,13,21,22,22,16,33,116,144,144,18,116,106,149,123,146,140,149,154,24,183,153,183,154,153,153,153,153,128,10,18,114,142,11,2,2,11,2,6,6,110,116,126,145,145,150,138,124,6,11,6,30,123,8,138,137,138,119,33,16,13,2,5,2,13,33,11,2,11,6,2,2,6,1,15,11,6,2,2,1,2,5,2,2,2,2,12,16,13,17,11,7,6,6,7,6,7,16,11,13,30,11,13,16,21,11,1,1,13,16,29,29,16,11,2,13,14,29,14,22,30,16,22,16,11,11,13,13,13,13,14,14,14,33,132,125,120,34,13,126,122,138,2,2,2,1,1,2,5,1,1,2,5,2,2,1,2,2,5,2,2,6,13,21,110,20,33,8,17,117,109,116,32,45,47,133,114,10,121,119,10,26,132,70,11,6,2,6,11,8,32,30,194,195,179,179,179,194,202,179,194,198,179,179,179,169,179,173,179,171,171,173,173,171,173,171,171,173,171,169,171,162,171,162,168,168,168,162,162,162,162,168,168,168,169,162,194,161,173,171,171,169,177,162,194,168,169,194,171,169,168,168,162,162,162,194,171,169,194,194,179,179,198,179,198,199,196,199,199,199,199,198,199,199,196,199,199,196,199,199,199,199,198,198,203,200,198,204,201,200,204,200,195,198,198,131, +2,6,21,36,21,6,18,109,15,2,6,1,12,12,13,16,13,11,6,16,18,30,33,17,13,13,11,16,16,13,34,149,138,34,122,149,116,138,138,186,141,186,183,110,185,151,153,153,154,153,153,146,142,8,122,150,125,2,2,11,6,6,11,8,110,144,150,143,146,146,122,24,2,11,11,24,114,22,119,149,123,106,33,18,5,2,2,11,8,110,15,29,106,6,2,2,2,11,13,14,13,6,2,6,2,2,2,6,2,7,22,13,18,29,6,6,6,7,7,13,6,16,11,13,18,1,21,17,13,6,2,1,13,16,29,16,17,7,14,21,29,16,21,29,18,22,22,17,33,8,13,13,13,13,14,29,29,30,125,111,15,11,20,145,126,136,2,2,2,2,5,2,2,2,1,6,1,2,6,1,6,2,2,5,2,2,21,29,117,37,22,11,16,29,36,33,43,22,109,124,21,2,132,37,6,2,182,204,74,11,6,11,20,180,198,203,198,198,179,179,179,179,179,179,179,179,179,194,179,194,169,179,179,194,173,194,169,173,173,171,194,169,173,173,171,171,169,171,168,162,168,162,160,162,168,162,175,169,169,171,171,169,194,168,173,171,169,171,173,171,173,171,169,171,168,168,169,194,169,171,162,194,173,179,179,179,195,179,198,198,196,199,199,200,199,199,195,199,203,203,199,203,199,196,199,200,200,200,200,204,200,198,204,204,200,204,198,203,196,74, +2,2,10,11,1,13,122,114,33,11,2,1,2,6,36,16,13,14,13,7,29,24,22,43,17,13,11,17,16,13,37,140,126,149,149,138,119,149,123,153,152,153,150,24,130,149,153,152,153,153,152,150,142,116,125,128,16,2,2,2,2,6,6,6,116,150,150,143,143,125,136,17,2,11,22,33,18,15,129,144,123,116,33,11,2,6,2,7,13,110,18,13,15,11,16,12,6,7,13,14,14,17,1,1,2,2,11,2,2,29,16,16,22,11,6,7,13,11,13,6,13,22,11,22,17,1,21,29,17,6,2,1,13,29,17,33,29,13,13,16,29,30,21,29,16,30,15,29,17,11,17,14,13,14,29,16,21,18,116,114,3,6,138,127,126,110,6,2,5,1,2,2,5,2,2,2,2,6,1,2,2,2,2,2,2,5,10,29,106,114,106,2,21,68,29,50,106,46,133,188,6,7,29,16,117,130,203,203,172,7,30,130,180,199,198,198,179,198,195,179,179,179,179,179,179,179,179,179,171,171,194,171,173,171,194,179,171,171,173,194,194,179,171,169,173,171,168,162,171,162,162,171,162,162,171,162,171,162,171,168,171,173,173,171,173,168,171,173,173,171,173,171,171,171,169,168,168,171,169,168,171,171,177,179,179,194,173,195,179,196,199,199,199,199,199,199,199,199,199,199,199,200,198,200,200,203,198,204,198,196,204,200,204,204,201,200,200,195,199,74, +2,5,0,2,1,12,106,111,109,29,2,5,2,7,16,11,13,11,13,11,22,33,22,29,13,10,22,46,13,17,36,119,129,149,140,139,138,149,132,149,153,150,147,16,47,133,153,154,152,153,153,153,125,115,122,109,2,6,2,2,11,6,6,6,34,144,128,128,142,138,125,6,13,24,116,120,125,8,22,22,123,125,8,6,2,2,2,13,2,22,29,3,22,16,17,2,6,7,14,29,13,17,6,6,2,2,2,2,6,30,14,17,22,11,7,11,13,13,13,13,13,20,29,32,13,1,13,22,17,17,2,2,21,22,32,30,31,11,13,29,22,16,30,16,16,29,15,17,11,2,21,21,11,13,16,16,16,24,33,125,6,113,145,126,147,119,2,2,2,2,6,2,2,5,2,13,13,2,5,11,2,6,2,2,6,2,12,29,32,122,125,6,16,66,116,141,29,21,106,6,15,43,15,47,47,195,198,202,198,131,47,141,176,198,179,200,202,198,179,198,198,179,202,179,179,179,179,179,171,171,171,171,173,171,171,171,194,171,179,179,179,179,179,173,171,173,162,168,168,162,162,162,162,162,162,162,168,162,168,171,171,194,169,173,194,177,171,177,171,179,177,173,171,173,171,171,171,171,171,179,177,179,194,179,179,179,179,179,173,198,195,195,195,199,195,199,199,198,198,199,196,200,198,204,200,200,200,204,201,200,204,204,204,195,204,204,204,204,196,74, +2,2,5,1,2,7,34,109,108,108,11,2,2,5,11,1,6,2,7,13,16,37,31,13,12,16,29,13,33,106,141,122,120,149,18,106,119,147,129,152,183,152,144,8,22,183,153,154,153,153,153,150,125,138,111,11,2,2,2,2,7,6,6,11,34,143,128,138,128,126,125,17,22,119,122,138,126,11,6,7,136,111,11,6,2,2,2,13,11,18,18,22,11,15,11,2,7,11,13,13,13,6,7,21,11,2,2,11,7,18,15,24,30,2,13,7,11,13,13,11,13,16,30,37,11,1,2,22,18,15,6,2,16,30,22,32,31,11,7,13,17,29,18,29,16,17,30,22,13,11,21,17,6,21,29,29,29,17,34,111,120,140,127,149,144,144,8,2,6,2,2,6,2,2,2,15,11,2,34,37,36,7,13,11,2,2,11,36,34,120,123,121,170,48,124,141,106,4,15,106,11,17,18,106,200,202,195,179,198,179,8,175,198,199,198,179,200,179,198,198,179,179,198,179,198,179,179,179,179,171,171,173,169,179,173,179,174,179,179,179,169,179,173,171,177,171,171,171,162,168,168,162,166,161,162,162,162,171,160,168,168,171,169,194,169,171,177,169,194,179,179,194,179,169,179,169,171,173,173,168,171,194,179,179,194,179,175,179,194,173,198,199,199,200,199,199,195,200,200,198,200,198,204,200,204,201,200,200,204,201,201,195,204,204,200,201,204,201,204,131, +2,5,2,1,1,12,32,37,111,109,18,2,6,26,2,5,1,5,13,15,16,31,31,16,12,16,11,23,130,117,150,148,37,30,8,47,141,132,37,123,144,154,153,8,36,150,147,153,154,184,150,147,125,125,8,11,2,6,2,2,6,6,6,6,138,143,125,127,126,114,122,6,36,132,139,122,24,2,11,11,126,19,6,11,6,2,11,16,11,16,24,16,15,11,2,2,21,13,21,16,22,6,17,6,13,2,2,12,16,32,30,46,13,2,12,11,6,11,7,21,22,17,29,33,1,1,1,13,24,2,13,11,13,31,32,34,31,7,13,16,22,30,17,30,15,17,15,31,15,2,14,29,11,16,30,22,22,46,110,18,114,119,140,140,144,151,116,2,2,1,2,2,2,6,2,11,6,29,46,36,32,13,10,21,10,5,13,36,68,108,123,137,19,6,24,109,106,154,110,43,16,45,190,202,198,198,179,199,195,198,203,203,200,179,198,203,203,199,198,179,198,198,179,179,198,179,179,179,171,171,169,179,171,173,179,169,179,171,173,179,171,171,171,194,169,177,171,177,162,169,168,169,169,169,168,169,168,162,168,162,162,168,169,162,194,171,173,171,171,194,179,177,194,177,179,194,169,173,171,177,173,171,179,194,171,171,173,171,177,194,173,199,199,199,199,204,200,200,200,203,200,203,200,198,200,204,204,204,201,204,201,201,204,205,201,205,201,205,204,74, +2,2,2,1,2,16,30,30,33,37,109,22,0,1,2,2,6,2,2,13,32,2,43,122,16,17,21,22,37,130,137,151,119,123,24,47,149,114,32,133,153,153,152,8,130,147,154,184,153,150,150,143,126,127,8,6,6,2,6,2,11,6,11,14,128,128,128,128,138,114,138,145,109,109,128,136,18,6,6,13,116,11,15,11,2,2,34,15,22,29,22,22,33,18,6,2,17,29,30,33,30,13,36,11,17,2,2,29,16,30,30,32,2,6,2,11,7,7,13,16,29,16,22,29,2,1,2,21,11,17,44,7,10,32,46,24,33,5,10,29,18,33,16,29,16,20,29,111,18,1,13,18,14,30,30,30,22,109,110,109,18,144,132,147,153,150,143,6,2,2,6,2,11,6,6,6,22,23,43,34,34,29,13,1,10,10,13,17,124,142,125,142,140,109,44,30,47,121,165,194,190,200,179,202,198,179,198,179,198,198,179,198,179,198,199,198,198,199,179,203,198,179,198,198,179,179,179,179,179,179,179,179,179,179,179,179,179,179,173,171,179,171,173,173,171,171,171,169,171,168,168,169,171,171,171,162,169,162,162,171,162,168,169,168,168,168,171,171,171,169,179,177,171,194,177,179,194,169,179,179,179,194,179,171,173,173,171,171,171,177,179,194,199,199,200,200,204,204,200,201,200,201,203,200,200,200,204,201,204,201,201,204,201,201,205,201,205,204,201,74, +2,2,2,9,1,7,32,46,36,34,24,29,2,2,5,2,2,2,11,106,20,21,129,130,14,21,16,22,34,119,181,149,106,22,15,130,120,119,110,183,153,153,150,8,152,152,150,150,153,148,147,139,114,127,8,11,2,2,2,2,6,6,6,33,143,150,138,143,128,47,139,148,112,126,138,140,17,11,6,17,116,6,13,8,2,11,119,6,30,30,16,37,17,46,8,11,11,23,30,10,21,21,13,21,13,2,6,16,21,30,30,13,2,2,7,13,21,14,21,34,30,15,30,18,1,1,2,13,15,29,16,2,21,24,46,33,33,11,7,16,29,14,22,17,29,34,114,109,22,2,21,29,8,18,15,13,29,110,116,132,106,126,139,153,150,147,136,10,6,16,11,8,8,8,13,11,30,49,36,29,36,29,17,21,50,172,15,130,114,116,133,129,70,166,130,33,134,177,194,177,194,173,194,179,202,198,194,198,202,179,203,198,198,195,198,199,198,199,195,200,195,198,198,198,171,198,179,179,179,198,179,202,179,179,173,179,179,179,179,179,173,179,169,179,177,171,177,171,169,169,171,169,194,169,173,179,168,162,162,160,162,168,162,162,168,168,171,162,179,171,194,179,177,179,177,171,173,171,179,179,179,179,173,179,194,169,171,173,194,171,173,179,198,199,199,204,204,201,200,200,204,200,200,204,200,200,204,201,205,204,201,201,205,206,204,201,206,201,201,69, +9,1,2,2,9,5,30,109,116,120,109,10,2,6,2,2,5,13,45,130,106,13,14,15,11,45,141,34,47,117,132,144,18,119,109,45,32,120,36,133,153,153,147,24,138,138,150,153,148,126,149,122,123,128,3,11,6,6,2,2,11,6,8,132,149,146,144,149,128,116,144,145,138,126,136,151,116,29,36,48,29,6,11,15,17,16,123,6,16,36,30,36,29,29,18,21,14,30,7,7,11,21,6,7,13,13,21,7,7,30,47,6,2,7,13,17,21,7,17,29,29,16,24,17,2,1,1,11,13,16,5,10,29,34,43,33,44,6,15,16,29,29,43,36,22,46,109,32,31,2,7,15,22,29,11,6,16,132,120,116,110,149,153,150,148,144,140,8,21,17,11,17,18,20,17,2,29,21,29,14,33,132,29,30,46,3,13,106,123,46,11,35,163,162,168,169,171,169,171,194,177,198,179,194,202,179,179,198,202,202,198,203,179,200,179,200,199,195,198,196,203,203,198,198,198,198,179,202,198,179,179,198,198,202,198,202,179,179,179,179,179,179,178,169,171,171,171,171,173,171,177,171,179,194,179,177,179,168,162,162,156,162,162,171,162,162,168,162,168,171,169,194,179,194,194,173,194,179,179,179,179,194,179,194,171,171,173,177,194,173,194,198,179,198,200,200,204,204,204,204,201,204,200,204,204,204,201,204,201,201,201,201,205,201,206,205,201,206,205,74, +2,6,1,2,1,2,29,34,123,111,109,33,116,119,16,6,6,32,130,120,32,21,16,26,2,36,132,132,149,151,140,149,8,126,111,15,106,124,32,117,144,144,106,15,137,144,149,150,144,144,144,111,125,140,17,6,6,2,2,2,11,6,22,133,147,150,145,136,144,140,138,127,126,122,141,141,14,24,19,22,6,6,2,13,13,36,122,1,17,22,30,16,48,31,119,30,30,13,29,16,12,47,2,29,36,29,29,1,30,32,10,2,5,11,13,13,13,14,23,22,16,30,17,24,2,1,2,11,2,16,2,11,22,30,33,32,46,34,31,13,13,21,28,29,22,30,33,33,18,1,12,17,15,7,13,18,33,119,106,116,147,152,150,150,148,140,146,115,109,11,6,6,17,6,2,6,2,13,43,13,30,119,106,106,30,13,32,126,22,159,166,162,162,160,162,162,168,171,171,171,194,169,194,179,202,179,198,179,198,179,200,199,199,195,198,199,199,199,195,196,198,198,200,198,200,203,198,198,179,198,198,179,198,179,179,198,179,202,179,179,179,179,179,179,179,168,173,173,171,171,171,169,194,179,177,179,179,179,168,162,162,162,162,162,162,162,168,168,168,171,171,194,179,179,179,179,173,195,179,179,179,179,173,194,171,194,171,169,179,194,179,179,195,179,200,195,204,200,201,204,200,204,201,201,204,204,201,201,204,201,204,204,201,206,206,201,205,206,201,74, +2,1,2,2,1,5,30,47,126,122,116,46,149,152,34,43,106,132,119,130,15,14,21,12,6,14,22,152,151,120,133,132,15,116,33,13,24,123,133,133,123,145,109,16,137,138,149,153,153,115,47,106,115,142,15,6,6,11,2,6,6,6,34,144,144,144,136,138,138,123,113,126,47,13,122,110,6,16,33,17,8,2,30,32,129,133,130,6,36,30,36,117,120,6,32,32,43,11,45,21,21,50,14,36,29,21,13,33,47,29,1,2,11,2,13,8,13,29,17,30,29,32,46,20,2,1,2,13,13,13,11,11,29,32,31,120,140,46,17,13,17,15,21,13,15,33,109,32,17,6,2,16,11,11,16,30,46,106,106,140,152,148,153,152,150,136,149,113,20,6,2,11,6,18,8,15,11,10,11,11,36,120,119,147,128,108,109,118,141,161,162,160,162,160,171,169,162,171,171,162,171,171,171,169,194,194,177,179,194,198,198,202,200,199,199,198,199,196,203,198,200,203,203,195,198,203,198,198,198,198,179,198,198,198,203,195,203,195,198,202,202,179,179,179,171,173,171,179,171,173,171,173,171,179,179,198,179,179,179,168,162,162,156,161,156,162,162,168,162,173,171,171,169,194,179,179,194,179,179,198,179,179,179,194,179,171,177,194,173,194,179,198,194,198,199,199,200,201,200,204,204,201,204,201,200,204,201,201,204,201,201,205,201,205,201,206,206,201,206,131, +2,2,1,1,2,2,16,36,122,126,116,46,122,116,33,36,139,133,70,15,6,7,7,2,13,13,43,153,147,120,120,4,29,126,109,40,133,137,20,22,33,145,105,31,147,136,153,154,145,125,31,31,18,140,8,6,6,2,2,2,7,6,117,138,144,138,128,137,126,114,109,22,6,22,138,15,6,16,24,18,44,34,29,30,120,18,32,2,29,23,30,117,29,13,30,43,29,29,17,22,15,6,21,29,34,6,36,21,17,10,1,2,5,2,11,15,13,22,22,30,29,34,31,24,2,1,2,14,17,1,5,13,45,47,117,129,120,106,34,106,17,21,11,15,37,31,33,33,20,2,2,29,22,16,17,29,106,110,116,124,152,148,146,142,144,139,139,136,15,6,6,6,6,8,17,15,17,6,2,36,16,119,132,142,125,109,116,149,169,162,162,162,168,167,162,167,171,169,171,169,171,162,168,194,168,177,171,173,194,202,179,199,199,199,203,199,199,199,198,203,200,198,196,203,200,195,198,200,203,198,198,203,179,200,198,203,199,203,199,179,198,198,173,179,179,194,179,169,173,171,171,171,179,179,194,179,198,198,179,179,171,168,168,162,168,162,168,168,171,194,171,177,171,171,177,194,179,179,179,179,179,194,194,179,179,179,179,179,179,179,179,179,198,198,179,200,195,195,200,199,204,200,200,204,204,204,201,204,201,201,205,201,205,201,206,206,201,206,205,74, +82,10,2,2,1,5,16,33,106,126,144,139,136,44,7,132,185,132,46,1,5,1,1,2,16,139,148,153,144,124,17,13,24,153,18,29,34,109,106,24,29,138,114,146,126,147,153,144,150,142,105,15,8,126,4,5,2,2,5,2,11,11,133,149,150,149,126,146,125,126,14,2,6,22,114,5,7,16,13,114,111,115,18,33,29,6,11,2,29,32,17,32,16,33,32,34,47,123,122,31,22,13,13,43,32,2,34,34,29,12,1,2,2,2,13,109,15,31,18,29,17,106,33,17,2,1,2,21,22,6,0,29,45,106,46,109,46,109,34,106,24,5,11,14,24,33,33,29,24,6,6,16,29,16,29,8,47,46,114,142,145,139,150,153,149,147,123,126,2,11,6,6,6,11,18,22,17,13,29,10,29,106,33,140,125,114,131,160,168,168,162,162,162,162,162,162,168,169,171,177,171,169,168,168,171,173,171,169,194,179,179,195,198,198,200,199,196,204,200,200,200,200,200,200,204,203,203,198,196,198,198,199,199,179,195,179,200,179,198,198,179,198,179,179,171,179,179,179,171,194,171,179,173,194,179,198,199,199,179,179,179,179,171,171,168,168,173,171,168,171,171,171,173,194,179,173,179,179,179,194,179,179,179,179,202,179,171,194,179,198,179,198,179,198,179,198,196,199,203,200,200,200,204,201,201,200,204,201,201,205,201,204,201,205,206,201,206,201,201,74, +95,53,6,0,1,2,29,29,47,133,130,136,126,118,21,149,132,141,13,2,2,1,2,13,22,149,138,146,136,46,11,17,109,143,20,16,46,116,148,24,32,154,127,126,144,146,145,128,144,142,105,8,46,128,6,17,13,2,2,2,11,16,133,141,147,144,150,122,113,111,13,6,6,22,109,2,11,13,18,114,33,111,115,31,8,17,6,6,13,16,22,22,30,106,46,37,119,129,120,47,106,31,2,47,43,14,22,15,17,2,2,5,2,11,11,106,11,20,31,15,15,116,110,15,1,1,2,29,18,2,2,21,30,22,17,43,34,111,37,110,30,9,2,34,31,31,24,24,15,1,11,33,30,22,36,29,110,106,127,138,146,145,153,154,147,145,124,144,6,2,2,6,6,13,20,17,17,8,49,39,129,106,106,111,115,164,162,169,168,162,171,169,169,162,168,168,168,171,171,169,168,168,168,168,171,194,171,173,171,177,194,202,203,195,198,204,199,200,200,198,204,204,200,200,204,200,200,203,198,203,198,198,202,199,203,199,203,195,179,198,198,179,198,202,179,179,179,179,194,169,173,179,168,179,179,198,199,199,196,203,198,195,179,179,179,179,168,171,174,173,171,171,171,169,173,194,173,194,179,194,179,179,195,179,194,198,202,179,179,198,179,198,198,198,198,179,198,198,179,200,195,200,204,204,204,201,201,200,201,201,205,201,205,201,206,201,206,206,206,131, +89,84,38,5,2,2,13,21,32,34,139,147,149,130,117,133,149,136,6,2,2,6,2,7,29,110,153,150,111,6,8,114,144,152,4,14,46,24,24,13,16,137,128,3,114,142,150,150,115,142,114,11,109,115,31,110,7,6,2,2,11,16,110,122,145,140,115,137,154,123,6,6,2,47,20,2,6,7,16,109,119,108,126,8,15,17,17,2,21,31,30,16,30,47,34,68,110,48,132,31,46,24,15,34,24,13,16,30,13,2,2,7,2,7,13,18,21,24,31,15,43,20,109,8,2,1,5,11,22,6,2,13,30,32,30,24,106,46,47,32,33,6,2,18,30,36,16,117,6,2,30,37,43,22,30,45,106,132,125,144,153,153,153,153,151,151,149,126,11,2,2,6,6,6,18,31,33,14,13,8,49,47,8,111,164,169,169,169,162,168,162,168,168,169,171,168,171,169,171,168,168,169,168,162,194,169,179,171,171,194,179,179,196,199,200,203,204,199,198,200,200,198,204,198,201,200,199,199,199,199,198,198,179,202,195,203,196,179,198,198,179,202,179,198,179,179,179,179,171,179,171,177,179,179,194,179,199,199,199,199,196,203,195,198,198,179,179,179,179,169,173,174,194,171,179,179,194,169,179,179,179,179,179,198,179,198,194,179,179,198,198,179,198,199,179,198,203,198,198,198,195,203,198,204,201,200,204,201,204,201,205,205,201,201,205,206,201,206,201,74, +89,90,91,90,71,2,7,22,47,119,139,182,149,140,106,132,150,132,11,2,2,2,6,7,16,119,154,151,17,13,29,152,150,140,2,14,119,110,29,1,7,117,33,126,147,128,150,150,105,138,127,6,109,109,128,37,7,2,2,5,6,14,123,144,126,127,128,153,152,125,8,6,6,119,19,5,6,14,34,122,109,111,47,19,13,13,11,6,16,13,13,22,34,106,32,36,106,33,34,18,33,18,31,29,18,13,29,11,2,2,6,2,2,2,12,11,17,108,33,24,109,31,122,6,2,1,2,13,22,8,6,16,34,33,16,46,106,120,116,132,144,109,5,121,16,22,129,122,2,5,36,30,29,29,22,47,36,132,127,139,151,153,153,148,151,137,149,34,2,6,2,11,17,22,21,17,22,109,157,166,171,78,157,166,169,169,169,171,168,168,169,169,169,162,168,168,168,168,168,169,162,168,169,171,171,173,173,171,171,179,202,179,203,200,198,203,200,199,200,198,204,196,204,196,198,196,199,203,199,198,198,203,179,198,179,198,198,203,195,179,198,198,198,179,179,198,173,179,179,194,194,177,179,179,179,198,179,198,199,200,196,203,199,199,198,198,198,202,179,179,198,194,202,179,179,179,179,179,179,173,179,179,198,179,198,179,198,179,198,179,179,198,199,198,198,198,195,198,198,203,195,200,200,203,200,204,201,200,201,205,201,201,205,205,201,201,205,201,206,74, +90,90,91,90,90,38,11,129,130,47,120,133,133,123,29,149,147,125,16,7,11,6,2,11,22,130,146,136,11,6,33,150,137,144,111,24,33,43,114,22,132,119,109,106,8,8,138,148,8,146,125,11,114,18,46,18,2,2,2,2,2,29,116,114,126,145,153,152,144,128,16,6,6,137,20,6,6,6,11,20,109,18,114,22,6,13,11,11,6,6,30,30,29,106,30,30,46,17,36,17,30,24,15,30,15,4,7,6,2,2,2,6,6,2,6,13,1,16,11,8,33,32,136,2,1,2,6,12,17,11,6,30,34,34,46,109,116,124,141,140,141,136,126,8,32,134,149,17,1,2,43,30,16,21,36,133,43,120,125,144,150,183,150,149,146,147,129,6,6,11,8,17,34,17,31,21,24,78,168,162,160,168,162,162,167,171,171,169,168,168,168,168,169,169,168,169,162,169,171,168,168,168,171,171,177,179,179,179,194,179,198,202,199,199,203,198,198,203,199,196,196,199,203,199,199,203,195,199,198,179,198,198,198,198,198,203,179,198,203,195,203,198,196,198,179,179,194,179,179,179,194,179,194,179,179,198,198,198,199,199,199,203,198,198,179,198,179,199,203,196,196,199,179,198,179,179,198,178,173,198,195,198,198,198,198,195,199,198,198,195,179,198,198,198,198,200,203,199,196,198,199,199,196,198,199,203,200,201,204,201,201,205,206,201,205,206,201,206,205,131, +82,90,89,90,91,82,38,30,32,34,132,139,138,133,119,147,137,140,11,13,11,11,13,13,32,124,153,19,11,30,132,126,144,145,115,119,122,21,22,22,17,29,8,6,17,106,143,105,114,150,111,6,33,114,17,34,2,6,2,2,11,16,123,138,126,153,143,143,115,140,8,6,6,135,111,6,6,7,7,24,24,24,114,19,11,13,13,22,2,11,4,16,30,46,17,30,116,22,14,17,16,30,16,45,32,164,2,7,6,7,2,10,9,11,7,14,6,13,24,119,15,34,132,1,1,2,2,11,30,11,7,29,37,24,119,149,149,141,139,144,139,133,136,109,47,130,136,109,5,2,36,30,29,43,120,130,106,120,139,147,148,145,147,141,140,33,6,10,13,16,36,16,21,29,16,68,169,162,156,156,160,162,162,162,168,168,194,162,194,162,168,160,162,168,168,168,169,169,162,168,169,171,173,171,179,179,198,179,179,202,199,179,200,195,196,198,203,200,200,199,198,198,199,198,195,199,203,179,198,179,202,179,194,198,179,179,202,198,179,196,199,199,203,195,198,202,179,179,179,179,198,179,179,202,179,179,198,179,198,199,203,199,198,179,198,203,196,200,199,199,203,196,199,203,198,195,179,198,198,198,179,196,203,198,199,199,199,195,199,198,198,198,199,203,200,195,198,204,198,198,195,200,195,198,199,196,203,198,204,204,201,201,205,205,205,201,205,201,205,74, +89,86,89,89,89,90,86,7,21,116,140,144,139,147,120,144,151,108,13,11,13,13,13,18,43,119,141,11,17,144,138,133,144,128,24,137,125,116,31,13,16,33,17,15,24,24,31,20,142,150,18,29,123,146,144,31,6,11,2,2,7,7,106,137,136,148,138,146,108,136,6,6,13,147,122,6,13,1,7,22,34,17,109,111,13,15,15,18,15,33,44,23,22,33,13,34,47,106,43,22,47,31,35,29,46,40,2,29,13,13,2,1,5,21,13,11,2,119,133,116,15,130,22,2,1,2,2,35,28,2,13,30,119,132,149,183,133,141,133,133,141,132,130,33,132,130,117,43,2,7,21,36,37,47,47,47,120,118,120,138,147,148,146,142,116,13,13,15,30,11,21,28,66,165,29,159,162,162,162,160,162,162,160,169,162,168,162,168,162,162,162,162,160,162,168,162,162,169,169,168,168,169,194,173,194,173,179,202,198,196,179,200,202,199,199,200,198,204,198,204,199,199,199,195,203,195,179,198,198,202,179,198,179,179,179,198,179,198,199,203,199,199,199,203,198,202,198,179,198,198,203,198,179,198,198,198,198,198,179,199,198,203,198,199,195,179,196,198,179,198,198,198,179,199,195,202,203,199,199,199,195,179,199,199,199,203,198,200,200,196,199,200,195,200,203,200,200,198,200,203,199,199,199,195,199,199,199,199,198,201,204,204,201,206,201,205,201,205,200,74, +84,85,85,86,85,89,89,7,32,36,132,130,144,132,139,144,140,19,17,13,13,13,34,111,22,34,142,11,114,144,147,149,144,125,125,140,32,32,31,44,119,114,21,34,109,114,151,18,150,140,6,135,152,144,122,17,30,34,11,2,5,11,133,135,32,138,146,151,108,125,6,6,24,139,109,2,6,13,13,32,34,34,136,31,8,17,17,18,33,46,22,29,34,22,11,106,132,34,118,119,18,120,14,48,46,2,5,5,1,5,2,5,1,2,5,1,11,117,110,33,18,132,11,2,1,2,5,29,13,2,21,130,134,130,141,149,149,133,133,139,133,119,117,46,141,110,47,1,5,5,28,30,110,31,117,106,116,106,109,116,142,142,20,140,32,16,36,15,120,164,162,173,169,171,166,171,194,162,169,168,168,162,171,160,168,162,162,162,160,161,162,169,160,160,98,160,160,160,162,162,168,171,169,171,179,179,198,177,198,203,195,198,199,204,198,200,200,198,200,200,200,199,198,199,203,199,195,179,198,198,179,179,179,179,179,179,179,179,198,195,199,199,198,199,198,179,195,198,198,179,198,199,195,198,179,199,179,198,202,198,179,196,200,203,203,199,178,203,198,195,198,198,203,198,203,198,200,198,200,195,200,195,198,198,198,196,203,203,198,204,200,203,200,204,198,204,200,200,200,200,195,203,200,198,199,199,198,199,199,198,204,201,204,201,201,201,205,201,201,131, +89,89,89,89,90,90,95,26,13,32,132,139,182,138,140,128,125,125,20,11,11,13,17,116,33,130,144,11,116,122,111,109,115,114,111,110,16,29,16,130,109,44,13,34,106,119,126,126,144,132,133,144,144,122,139,109,29,106,13,2,31,21,48,47,16,126,149,146,138,133,16,13,119,116,17,6,6,11,13,22,24,116,120,11,17,46,17,17,24,15,17,36,119,130,6,106,119,132,149,122,130,24,11,37,20,1,2,5,7,2,2,2,5,2,2,6,21,34,34,120,116,15,6,1,2,2,2,30,3,6,30,33,132,46,129,180,133,133,141,132,119,129,120,141,139,149,31,1,2,11,29,22,33,116,119,116,116,129,132,122,145,125,110,18,16,22,16,74,179,169,169,162,171,169,194,169,171,169,175,169,171,169,168,162,160,162,156,159,160,160,169,159,160,160,156,159,160,160,168,162,162,168,173,194,177,179,179,198,179,200,195,179,196,200,204,200,204,204,199,204,199,196,199,198,199,195,203,198,179,202,198,179,179,179,179,202,198,198,179,200,203,179,200,198,198,198,202,179,196,203,196,203,199,195,199,199,195,179,179,198,202,179,199,196,203,195,199,195,203,199,196,198,198,203,200,198,200,200,195,203,203,195,200,199,199,196,198,200,200,204,198,201,201,200,203,198,201,200,204,198,201,199,199,203,199,198,199,199,198,195,200,200,200,204,204,205,201,204,201,74, +89,90,89,90,85,91,90,27,32,119,139,136,137,136,126,127,143,145,109,11,11,14,16,106,126,132,106,17,119,140,18,108,125,114,114,106,24,16,22,119,16,110,21,46,43,110,151,145,33,116,149,126,150,126,138,20,13,13,2,2,5,33,11,6,7,140,151,127,126,34,109,70,34,11,6,6,6,7,14,34,109,119,24,2,44,106,126,43,33,30,30,47,123,11,29,106,147,137,149,136,124,132,11,132,24,1,2,2,5,13,1,2,2,5,2,2,23,46,32,132,132,21,2,5,2,2,2,70,68,16,21,130,133,120,133,117,182,133,133,119,130,120,120,149,133,141,24,1,2,13,21,43,125,118,109,116,132,119,114,124,144,140,36,17,66,168,167,168,168,168,194,171,173,171,171,173,171,171,173,162,194,160,168,160,162,160,160,162,162,162,156,159,160,160,97,156,160,160,162,167,169,171,171,179,177,179,199,179,199,203,199,199,203,195,198,204,200,199,204,199,200,203,203,195,203,179,179,198,202,198,179,179,179,202,179,179,198,179,198,198,199,202,198,198,179,198,198,202,198,203,198,204,199,195,199,195,199,199,195,179,198,202,198,198,199,203,199,199,198,200,199,198,200,198,200,200,200,198,200,198,198,200,198,198,198,203,198,196,198,204,200,200,198,204,200,204,200,204,198,204,198,204,200,198,195,198,200,199,199,199,199,198,200,200,204,200,204,204,200,74, +89,90,91,90,91,90,91,71,133,120,130,114,109,114,119,128,150,146,33,11,13,21,22,46,110,37,24,46,138,126,8,46,144,149,126,34,17,22,30,22,34,22,16,31,34,123,149,126,18,148,108,138,138,126,139,116,2,2,11,6,11,14,2,11,11,123,130,19,148,125,115,15,11,7,7,2,6,7,29,132,133,106,123,6,36,106,120,34,33,15,46,126,116,11,34,183,149,151,139,132,129,124,11,37,13,2,6,10,5,2,2,2,5,2,2,7,43,110,110,133,130,2,2,2,2,9,13,13,2,6,21,130,144,149,145,133,47,139,147,125,132,132,129,141,133,132,33,1,2,35,11,117,120,109,44,114,120,124,118,106,149,31,69,14,78,168,168,168,171,169,171,169,177,194,169,173,171,177,173,173,171,169,162,160,160,159,160,162,160,160,160,159,159,160,156,160,162,160,162,168,168,171,173,194,179,198,179,202,199,196,195,179,196,203,203,204,199,196,203,204,196,199,196,200,203,195,202,198,179,194,179,179,179,177,179,198,198,202,198,179,195,198,198,179,198,198,177,198,199,198,203,198,200,199,203,196,203,203,203,195,179,198,179,198,199,196,203,199,198,196,198,200,200,195,200,195,200,198,204,195,200,195,198,198,200,198,195,198,203,200,204,204,200,201,200,204,201,200,200,203,200,198,204,198,196,196,198,198,200,203,199,198,199,204,200,196,200,200,204,131, +89,89,89,89,89,90,85,71,6,17,125,138,139,137,136,147,150,139,86,60,29,16,22,67,101,92,96,46,126,114,15,116,126,144,132,34,22,120,22,30,47,13,16,129,106,132,144,115,32,150,136,123,144,126,144,18,11,22,123,13,47,13,2,11,24,122,18,139,138,126,143,19,6,6,6,6,2,13,8,116,18,36,110,16,16,106,132,123,33,36,136,181,109,37,120,181,136,141,138,120,33,22,10,30,2,2,2,5,2,11,2,1,2,2,6,5,45,33,120,119,33,1,2,2,2,1,11,21,6,2,30,133,124,47,151,147,31,132,144,149,126,119,132,144,126,144,34,1,11,21,29,117,120,109,109,118,116,124,128,43,45,163,162,98,173,162,168,171,169,169,175,171,169,173,173,169,177,171,177,171,168,162,162,162,162,160,160,162,169,167,169,160,162,159,160,156,169,162,162,168,171,173,194,202,198,198,203,198,199,203,203,195,198,200,200,195,203,198,199,198,204,203,203,198,179,198,179,179,198,179,179,198,198,198,202,179,198,179,198,198,179,198,179,198,177,198,198,179,203,199,199,203,198,199,199,198,200,198,195,203,195,179,198,198,203,196,200,198,204,200,200,198,196,204,195,204,200,204,198,204,204,198,200,204,195,204,204,200,204,198,195,204,201,204,201,201,203,201,203,200,200,204,200,200,203,199,199,203,199,198,200,198,198,200,199,204,198,201,200,74, +89,89,89,85,90,91,89,90,6,13,123,144,140,136,119,140,148,79,89,90,79,75,75,90,92,91,96,59,13,33,138,144,149,182,96,53,22,32,30,34,20,31,26,23,132,144,149,114,22,150,136,122,136,133,150,8,29,114,126,8,119,13,7,2,132,105,119,144,34,16,150,20,11,6,6,2,2,6,29,115,32,114,136,8,22,132,130,133,132,130,141,126,33,130,119,151,110,130,133,138,109,16,14,6,2,5,6,2,10,2,6,1,1,2,7,6,30,123,109,109,15,6,1,2,5,2,2,2,11,1,36,151,123,34,149,144,106,133,141,133,132,116,144,144,145,147,17,2,2,22,31,36,36,116,109,116,122,113,148,169,162,171,169,171,162,171,171,169,171,177,177,168,177,175,171,171,168,169,194,171,169,162,160,162,162,159,169,162,162,162,162,160,162,160,162,160,167,162,162,168,171,202,194,202,179,198,179,196,196,200,199,203,198,200,198,199,198,200,200,203,198,200,198,179,198,198,198,179,179,179,179,179,202,179,198,198,179,198,179,198,199,198,198,198,179,179,198,199,196,198,199,199,199,204,200,198,200,198,200,198,199,198,198,179,198,199,198,205,203,198,200,200,204,198,204,204,204,195,201,204,195,201,195,204,195,204,195,204,195,200,200,198,204,204,201,200,201,200,201,200,203,200,200,204,200,200,198,200,199,196,199,199,196,198,199,203,199,198,200,131, +89,86,89,90,86,88,91,100,6,6,33,126,142,138,122,106,48,90,89,90,86,90,90,91,91,90,92,59,106,116,119,117,48,87,96,96,49,11,32,29,7,33,33,21,47,36,29,11,114,150,144,123,106,138,151,105,34,114,120,29,129,119,123,104,114,18,137,132,11,24,153,19,2,11,6,6,2,7,17,123,106,106,135,20,36,130,110,132,132,120,130,24,24,139,133,130,120,106,136,123,130,116,2,2,2,2,2,11,2,2,2,2,1,2,2,2,34,109,111,33,2,2,6,2,2,5,2,5,7,11,29,136,122,36,133,149,24,141,145,136,136,133,140,141,133,126,8,2,21,36,13,46,109,109,118,118,125,127,140,194,160,171,168,168,168,168,167,168,169,171,171,177,171,171,177,175,173,171,162,168,162,162,162,161,162,169,162,162,168,162,162,162,162,168,162,162,168,162,171,171,194,173,179,198,179,198,203,199,199,196,198,200,196,198,200,203,199,199,198,196,198,203,198,199,195,179,179,179,194,198,179,198,202,179,179,179,202,179,202,179,198,179,198,179,198,179,198,179,199,200,200,203,198,200,198,204,198,200,200,203,203,195,179,198,199,199,200,198,201,203,200,204,195,201,201,204,201,204,200,204,201,204,201,201,201,204,201,201,204,195,204,201,204,204,204,204,204,201,200,200,204,201,203,198,200,200,198,204,199,198,200,199,199,199,195,196,199,203,195,74, +85,85,85,85,89,89,86,90,58,11,126,128,128,132,134,77,95,89,91,90,90,91,86,90,86,91,92,71,66,68,77,100,91,92,91,96,96,62,34,16,30,123,18,13,32,8,11,16,149,150,147,33,106,128,146,144,120,133,31,34,110,133,149,154,148,22,122,105,11,24,145,8,11,7,2,2,7,6,37,125,45,47,106,106,30,117,106,129,136,46,29,24,110,144,109,34,136,120,137,124,126,116,0,6,1,11,2,2,6,6,2,6,1,1,6,2,46,138,125,15,6,2,2,2,6,1,2,2,31,31,30,144,137,117,37,133,30,153,149,145,133,119,138,122,119,124,11,2,2,8,43,111,126,33,33,111,125,115,145,198,168,162,169,168,168,162,168,162,168,168,162,171,169,162,171,171,171,171,168,168,162,168,162,160,168,168,162,168,168,169,162,162,171,162,168,168,162,168,171,173,179,198,198,202,194,198,195,203,199,203,195,198,204,203,196,203,200,199,200,199,198,179,199,198,203,179,198,179,179,179,202,179,179,179,198,179,198,198,198,198,202,179,198,198,202,173,195,199,198,195,198,201,200,198,204,200,200,203,198,200,200,200,203,196,198,199,200,204,204,201,205,201,204,201,204,201,204,201,204,201,204,204,204,201,204,201,201,200,204,201,195,204,204,200,201,204,200,204,204,204,199,200,200,195,200,200,200,198,204,200,203,198,199,203,203,199,198,199,195,74, +89,89,89,85,85,89,89,85,90,61,36,123,121,78,84,89,82,85,85,90,76,90,91,89,91,90,86,90,91,85,91,90,91,91,91,91,92,102,39,11,17,138,17,13,30,7,2,29,123,149,126,20,139,152,151,138,136,125,10,130,147,153,153,144,147,126,144,114,17,106,145,11,7,7,6,2,6,6,119,116,34,106,47,106,33,47,34,47,126,11,8,109,141,143,29,132,116,119,141,144,151,24,2,1,2,11,2,6,2,7,13,2,2,6,1,2,129,122,132,22,2,2,2,5,1,5,2,6,36,129,116,129,141,122,120,132,30,126,133,133,136,140,132,132,110,125,11,2,13,46,110,126,146,127,29,24,150,128,147,169,169,169,168,162,162,162,168,162,168,162,169,169,162,168,171,173,171,169,168,168,168,169,162,162,162,162,162,168,169,162,171,169,162,162,160,162,171,171,171,194,179,202,179,198,198,203,199,198,204,200,200,200,203,198,200,195,198,204,198,196,200,198,203,195,196,198,202,179,179,179,194,202,179,179,202,179,195,179,198,179,198,179,198,179,198,198,179,203,199,203,200,195,204,204,200,198,200,200,204,199,198,196,198,199,204,200,201,201,204,201,201,204,205,201,201,204,201,201,204,201,204,201,201,204,201,204,201,204,204,204,201,200,201,204,204,201,204,204,204,200,199,200,200,200,198,199,202,200,198,200,199,199,200,200,195,200,200,198,200,131, +85,85,86,88,85,89,84,84,89,89,89,82,84,84,82,84,89,85,90,91,90,90,85,89,91,85,90,90,89,90,89,91,89,86,91,91,92,96,62,30,46,122,16,32,30,13,2,24,144,152,148,20,149,144,142,124,106,110,15,120,153,151,144,111,149,139,128,127,8,138,144,6,7,6,2,2,13,7,132,33,106,128,127,108,29,22,116,44,123,8,11,116,136,136,16,124,132,114,153,141,68,11,2,2,5,1,11,2,11,13,21,6,2,2,2,6,117,149,132,13,2,2,5,25,1,2,6,7,47,120,120,120,124,151,105,31,18,132,120,132,133,124,123,110,47,117,6,2,11,33,116,136,140,138,104,113,141,126,130,169,169,168,162,171,169,160,168,168,171,171,171,177,168,171,194,169,177,171,169,162,171,168,169,169,169,169,162,162,169,169,162,168,160,160,159,160,162,171,171,194,173,198,179,202,179,200,198,200,203,199,200,199,200,200,200,200,203,198,200,179,196,199,196,203,179,179,179,179,202,179,198,179,198,198,179,195,179,203,178,202,195,179,196,199,198,179,200,198,198,198,200,200,203,200,198,200,200,204,196,200,204,200,200,200,195,204,201,201,201,206,201,205,201,205,206,201,204,201,204,201,201,201,204,201,201,205,201,204,201,201,204,201,200,200,201,200,201,203,200,204,199,199,202,199,199,199,198,199,203,198,200,202,199,198,198,199,199,202,179,74, +89,89,85,89,82,84,84,82,84,82,84,84,84,84,89,85,86,89,85,85,91,89,90,91,82,91,85,91,88,91,90,90,89,91,90,86,90,86,92,75,130,43,30,29,11,11,7,141,152,151,144,151,138,143,150,128,119,8,43,110,148,147,143,145,115,109,132,126,15,153,128,6,7,14,29,16,11,13,136,15,30,138,143,20,11,34,124,24,132,31,36,133,124,132,34,119,149,119,144,124,6,2,5,2,2,6,6,2,14,47,22,21,13,6,2,2,68,125,33,2,6,10,2,1,2,5,1,13,119,119,15,32,133,116,130,133,33,106,120,110,130,132,139,120,110,6,2,6,13,106,132,119,132,127,140,126,18,69,156,162,162,168,169,169,162,171,169,171,169,171,171,162,194,162,171,171,162,194,168,194,162,171,171,162,171,169,162,169,162,160,162,156,156,156,156,156,160,169,168,171,194,179,179,179,198,198,202,179,200,202,199,199,199,200,200,200,199,200,199,198,199,203,199,200,198,198,179,173,198,198,179,202,179,198,198,203,195,179,202,194,198,203,199,203,199,198,198,199,203,200,200,203,198,198,204,198,200,195,204,204,198,200,204,204,200,201,204,205,205,206,206,201,206,201,206,205,201,201,205,201,204,201,201,201,204,201,201,204,201,200,204,201,204,204,204,204,200,204,204,195,202,194,198,199,198,177,198,179,198,179,179,198,198,179,198,179,198,177,179,74, +89,84,84,85,84,84,84,84,82,84,84,84,84,82,84,84,84,85,89,85,85,90,89,85,91,90,91,89,89,89,89,90,91,90,85,91,90,90,91,91,95,13,13,2,16,17,6,120,151,137,141,144,150,142,142,138,17,13,33,37,153,152,146,145,142,115,110,111,122,124,13,6,7,36,110,114,109,22,47,2,29,129,150,20,23,34,116,47,123,116,117,133,149,126,68,133,141,130,149,125,2,2,2,1,2,2,2,11,106,36,47,22,46,29,31,18,117,139,136,2,2,2,6,2,2,5,2,13,116,29,18,17,36,109,43,116,29,29,119,106,130,123,106,106,132,24,2,2,11,119,110,120,132,144,140,45,159,161,156,162,161,168,162,169,169,162,171,171,171,173,171,171,171,162,169,169,169,171,171,169,171,168,168,171,162,169,162,160,160,156,98,103,98,103,103,156,156,160,162,168,171,171,171,177,179,177,198,177,194,202,179,198,196,199,204,204,204,199,195,198,198,202,198,179,200,179,198,198,179,179,198,198,202,179,195,179,198,198,198,179,199,179,198,203,200,203,199,200,200,200,198,200,200,203,200,195,200,204,200,204,200,204,201,200,203,204,201,204,201,205,201,205,206,206,201,205,205,204,201,205,201,204,201,204,201,201,204,201,204,204,204,201,204,201,200,200,200,198,199,199,198,198,198,179,198,177,194,179,202,179,194,173,179,199,194,173,194,171,171,74, +84,84,84,84,84,84,84,84,82,84,82,84,84,84,84,88,85,85,89,89,89,91,85,90,85,85,85,89,89,89,89,91,90,89,91,90,90,89,90,90,95,12,11,6,22,24,7,130,149,148,145,138,150,143,150,106,15,24,13,47,147,149,127,143,115,17,18,17,132,29,2,11,7,24,109,125,149,106,30,6,16,34,132,15,16,34,138,117,133,140,139,182,186,22,120,149,136,151,37,132,3,5,2,2,2,6,5,6,106,114,48,16,15,22,136,119,181,24,130,6,2,5,2,2,2,2,2,21,116,124,29,34,120,33,110,46,18,29,30,119,120,130,119,47,47,32,6,2,13,43,119,132,133,124,17,87,160,160,156,156,160,162,162,169,162,169,168,168,168,168,168,169,162,160,159,160,162,162,168,168,162,162,162,162,161,160,160,156,103,98,98,98,98,98,98,98,98,98,160,161,168,169,168,171,171,171,171,177,179,179,194,179,179,199,203,199,199,198,198,203,199,179,198,203,198,198,202,179,198,198,198,179,200,199,203,199,179,198,179,198,179,198,198,199,199,200,200,203,196,200,203,200,200,200,200,200,200,200,198,204,200,201,200,204,201,204,200,201,201,204,201,201,206,201,206,201,205,201,201,201,204,201,201,201,204,201,204,201,205,204,201,203,200,198,204,200,203,199,198,194,177,179,179,177,194,194,179,177,194,173,173,194,194,177,179,173,169,160,162,69, +82,84,82,82,84,82,82,82,82,84,82,84,84,84,84,88,89,85,86,89,89,89,86,88,90,85,86,82,85,89,89,85,85,89,89,89,89,89,89,89,95,61,14,129,129,29,34,116,141,149,144,138,145,150,115,4,22,122,15,117,140,127,149,143,150,111,18,192,18,7,2,6,13,13,24,128,126,110,15,2,21,110,126,6,22,130,141,45,133,153,151,144,116,6,181,132,47,120,34,106,20,2,5,11,6,2,6,7,123,122,109,11,22,17,110,123,141,14,20,2,11,6,2,12,2,5,2,13,106,120,30,32,46,106,46,36,106,43,47,120,132,120,120,45,106,24,15,11,29,31,47,149,120,97,87,98,103,159,160,161,156,160,169,162,160,169,156,160,162,168,162,161,160,156,160,156,156,162,168,169,168,162,156,160,156,160,103,98,98,96,102,92,92,92,98,98,98,103,93,159,161,162,162,156,168,162,169,160,173,171,171,173,194,202,194,203,203,200,195,199,199,203,199,179,200,198,198,198,179,198,200,199,202,196,198,200,203,198,199,203,198,179,198,179,196,204,200,204,200,200,200,200,198,200,199,199,199,199,203,200,200,204,200,200,204,204,204,201,200,201,205,204,201,201,205,205,201,206,205,204,201,201,201,205,201,201,201,204,204,200,200,198,199,200,179,198,179,177,179,179,169,194,162,168,177,177,169,194,169,162,171,177,171,173,171,194,162,171,169,74, +84,84,82,82,82,82,84,84,84,82,84,82,82,82,84,85,89,85,85,85,85,85,88,85,85,85,85,88,84,84,84,88,89,84,89,85,86,89,89,89,90,61,14,23,29,29,22,119,106,122,47,34,149,146,146,114,18,46,17,139,150,145,153,152,125,153,114,27,2,11,2,7,7,13,34,146,149,124,6,2,47,153,153,8,45,141,110,106,47,150,148,138,6,120,119,132,22,119,45,47,111,2,31,125,33,13,11,11,117,24,109,15,13,13,106,147,125,36,126,2,21,16,2,1,1,2,11,13,116,47,17,36,43,43,31,43,116,43,43,46,46,47,119,46,133,106,24,34,33,116,132,164,92,97,103,98,98,103,160,160,160,161,160,156,162,160,160,162,168,162,160,156,159,160,156,160,156,162,162,160,161,160,160,161,156,160,98,92,92,92,96,92,96,101,92,92,98,98,98,98,98,103,98,160,156,160,159,160,169,167,169,171,171,171,173,194,179,198,179,199,195,198,202,199,199,198,179,179,198,198,179,200,198,199,200,200,200,195,199,198,179,200,198,203,195,200,200,198,204,204,204,199,203,200,198,199,179,200,179,200,199,199,199,199,204,204,201,204,200,204,204,201,205,205,205,201,205,204,197,205,201,204,204,204,205,201,204,205,200,200,199,179,202,179,199,194,173,194,177,171,169,169,169,169,171,171,177,169,162,168,171,171,168,168,162,168,162,169,162,69, +84,82,81,82,84,81,88,84,82,82,82,84,82,84,84,84,84,84,82,85,89,84,85,84,88,84,84,82,84,82,84,85,85,85,90,85,90,85,89,95,91,82,0,2,11,106,11,106,36,46,22,22,153,145,148,127,17,29,8,149,149,142,153,154,144,153,20,5,2,11,7,6,7,13,34,126,138,32,16,5,36,147,149,8,129,136,31,16,132,146,140,11,33,123,147,141,15,47,29,43,114,4,123,105,182,185,3,13,30,110,33,24,20,126,147,124,136,129,147,2,7,13,2,5,2,2,11,47,130,29,29,47,116,116,124,114,33,31,138,116,136,132,138,114,186,144,120,46,23,35,71,96,96,93,98,98,98,98,160,159,160,156,160,156,160,156,160,156,162,156,160,156,103,156,160,156,162,169,160,160,162,160,160,160,161,98,96,102,92,92,92,92,91,92,92,92,92,96,101,98,98,98,98,98,98,98,103,159,160,160,160,162,162,168,169,168,173,194,179,179,198,179,179,179,179,198,179,194,179,179,198,203,198,198,198,199,204,204,202,196,199,199,179,199,203,195,203,200,200,203,198,203,198,179,179,179,179,198,179,198,179,202,179,198,179,199,199,199,200,200,204,201,204,201,201,205,206,201,204,201,200,201,204,200,201,204,200,200,203,199,198,198,202,194,169,177,171,171,177,168,162,162,162,169,169,169,171,168,168,169,169,169,168,160,162,162,160,162,160,73, +82,82,84,82,84,84,81,82,82,82,81,85,81,84,82,82,84,82,84,84,82,90,89,88,84,84,88,84,84,84,84,85,88,85,88,89,85,90,90,88,89,95,40,2,14,133,2,45,30,47,11,29,150,146,142,142,33,11,43,144,152,151,126,140,123,152,109,2,5,6,6,7,6,11,13,110,109,17,30,2,21,144,133,11,20,114,109,36,133,149,128,22,138,141,144,122,30,33,33,23,116,144,128,130,136,136,6,11,33,106,120,123,109,141,146,123,129,119,116,0,5,72,64,2,2,6,7,37,22,7,117,120,130,120,129,120,120,43,119,130,132,130,31,138,154,149,111,120,77,95,95,91,97,102,98,98,98,98,103,160,159,103,97,160,156,160,156,161,160,160,156,160,160,156,160,160,162,162,156,169,169,160,156,160,156,98,98,96,92,91,91,91,91,91,91,91,92,92,91,92,92,92,98,92,98,98,98,98,156,156,156,160,156,160,160,162,162,169,171,168,168,168,169,168,173,179,179,179,179,171,179,199,198,179,198,198,198,179,200,202,203,198,203,200,203,203,200,199,204,202,200,199,198,179,169,171,173,173,171,177,179,194,177,194,173,198,198,198,198,199,200,204,200,201,201,204,201,205,201,201,204,201,201,201,204,203,199,198,179,198,177,177,179,177,162,162,168,168,168,162,168,162,167,168,162,162,160,169,162,171,162,162,162,162,160,160,160,159,159,73, +84,84,82,84,82,82,84,84,84,81,85,83,85,81,82,84,82,84,82,84,88,85,85,82,84,84,84,84,84,84,84,88,84,89,88,88,89,88,85,90,90,88,54,7,43,33,6,5,33,20,13,16,148,150,143,148,122,16,47,144,120,122,15,106,46,138,33,2,2,11,6,6,6,7,13,31,33,14,30,5,7,119,124,11,37,106,120,36,151,153,127,111,124,138,132,33,30,30,22,43,114,186,140,147,132,17,6,21,118,30,116,137,132,136,130,110,36,139,120,2,5,6,2,38,2,11,11,43,2,11,119,37,120,36,120,47,124,110,47,47,132,31,46,144,154,119,46,85,89,89,90,85,92,87,98,98,98,103,98,156,103,159,103,156,160,156,156,160,162,160,156,160,156,160,160,160,162,161,156,160,156,160,160,98,103,98,96,92,92,91,101,91,90,91,91,91,92,91,92,92,92,101,92,93,98,98,103,98,103,98,98,98,98,103,156,160,103,156,156,160,156,98,103,159,156,169,171,173,179,179,179,194,179,179,179,194,179,198,198,179,198,179,179,198,179,199,200,200,199,203,199,199,198,179,168,168,162,162,169,168,162,169,169,171,168,171,177,198,179,202,200,204,201,203,201,205,204,201,201,204,201,201,203,204,200,202,179,198,177,194,173,171,169,171,162,162,168,162,162,162,162,162,162,162,160,168,162,162,162,160,162,160,162,160,156,160,156,156,156,71, +81,84,81,84,81,81,84,82,81,81,85,81,81,82,81,84,81,88,84,84,84,84,88,85,84,84,84,82,84,84,84,88,85,85,88,88,85,88,88,88,85,85,85,7,5,2,2,6,29,17,17,138,153,152,150,144,125,112,24,132,119,20,109,34,120,127,13,2,11,2,7,6,6,11,17,46,33,16,116,1,2,130,126,3,45,130,114,106,151,148,127,125,126,125,128,31,109,18,36,116,151,183,153,132,46,13,115,125,136,33,47,130,141,150,120,8,119,133,17,1,6,2,2,25,1,2,12,1,6,37,132,47,120,118,106,132,141,109,29,106,20,113,140,124,120,130,65,90,89,90,86,90,91,91,92,98,98,98,98,103,98,98,103,160,156,160,160,160,156,160,156,161,160,156,160,160,156,160,161,156,160,160,98,103,98,98,98,96,92,91,90,91,91,91,91,102,91,92,96,91,102,91,96,102,92,101,98,98,92,101,96,96,91,96,96,98,98,98,102,96,92,92,92,92,98,98,160,169,169,173,171,173,173,173,171,171,171,169,173,179,173,173,171,173,179,198,202,179,179,198,202,179,179,173,169,160,160,156,159,160,156,160,162,160,160,169,171,179,194,203,198,204,201,200,204,204,204,204,204,204,200,204,200,179,198,198,177,171,168,169,169,168,162,160,162,161,162,162,162,162,162,169,169,162,162,162,162,160,162,162,162,160,160,160,160,103,98,103,98,72, +81,81,84,84,81,81,85,81,81,81,81,81,82,84,82,84,82,84,84,84,82,84,84,82,82,84,82,84,81,84,84,84,84,84,88,85,84,84,84,88,88,88,95,51,2,2,5,2,13,22,109,150,153,150,128,125,139,153,122,132,132,31,18,110,132,15,5,2,2,11,2,7,14,123,126,116,37,11,106,2,6,106,144,22,30,116,110,34,145,144,132,127,125,151,151,24,106,33,45,141,149,142,153,122,15,21,138,153,142,132,114,147,114,132,138,130,138,110,6,2,2,9,2,2,2,6,5,2,2,130,130,44,130,117,47,47,123,33,33,136,153,124,149,30,65,86,90,86,84,88,90,91,90,91,91,87,97,96,98,98,98,103,98,159,103,159,160,161,160,160,160,98,103,160,161,161,160,161,156,160,156,98,103,98,92,96,98,101,92,92,91,92,91,101,92,102,92,91,92,92,92,91,91,92,92,92,92,91,91,92,91,91,90,79,92,91,92,92,87,92,91,90,91,92,92,87,98,98,159,97,160,161,168,162,160,168,162,162,156,169,173,162,169,169,171,173,194,202,194,179,179,194,162,167,156,156,98,98,98,160,156,98,98,97,159,156,173,194,202,179,198,199,198,200,202,200,200,200,200,200,200,199,199,202,194,169,171,162,162,162,160,156,162,156,160,156,162,156,160,162,162,160,169,160,156,160,160,160,161,160,156,161,156,103,98,156,98,98,98,72, +81,81,81,56,84,81,81,81,81,85,80,81,85,84,81,82,81,81,82,82,84,84,84,81,88,84,82,81,84,84,84,84,84,88,84,84,84,88,85,88,85,88,90,84,1,5,2,2,13,34,123,152,150,145,152,126,126,153,142,114,51,11,18,33,18,2,2,5,6,2,10,6,106,124,126,24,34,8,31,11,2,47,116,15,30,110,15,47,138,137,114,126,183,183,125,46,34,33,36,144,137,128,154,145,15,11,133,136,124,126,141,148,183,116,151,136,140,149,164,75,11,2,2,6,1,6,2,2,2,47,109,106,119,46,114,116,114,13,141,137,140,43,87,82,91,85,90,84,84,86,90,91,85,90,90,90,91,92,96,92,103,98,103,98,159,156,160,156,161,160,98,160,103,160,156,160,160,161,160,161,156,103,103,97,96,92,102,92,96,91,91,91,92,101,101,92,96,91,91,92,91,91,91,91,91,92,91,91,90,86,92,91,91,90,90,91,90,91,90,89,91,90,91,91,91,92,92,92,97,101,98,98,98,156,98,98,159,160,98,156,160,160,156,162,162,160,171,179,173,169,177,169,162,160,98,98,97,92,98,98,103,98,98,98,156,162,169,194,179,198,202,179,198,198,202,179,199,203,203,196,198,179,198,179,177,169,162,162,162,160,162,160,160,160,156,160,160,160,162,156,162,160,156,160,160,156,160,160,160,156,160,156,98,98,98,98,101,101,92,71, +81,81,81,81,56,81,81,81,81,85,83,81,81,85,81,81,85,84,81,82,82,81,82,84,81,84,81,84,81,84,84,84,84,84,84,84,84,88,88,81,88,88,89,100,5,2,2,5,21,120,126,150,144,145,141,35,144,153,145,125,110,17,24,32,6,6,1,2,11,6,7,11,22,122,124,7,12,29,23,11,2,36,109,8,16,22,18,110,138,128,142,145,149,153,19,34,43,22,29,130,153,143,153,110,111,151,8,130,144,133,153,153,151,137,37,117,45,67,62,38,9,2,5,25,5,11,11,2,2,47,124,120,126,111,46,142,140,17,120,132,183,131,90,90,85,85,85,82,85,89,90,90,85,90,85,91,91,92,92,98,103,98,103,160,160,160,156,98,103,98,103,103,98,98,98,101,98,103,98,160,98,98,102,98,96,91,92,92,91,92,92,91,92,102,92,101,91,91,91,91,91,95,92,91,91,90,91,91,91,89,86,90,86,95,90,90,89,90,85,90,91,89,90,82,91,91,91,91,92,92,98,98,101,96,101,92,98,98,98,98,96,98,98,160,156,160,168,162,171,171,171,168,160,98,96,92,92,96,96,98,93,98,98,160,160,161,162,177,173,173,179,198,179,202,179,202,202,179,202,179,202,179,171,171,168,168,160,160,160,160,156,160,160,156,160,161,160,156,160,156,160,160,160,160,156,160,160,159,103,98,103,98,98,93,102,92,96,92,92,62, +81,81,81,81,81,81,56,81,81,83,85,81,81,81,56,85,81,81,85,81,81,84,81,84,84,84,84,81,84,82,84,84,84,81,84,84,84,84,84,84,88,88,89,100,25,2,5,2,2,106,144,124,144,148,3,22,185,148,122,188,197,121,11,6,5,2,1,7,7,10,2,2,29,126,125,6,21,22,106,11,2,48,136,11,22,114,132,123,153,186,186,154,151,143,125,22,31,21,13,136,154,153,138,45,46,46,116,144,132,110,183,133,123,132,29,46,60,85,82,58,12,9,1,10,5,5,29,11,2,30,46,47,114,111,20,133,15,46,130,184,185,86,89,85,90,86,90,85,88,85,86,88,88,85,89,91,91,91,101,92,98,103,98,103,98,98,98,98,98,96,91,92,97,96,91,91,92,98,98,96,101,98,87,91,91,95,90,91,91,91,91,91,91,91,87,91,91,91,91,86,95,91,91,91,91,91,90,89,85,91,90,91,90,89,76,91,85,90,89,90,89,89,90,91,91,90,91,91,92,96,92,92,92,92,92,92,101,92,97,92,91,92,98,156,103,162,162,162,168,168,162,161,97,97,92,92,92,92,96,101,101,98,98,160,159,162,169,171,171,171,179,173,194,179,179,194,173,194,173,194,177,171,171,169,162,160,160,156,156,156,103,156,156,159,160,159,160,103,156,98,160,162,156,160,156,98,98,98,98,98,101,101,97,102,92,92,96,96,90,58, +56,81,56,81,81,56,84,81,81,56,81,81,81,85,81,81,81,88,81,81,85,81,81,81,81,81,81,88,81,84,84,84,84,81,88,84,84,84,84,84,84,85,88,90,53,2,2,2,5,31,127,144,150,140,8,14,132,138,11,36,138,8,1,6,11,2,1,10,12,11,11,5,119,151,29,13,37,17,117,2,2,130,136,6,37,137,132,151,186,186,153,186,145,150,142,8,11,6,17,139,144,149,114,14,47,46,141,147,126,134,153,19,24,131,29,81,90,88,88,90,40,58,28,5,10,2,26,9,21,134,182,182,191,120,67,34,46,47,141,191,87,90,86,90,90,89,91,85,85,90,85,86,89,90,86,90,91,91,91,92,96,93,98,98,98,98,98,96,101,91,91,91,91,92,85,91,91,91,91,89,91,91,90,90,90,86,90,91,91,91,91,92,91,91,90,91,91,91,91,91,86,91,90,91,92,91,91,90,92,90,92,91,85,91,89,90,91,85,86,89,89,89,90,91,90,91,90,91,91,87,101,92,92,91,92,92,91,91,91,91,91,87,101,98,98,160,156,103,156,160,169,156,102,92,92,92,96,92,92,96,98,98,103,93,156,156,156,169,169,169,169,173,173,171,171,173,171,177,173,171,168,169,168,168,162,162,156,160,160,103,97,98,98,98,98,156,103,159,103,160,156,160,156,103,97,98,97,101,98,97,97,101,98,97,97,92,92,97,96,58, +81,81,81,81,81,81,81,81,81,81,56,81,81,81,56,88,81,81,56,85,81,81,81,85,81,82,82,81,84,84,84,84,84,84,81,84,88,85,84,84,88,84,88,85,85,26,2,5,2,30,144,151,146,153,148,34,132,10,2,5,1,2,1,5,2,2,1,13,1,10,12,8,187,45,2,21,50,2,126,11,2,133,32,2,30,119,132,149,186,153,153,144,141,138,151,6,6,6,6,148,119,148,45,30,46,106,145,140,30,136,130,115,136,44,59,71,89,84,88,90,63,95,61,13,5,5,5,14,148,180,180,45,151,141,144,181,31,149,193,158,90,91,89,91,91,90,90,85,85,91,85,90,90,90,85,89,90,90,85,91,90,90,92,92,91,92,92,91,91,95,90,91,90,89,91,90,90,91,89,91,90,90,85,85,86,90,85,90,91,91,92,91,90,91,91,91,91,91,91,91,91,91,91,92,92,91,90,90,86,91,90,92,90,90,90,91,85,89,85,85,89,89,91,89,90,79,91,91,90,91,91,91,89,91,90,92,91,91,91,91,90,91,92,98,98,92,98,101,103,156,160,160,97,92,96,92,92,96,98,98,98,98,98,98,103,98,156,160,156,162,169,169,169,162,169,173,171,177,171,169,162,168,162,162,168,162,160,160,156,98,98,98,98,98,98,98,103,98,98,98,103,156,98,103,98,98,97,93,102,92,98,98,98,98,96,93,102,91,92,71, +81,80,82,81,81,81,56,82,81,81,81,81,81,80,81,81,81,81,81,81,81,81,81,81,81,85,81,84,81,82,84,84,81,84,85,84,81,81,88,84,84,84,88,88,85,99,2,2,12,30,132,144,148,150,122,141,5,6,2,2,5,1,2,2,12,2,1,2,5,6,2,14,140,110,2,21,29,2,137,17,2,130,20,2,43,106,147,153,186,154,144,136,108,139,116,2,13,11,11,151,132,144,8,29,119,133,124,109,30,119,132,149,93,96,95,90,85,88,88,88,88,89,100,40,5,11,26,40,197,182,141,119,185,130,182,154,187,149,158,85,91,85,90,89,91,91,91,90,91,89,91,89,85,88,89,89,91,85,90,86,90,89,91,88,91,91,91,95,90,89,89,90,89,91,90,89,91,89,91,90,85,86,85,91,90,82,86,90,91,91,91,91,91,96,92,91,91,91,90,90,91,91,92,92,91,91,91,91,91,89,91,90,86,90,91,89,85,89,89,89,85,86,90,91,90,85,91,89,92,91,91,90,91,91,91,91,91,91,91,85,91,91,91,92,91,91,92,92,97,98,160,156,98,96,102,92,92,92,96,97,98,97,92,96,96,96,98,98,98,156,161,162,168,169,169,171,173,171,173,169,169,168,162,162,160,161,156,160,156,98,98,98,98,98,103,93,156,98,97,101,98,98,101,97,97,101,98,101,92,96,97,92,97,97,101,102,93,93,101,71, +81,81,56,82,82,81,81,81,83,56,81,81,83,85,81,81,81,81,81,56,81,81,81,85,81,81,81,85,84,84,84,84,84,84,83,85,85,81,88,85,84,85,84,88,85,83,21,26,13,16,106,151,142,143,94,26,9,2,5,2,1,2,1,2,10,2,1,6,10,12,6,106,151,114,2,10,13,5,130,8,2,37,114,2,21,48,153,154,153,145,125,138,132,116,124,7,145,114,17,124,130,148,13,34,124,136,136,30,24,132,134,91,91,91,89,91,89,85,85,84,84,84,84,99,71,72,13,13,181,186,191,121,117,147,149,141,70,87,90,86,90,90,91,91,91,90,92,89,89,90,85,89,89,84,89,88,85,88,90,90,90,89,89,88,89,89,89,85,91,89,88,91,85,91,85,91,85,95,90,85,89,90,90,90,89,85,90,91,91,91,91,90,91,92,91,92,91,91,91,90,91,92,96,92,92,91,91,90,86,92,91,91,90,89,85,89,88,85,85,89,89,89,90,90,91,90,90,90,91,90,91,92,92,91,91,91,92,91,91,91,90,90,91,91,90,79,91,91,92,98,103,98,103,92,92,92,91,92,96,92,96,92,92,92,92,92,92,96,98,98,161,156,162,162,169,169,168,168,168,162,162,162,162,160,159,156,98,98,98,98,98,98,97,97,98,98,103,98,97,97,98,97,97,102,92,101,92,97,101,92,101,102,93,92,97,93,101,102,93,71, +81,81,80,81,81,56,84,82,81,81,81,56,81,81,56,81,81,81,56,84,56,81,81,81,82,81,81,81,82,84,82,82,85,81,85,81,81,81,85,81,81,83,85,81,88,85,59,21,22,32,153,93,71,69,85,6,2,2,2,9,5,1,2,11,2,2,1,2,5,9,21,141,132,21,6,1,2,2,36,113,2,47,37,2,36,120,154,153,145,146,150,31,106,116,15,11,144,145,115,140,133,31,13,36,34,141,22,15,36,69,95,90,91,90,90,85,85,88,88,84,84,84,84,88,90,85,63,64,40,130,180,185,147,67,130,192,90,88,85,91,90,91,89,90,86,91,90,89,91,85,95,89,89,85,89,85,84,88,89,88,89,82,84,84,88,85,89,89,84,89,91,85,90,89,91,90,90,86,85,91,85,91,95,85,86,90,91,91,90,90,89,92,91,96,96,91,91,91,91,91,91,92,92,96,102,91,90,89,91,90,90,85,85,89,89,85,86,89,84,89,84,90,86,89,90,90,89,89,91,91,90,89,86,90,92,91,92,90,91,88,90,86,88,90,89,90,91,91,97,98,98,98,98,96,91,91,92,91,91,92,92,91,91,92,91,91,91,92,98,98,98,98,156,160,169,169,168,162,160,156,160,162,160,98,156,98,97,98,102,93,98,98,97,98,98,97,98,97,98,103,98,97,97,92,92,92,92,92,101,97,97,101,92,97,102,93,97,98,97,71, +81,56,81,81,56,81,81,81,56,82,56,81,56,81,81,81,80,81,81,81,81,85,83,85,85,82,81,85,81,85,84,81,81,81,88,81,88,81,81,81,85,90,81,81,88,88,63,50,85,85,86,84,84,84,80,6,7,2,6,2,2,2,5,1,11,1,2,2,6,10,37,133,181,8,2,6,6,7,43,130,11,45,30,5,30,130,136,136,148,144,140,6,32,124,11,13,136,146,147,116,147,24,34,33,132,29,36,65,64,58,89,89,85,90,89,85,89,88,85,84,84,84,85,90,85,90,86,100,57,11,129,131,77,76,86,86,89,89,90,90,91,85,91,90,91,91,91,89,90,91,85,89,89,89,85,88,84,89,90,85,86,88,88,84,85,86,89,88,89,89,85,91,89,95,89,86,90,90,85,90,89,85,85,91,85,91,85,91,85,91,91,91,91,92,92,91,91,91,91,91,97,96,101,91,91,91,91,90,86,95,91,89,89,89,89,85,85,85,85,88,85,90,85,86,90,86,88,91,85,91,90,90,90,91,85,92,90,86,89,89,85,89,88,90,89,85,91,92,92,92,96,101,92,91,91,91,91,91,91,91,91,91,91,89,90,76,96,91,92,98,98,103,156,156,161,162,160,160,159,103,156,156,103,98,98,97,92,92,92,101,98,98,97,92,96,101,101,97,98,98,98,98,91,91,91,91,91,91,92,101,91,92,92,101,91,92,101,97,92,72, +56,81,82,81,56,81,56,56,81,80,81,81,81,81,56,81,81,84,56,81,81,81,81,81,83,56,85,81,81,85,80,85,81,88,81,81,81,88,81,81,81,81,83,85,81,81,81,88,81,88,85,85,88,85,90,6,2,2,7,2,2,5,2,5,21,34,2,5,1,21,132,140,148,18,22,11,11,10,21,132,11,27,39,10,16,116,136,138,144,122,148,29,29,22,2,30,146,140,136,136,144,130,141,34,151,44,40,95,84,88,90,89,89,89,88,88,88,88,85,88,85,84,88,85,90,91,90,85,91,82,85,85,90,90,85,89,89,89,88,95,90,90,88,91,90,91,90,90,91,85,91,85,84,85,89,85,89,90,85,89,84,89,85,89,85,90,85,89,90,85,90,90,91,89,91,90,85,91,85,91,90,90,91,90,85,89,91,85,91,90,89,92,92,92,92,91,92,92,91,91,91,92,92,91,91,91,91,89,91,85,85,89,84,84,88,88,84,88,82,84,88,85,90,85,85,85,90,90,90,85,89,89,89,89,90,90,90,85,89,89,89,85,86,89,89,90,91,91,91,87,96,91,92,92,85,90,91,91,91,91,91,91,89,79,95,89,86,92,92,92,98,98,103,98,98,98,98,103,98,98,97,98,92,92,92,92,91,91,91,92,96,98,92,96,96,96,96,92,101,92,97,101,97,91,91,91,91,92,91,91,91,92,92,92,92,101,92,97,97,72, +81,81,80,81,81,84,81,81,56,81,81,56,81,56,84,56,82,81,81,81,81,84,81,81,81,83,85,83,81,83,85,81,81,81,83,85,83,81,81,81,81,81,81,81,81,83,85,88,81,81,88,81,88,81,83,11,2,2,9,5,2,2,2,2,5,29,2,2,6,22,139,120,17,124,114,16,11,2,123,190,2,12,9,2,29,106,106,106,136,144,43,29,119,29,11,123,125,142,133,133,116,133,138,110,22,21,58,88,84,84,88,84,88,88,85,84,84,85,88,84,88,89,89,88,89,90,90,82,89,85,88,88,89,88,85,89,90,82,88,88,88,85,90,90,85,90,86,95,90,90,90,85,85,88,88,88,89,90,90,91,85,89,85,90,85,86,90,84,88,90,86,95,89,90,85,91,88,85,91,85,91,91,85,85,89,90,89,89,86,85,90,91,92,91,90,91,91,85,92,91,91,92,96,91,90,91,92,90,89,91,85,86,88,84,84,84,84,84,84,84,82,84,88,90,82,88,88,89,89,85,88,90,89,90,91,85,89,89,88,89,89,85,90,86,89,88,90,90,90,90,86,91,90,89,91,79,90,91,91,91,92,90,92,90,90,90,92,91,91,92,92,96,97,98,101,92,96,92,92,92,101,92,92,91,91,91,86,91,91,91,92,98,96,92,92,92,92,92,91,92,91,92,101,92,92,91,91,91,91,91,91,91,91,91,91,92,92,91,92,71, +56,81,56,81,56,81,56,81,84,81,56,81,81,81,81,81,81,56,82,81,81,81,81,81,81,81,81,81,81,56,81,83,81,81,81,81,81,81,81,56,85,81,81,81,81,81,81,81,83,81,83,81,83,81,99,10,25,6,2,2,2,6,2,2,2,30,2,6,1,36,144,136,132,116,11,15,6,11,16,11,11,11,2,2,11,13,31,46,125,17,33,47,180,43,134,108,109,132,114,149,123,147,46,66,75,57,84,82,84,81,85,84,84,88,84,84,88,88,85,88,88,89,89,85,88,85,88,88,85,88,89,85,90,90,88,85,88,88,85,84,84,88,90,83,90,90,90,88,91,90,89,89,85,88,84,84,88,90,89,85,90,90,85,91,90,90,85,89,90,88,90,90,85,89,88,84,89,90,91,90,89,85,91,90,86,89,90,90,90,90,91,91,92,92,90,92,90,91,90,91,92,92,101,91,91,91,90,86,90,90,90,82,85,84,84,84,84,84,84,82,82,84,84,88,84,84,84,84,88,84,84,88,90,86,90,89,89,89,89,84,85,88,85,89,89,89,90,85,91,90,90,85,91,90,90,91,90,90,92,90,92,85,91,85,91,89,79,90,91,91,92,97,92,92,92,92,91,91,92,92,92,92,91,91,91,91,91,91,91,91,92,96,92,92,91,91,91,91,91,91,91,91,92,92,86,91,86,91,91,92,92,91,91,91,91,91,91,91,91,62, +81,56,82,56,81,56,81,56,56,81,81,80,56,82,56,82,84,81,56,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,83,84,81,81,83,81,81,81,81,81,81,81,90,1,2,9,2,5,9,2,2,2,12,119,17,2,5,117,147,116,122,8,15,24,17,13,29,10,2,12,9,5,21,17,29,47,110,14,134,24,34,138,46,29,33,151,144,144,119,116,35,91,82,56,81,81,88,81,81,83,84,81,88,84,81,88,84,84,88,84,88,84,84,84,84,88,88,88,88,88,89,89,85,89,89,88,84,85,81,90,81,88,85,90,81,88,85,90,85,88,85,88,85,85,90,89,90,88,89,89,90,90,86,85,88,90,81,88,88,89,85,84,85,84,84,88,90,85,91,90,89,85,90,90,90,85,86,88,91,85,90,86,91,91,90,91,85,90,86,92,96,91,90,86,90,90,90,85,85,85,88,82,84,88,85,82,84,85,84,84,84,88,85,84,84,84,84,84,84,84,89,85,90,90,86,89,89,89,89,89,84,89,89,89,89,85,86,89,89,89,85,89,85,90,86,91,82,91,89,95,89,91,89,95,89,91,91,91,92,92,91,91,91,91,91,91,87,92,91,91,91,91,91,91,91,91,91,91,96,96,92,91,91,90,91,91,91,91,91,91,92,92,91,91,91,91,92,92,91,91,91,91,92,91,92,91,91,58, +56,81,80,82,81,81,56,84,81,56,81,81,81,81,81,81,56,84,82,84,81,81,81,81,81,81,56,84,81,81,81,81,81,81,81,81,81,81,80,81,81,81,81,81,81,81,81,81,81,81,81,81,83,81,83,2,5,9,2,2,2,21,6,6,2,43,126,3,2,30,17,34,29,2,15,127,127,125,109,10,13,2,2,2,7,106,140,133,21,21,106,142,146,151,109,10,37,151,140,36,48,74,57,83,81,80,81,84,81,81,81,81,81,81,81,88,88,84,81,81,88,85,85,88,85,88,84,84,84,84,84,84,88,89,90,88,88,85,84,88,85,81,88,81,85,81,88,85,88,88,88,81,88,85,81,88,88,85,88,85,88,90,88,90,90,88,85,81,88,85,88,85,88,81,84,84,88,91,85,91,90,89,91,90,85,88,85,85,89,88,90,90,91,90,90,91,85,89,89,90,90,90,96,90,92,91,85,91,90,89,89,88,88,85,84,81,88,81,85,81,88,81,84,82,84,84,84,84,84,84,84,88,90,89,86,89,85,89,89,89,90,89,89,89,89,89,86,88,85,85,89,89,85,86,90,90,85,91,91,90,90,86,95,85,91,89,92,85,91,91,91,91,91,91,89,91,91,91,91,91,91,91,91,91,91,92,91,92,96,92,92,92,92,92,91,79,89,91,91,91,91,86,91,91,91,91,91,92,91,91,91,91,92,91,91,87,91,91,91,58, +81,81,81,81,56,56,81,56,56,84,56,81,84,56,81,81,56,81,81,56,81,81,80,81,81,56,81,56,81,81,81,81,81,80,82,81,81,81,81,81,81,81,81,81,84,56,81,81,81,80,81,81,81,81,88,26,9,9,5,2,10,21,11,2,2,22,138,15,10,30,129,6,2,2,24,125,128,124,126,109,106,106,6,6,48,149,138,130,30,21,109,122,181,182,8,5,119,136,33,50,63,81,81,81,80,81,81,81,81,81,81,81,81,81,89,81,81,81,83,88,88,81,81,81,81,85,81,84,85,88,85,84,84,88,88,84,84,85,83,85,88,85,88,85,85,88,81,81,88,85,88,85,83,85,81,81,81,83,88,88,85,83,85,88,81,81,81,81,81,81,81,88,81,88,85,85,84,88,90,89,90,90,84,84,85,88,90,81,84,84,89,89,89,90,86,85,90,89,90,85,90,91,88,91,89,90,91,85,86,89,84,84,84,84,84,81,81,81,83,85,80,85,84,84,84,84,84,84,84,84,84,84,89,88,85,90,89,89,90,89,88,85,89,89,89,90,85,91,90,91,85,89,85,90,86,91,90,89,92,85,86,90,90,91,90,89,85,89,91,91,91,91,79,90,79,90,90,91,91,91,91,91,86,92,92,92,92,92,91,92,92,92,91,91,91,91,91,91,92,91,91,91,86,91,91,91,91,91,92,92,92,91,91,91,91,91,91,91,86,58, +56,81,56,82,81,84,81,56,81,81,56,81,56,81,80,82,81,81,56,56,84,81,81,81,84,81,56,82,81,81,82,81,81,81,56,81,56,56,81,81,81,81,81,81,81,81,80,81,80,81,80,81,81,81,56,81,6,10,7,9,12,7,9,11,2,12,21,10,12,21,13,11,5,11,116,132,145,115,123,46,130,109,21,119,116,116,43,46,26,21,130,137,184,118,2,6,106,132,60,81,81,81,81,81,80,81,81,83,81,81,81,81,81,81,81,81,81,84,81,81,81,81,88,81,81,88,81,85,83,82,84,81,85,84,84,82,88,88,85,81,81,81,81,85,83,81,81,81,81,81,81,81,88,81,81,81,81,81,83,81,81,81,90,80,81,81,81,81,81,81,81,81,81,81,88,81,88,85,85,88,85,88,85,84,84,84,81,85,84,81,88,89,89,90,90,89,84,88,85,89,91,88,89,85,91,90,85,90,85,89,89,88,84,84,81,88,81,81,81,81,88,84,84,84,85,84,81,82,84,82,84,84,84,89,89,88,85,86,88,89,86,89,86,89,90,85,85,89,90,86,91,89,90,90,91,91,86,91,82,91,90,91,85,91,91,90,90,85,90,90,91,91,90,90,90,91,91,91,91,91,91,91,91,86,91,91,92,91,92,92,91,91,91,91,91,91,91,82,91,86,91,91,91,91,91,91,91,91,91,92,91,91,91,91,91,91,86,86,95,57, +81,81,84,56,81,56,84,81,81,56,81,56,81,56,81,81,56,81,81,56,81,81,56,56,81,56,81,81,80,80,56,81,81,81,81,80,82,80,82,56,81,81,80,80,80,61,81,81,81,81,81,81,80,81,80,99,10,2,10,2,2,29,32,2,6,9,27,10,2,5,10,13,10,11,119,116,122,116,111,21,47,18,110,120,106,181,144,45,39,26,30,181,138,8,2,21,149,66,58,81,81,80,81,81,81,81,81,84,80,81,80,81,81,81,81,81,83,81,81,81,83,81,81,88,81,81,88,81,81,90,84,83,81,85,88,85,81,81,81,88,81,88,88,81,83,85,88,80,81,81,81,81,81,81,83,80,56,81,81,81,81,83,81,81,81,83,80,81,81,85,81,81,83,81,81,83,85,83,89,88,88,89,85,84,84,88,81,85,88,85,84,88,88,88,85,88,85,88,85,88,84,88,85,84,88,91,88,88,85,88,85,84,84,81,84,85,81,81,81,81,85,81,84,84,84,85,85,84,84,84,82,84,84,88,82,90,89,89,85,91,85,85,90,90,89,86,91,91,91,91,90,79,91,91,91,90,91,90,89,91,90,86,92,91,91,91,90,90,86,91,91,91,91,91,91,90,90,91,91,91,86,91,91,91,91,91,92,92,92,92,91,91,91,91,91,86,91,91,86,91,91,91,91,91,91,91,92,91,92,86,91,91,86,90,91,91,92,90,89,58, +81,56,56,81,56,81,81,81,56,82,56,56,56,81,81,61,81,56,84,56,81,56,81,56,81,81,81,56,81,81,81,81,81,81,80,56,56,61,83,82,56,82,80,80,82,56,56,80,82,80,81,80,81,80,81,81,54,2,2,9,10,17,106,17,2,6,5,5,2,62,40,15,11,9,6,46,138,147,109,11,141,32,138,46,141,132,119,46,11,2,29,132,141,11,2,22,77,81,81,80,81,81,80,80,81,80,80,61,81,81,81,80,81,80,81,81,80,84,81,81,81,81,81,90,83,81,81,81,81,81,81,81,81,84,81,81,81,88,81,88,85,88,81,81,81,81,83,85,83,85,81,81,81,81,81,81,81,81,80,81,81,81,83,81,81,83,81,81,83,81,83,85,81,81,81,81,81,81,81,88,88,85,88,85,88,81,81,81,85,81,88,84,84,84,84,88,85,84,84,81,84,84,84,84,89,90,89,85,84,84,84,84,84,84,84,80,81,88,81,81,81,88,84,82,88,82,88,85,89,89,84,84,84,84,89,88,89,85,91,85,92,91,90,91,86,90,91,91,91,91,91,91,91,91,91,86,90,86,91,91,91,92,91,101,96,92,92,92,92,92,92,92,91,91,91,86,91,86,90,79,90,91,91,86,92,91,91,91,92,91,91,91,91,91,91,91,91,91,91,91,91,91,92,92,91,91,91,91,91,91,90,89,86,91,90,86,86,86,91,58, +56,84,82,81,82,81,56,81,56,80,81,56,82,56,56,80,61,80,56,81,81,56,82,81,56,80,56,82,56,81,56,81,56,80,56,80,80,80,56,80,80,80,81,80,80,80,80,81,80,80,61,81,81,81,81,81,81,6,9,5,5,43,130,136,6,53,26,54,2,2,2,18,22,2,6,36,136,126,118,13,141,34,120,43,136,136,134,30,26,2,141,119,29,2,117,187,80,80,61,81,80,81,81,81,81,81,81,80,80,81,81,80,80,61,83,81,81,81,81,81,81,81,81,81,81,81,81,81,88,81,88,81,81,81,81,81,81,81,90,80,81,81,81,81,81,81,81,83,81,81,83,85,81,81,81,80,81,81,80,80,81,83,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,88,85,88,81,88,81,81,85,83,81,81,85,88,84,84,84,84,88,85,84,88,82,84,84,84,85,90,89,84,84,84,84,84,84,81,84,81,81,81,88,81,84,81,84,82,84,88,85,85,84,89,84,85,84,84,84,89,89,90,90,86,90,91,89,92,91,91,91,91,91,91,92,91,91,91,91,91,91,92,91,91,92,92,92,92,96,92,92,92,91,92,92,91,91,91,91,91,91,91,90,90,90,86,91,91,91,90,86,91,91,91,91,91,91,91,91,91,91,91,91,91,92,92,91,91,91,91,91,91,89,91,90,91,86,90,89,91,89,90,85,62, +56,81,81,80,56,56,56,81,56,61,56,80,56,56,82,56,81,56,56,63,80,80,56,56,63,80,56,61,63,81,80,61,80,80,61,80,56,80,61,81,80,80,61,81,80,56,80,61,81,80,80,56,80,61,81,80,81,51,2,2,9,46,123,136,42,88,82,83,2,6,2,29,111,112,16,116,133,182,111,29,132,119,130,139,46,43,48,197,147,122,49,120,32,26,78,80,56,81,80,56,80,81,61,83,56,80,82,80,56,83,80,80,83,80,61,56,81,81,81,81,81,81,81,81,81,80,80,81,81,81,81,84,81,81,83,81,81,81,83,88,83,81,81,85,81,81,85,81,83,81,81,81,81,83,81,80,81,81,81,56,80,81,56,81,81,81,81,81,81,83,81,81,81,81,56,81,81,81,81,81,81,88,81,81,81,81,83,81,88,82,84,84,84,85,84,84,88,84,81,84,81,84,84,84,88,85,84,84,82,84,82,81,81,84,81,81,56,81,81,85,81,84,84,84,84,84,88,88,85,85,84,84,85,89,85,85,91,90,91,82,91,90,91,90,90,91,90,91,91,91,86,91,90,91,91,91,92,91,92,91,92,92,92,92,92,91,91,92,92,92,101,92,96,93,92,92,96,91,91,86,91,90,90,92,86,79,91,95,90,91,91,90,86,91,91,91,91,91,87,92,91,92,91,92,91,91,91,91,91,90,79,89,85,86,91,86,89,91,85,58, +81,56,56,56,82,56,81,56,81,56,80,56,82,56,56,80,82,56,61,56,56,63,80,56,61,80,56,80,80,56,56,81,80,56,80,80,80,56,80,80,56,80,56,80,80,80,56,56,80,80,56,80,80,56,80,80,61,83,26,2,2,129,124,132,77,80,80,85,26,1,2,5,29,18,132,32,110,141,114,47,138,32,70,138,120,44,193,134,176,180,17,130,82,81,80,80,80,56,80,82,80,56,80,80,80,80,80,80,80,81,56,81,83,80,80,81,83,81,81,80,81,81,81,81,81,81,80,81,80,81,81,56,84,81,81,81,81,81,83,81,90,83,81,83,81,83,81,81,83,81,81,81,81,81,83,81,81,81,81,83,81,56,84,81,80,81,81,81,81,81,81,80,56,82,81,80,81,81,81,88,81,84,81,56,81,81,81,81,84,84,84,84,88,88,84,84,84,84,84,81,88,85,84,84,84,84,88,84,81,84,81,84,82,81,84,81,81,81,83,81,85,84,84,84,82,84,84,84,84,84,88,84,85,82,89,89,89,89,85,90,85,85,89,85,89,89,90,91,90,90,89,91,91,92,90,91,86,86,92,91,91,91,91,91,91,79,91,91,91,92,92,92,97,96,92,97,92,92,91,91,89,86,92,90,90,85,85,90,85,86,85,90,90,91,85,91,91,91,91,91,92,91,91,91,86,91,91,79,91,90,90,91,91,89,91,89,92,90,85,58, +81,82,81,81,81,56,56,56,56,84,56,80,56,81,56,56,56,56,56,80,56,56,56,80,80,56,56,56,81,80,80,56,56,80,80,56,81,80,80,56,80,80,80,80,56,81,80,80,56,80,80,81,80,80,80,56,80,80,81,11,5,119,133,157,80,80,81,81,54,29,1,12,2,43,123,120,120,126,29,119,69,61,29,192,188,130,132,129,120,43,58,56,80,81,80,80,56,80,80,80,81,80,81,80,56,81,80,80,56,56,81,80,80,81,81,81,81,81,80,81,81,80,81,81,80,81,80,81,81,80,81,83,81,81,84,81,81,81,81,81,83,81,81,81,81,81,81,81,83,81,83,80,81,81,81,81,56,81,81,81,80,83,81,80,81,81,81,81,81,81,81,81,81,80,81,81,80,81,82,80,81,81,81,81,81,81,81,81,81,88,84,84,84,84,82,84,84,84,88,81,81,81,88,84,84,84,81,82,81,84,81,81,81,81,84,81,81,81,81,81,81,84,81,81,84,84,84,84,84,85,84,84,88,88,89,84,84,88,89,88,84,85,84,88,82,89,89,85,90,89,90,91,90,86,91,91,90,86,86,92,91,90,91,91,91,91,90,91,91,91,92,92,92,96,96,96,96,91,91,91,91,90,85,86,89,89,90,91,90,82,91,85,86,86,90,91,91,91,91,91,91,87,92,91,91,91,86,95,90,90,79,89,90,90,90,91,89,91,82,57, +82,82,81,84,82,56,82,81,81,56,56,56,56,56,81,56,80,56,56,56,56,56,80,56,56,80,56,56,56,56,56,80,56,80,56,80,56,80,56,80,56,56,80,56,80,56,80,56,80,56,80,56,56,80,56,80,56,80,56,56,38,67,72,56,80,56,56,81,56,35,141,33,2,10,45,132,144,141,64,82,80,56,80,52,38,65,65,85,58,80,56,80,56,80,56,81,80,56,80,56,80,56,80,56,80,56,80,56,80,56,80,56,81,80,80,81,80,83,80,81,81,81,81,81,81,80,81,80,83,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,80,81,81,81,81,81,80,81,81,80,81,81,80,81,81,81,83,80,80,81,80,81,81,81,81,80,81,80,81,81,81,81,88,84,81,81,88,81,82,81,84,82,82,81,81,81,81,81,88,84,84,82,84,81,84,81,81,81,81,81,81,81,81,81,81,81,81,88,81,84,81,88,84,84,84,84,84,84,84,88,84,84,84,88,85,84,84,84,84,84,84,84,89,84,89,89,85,90,90,90,85,91,90,91,89,92,79,90,91,91,91,91,91,91,91,91,92,92,92,92,92,91,91,91,91,90,86,85,89,85,86,85,86,91,89,85,90,85,90,91,82,86,91,90,91,91,91,91,91,91,91,91,91,79,91,90,91,79,90,91,79,90,91,89,58, +82,81,82,81,81,56,81,56,56,56,81,56,81,56,56,56,56,80,80,80,56,80,56,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,56,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,81,80,6,14,28,39,133,149,157,80,80,80,56,80,80,81,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,81,80,81,80,81,83,80,80,56,80,80,81,83,56,81,80,81,80,81,81,83,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,80,80,80,81,81,80,81,81,81,56,83,80,56,80,83,56,83,81,80,80,81,81,81,83,81,80,81,81,81,81,81,80,81,81,81,81,81,81,84,81,81,84,84,81,84,84,84,81,81,81,81,81,84,84,84,84,81,84,81,84,81,81,82,81,81,81,81,56,81,81,81,81,81,81,84,81,84,81,82,81,82,84,84,81,81,84,82,84,84,84,84,84,84,84,84,84,84,84,84,84,89,89,90,89,89,85,89,90,90,90,90,90,91,90,91,90,90,91,91,92,92,92,91,92,91,91,91,90,90,90,90,90,85,90,89,89,90,85,89,89,85,89,85,89,90,90,85,91,90,86,90,90,86,90,85,86,90,85,85,90,90,90,90,86,90,90,90,90,58, +}; + +MWIMAGEHDR image_rle8 = { + 320, 200, /* width, height*/ + 1, 8, /* planes, bpp*/ + 320, 1, /* pitch, bytesperpixel*/ + 1, 256, /* compression, palsize*/ + -1L, /* transcolor*/ + palette, + imagebits, +}; Index: bmp/convxpm.perl =================================================================== --- bmp/convxpm.perl (nonexistent) +++ bmp/convxpm.perl (revision 174) @@ -0,0 +1,116 @@ +#!/bin/perl + +# This is a little perl script that converts XPM colors from +# X colors to their true RGB format + +# Change this first, if you rgb.txt file lives somewhere else +$RFILE="/usr/X11R6/lib/X11/rgb.txt"; + +# First, Open up the RGBFILE, and make a hash table + +open (RGBIN, $RFILE) || die "Can not file $RGBFILE!"; + +while() +{ + chop($_); + + $firstchar = substr($_, 0, 1); + + if ($firstchar ne "!") + { + ($r, $g, $b, $val) = /\s*(\d*)\s*(\d*)\s*(\d*)\s*(\w*)/; + $rgbvals{$val} = sprintf("#%2.2x%2.2x%2.2x", $r, $g, $b); + } +} + +close(RGBIN); + +# Ok then, are we in batch mode or individual mode? + +if ($ARGV[0] eq "--batch") +{ + $srcdir = $ARGV[1]; + $destdir = $ARGV[2]; + + # Batch mode, open up directory and fire + opendir(INDIR, $srcdir) || die "Directory $ARGV[1] doesn't exist"; + my @xpms = readdir(INDIR); + closedir(INDIR); + + foreach $xpmfile (@xpms) + { + if ($xpmfile =~ /\.xpm/g) + { + print "Converting $srcdir/$xpmfile to $destdir/$xpmfile...\n" + &convert_xpm("$srcdir/$xpmfile", "$destdir/$xpmfile"); + } + } +} +else +{ + # regular mode + &convert_xpm($ARGV[0], $ARGV[1]); +} + + +sub convert_xpm +{ + # Open up the file to convert it + + $filea = $_[0]; + $fileb = $_[1]; + + print"Writing from $filea to $fileb...\n"; + + open(XPMIN, $filea) || die "Could not file $filea for processing...\n"; + open(XPMOUT,">$fileb") || die "Could not open file $fileb for writing...\n"; + + $xpmline = ; + + die "$fila is Not an XPM file!\n" if (!($xpmline =~ /\/\* XPM \*\/\n/)); + + $firstchar = substr($xpmline, 0, 1); + + while($firstchar ne "\"") + { + print XPMOUT $xpmline; + $xpmline = ; + $firstchar = substr($xpmline, 0, 1); + } + + # Now we have the numbers. Grab em! + + ($width, $height, $colors, $chars) = ($xpmline =~ /\"(\d*) (\d*) (\d*) (\d*)\",\n/); + + print XPMOUT $xpmline; + + # Now read in the appropriate number of colors + + for($i = 0; $i < $colors; $i++) + { + $xpmline = ; + chop($xpmline); + + ($str, $val, $color) = ($xpmline =~ /\"(.+)\s+(\w*)\s+(.+)\"/); + + $firstchar = substr($color, 0, 1); + + if ($firstchar ne "#") + { + $color = $rgbvals{$color} if ($color ne "None"); + } + + print XPMOUT "\"$str $val $color\",\n"; + } + + while() + { + print XPMOUT $_; + } + + close(XPMIN); + close(XPMOUT); +} + + + Index: bmp/win/edit.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/win/edit.bmp =================================================================== --- bmp/win/edit.bmp (nonexistent) +++ bmp/win/edit.bmp (revision 174)
bmp/win/edit.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/win/button.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/win/button.bmp =================================================================== --- bmp/win/button.bmp (nonexistent) +++ bmp/win/button.bmp (revision 174)
bmp/win/button.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/win/chkbox.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/win/chkbox.bmp =================================================================== --- bmp/win/chkbox.bmp (nonexistent) +++ bmp/win/chkbox.bmp (revision 174)
bmp/win/chkbox.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/win/radio.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/win/radio.bmp =================================================================== --- bmp/win/radio.bmp (nonexistent) +++ bmp/win/radio.bmp (revision 174)
bmp/win/radio.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/win/radio2.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/win/radio2.bmp =================================================================== --- bmp/win/radio2.bmp (nonexistent) +++ bmp/win/radio2.bmp (revision 174)
bmp/win/radio2.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/win/chkbox_d.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/win/chkbox_d.bmp =================================================================== --- bmp/win/chkbox_d.bmp (nonexistent) +++ bmp/win/chkbox_d.bmp (revision 174)
bmp/win/chkbox_d.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/cs1.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/cs1.bmp =================================================================== --- bmp/cs1.bmp (nonexistent) +++ bmp/cs1.bmp (revision 174)
bmp/cs1.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/microwin.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/microwin.bmp =================================================================== --- bmp/microwin.bmp (nonexistent) +++ bmp/microwin.bmp (revision 174)
bmp/microwin.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/close4.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/close4.bmp =================================================================== --- bmp/close4.bmp (nonexistent) +++ bmp/close4.bmp (revision 174)
bmp/close4.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/cs1.c =================================================================== --- bmp/cs1.c (nonexistent) +++ bmp/cs1.c (revision 174) @@ -0,0 +1,178 @@ +/* Generated by convbmp*/ +#include "device.h" + +/* MWIMAGEHDR image_cs1 converted from cs1.bmp*/ + +static MWPALENTRY palette[2] = { + RGBDEF( 0, 0, 0 ), /* pal 0*/ + RGBDEF( 255, 255, 255 ), /* pal 1*/ +}; + +static MWUCHAR imagebits[] = { +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x83,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0xfe,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x03,0xf8,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x0f,0xe0,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x3f,0x80,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0xfe,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x03,0xf8,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x0f,0xe0,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x3f,0xc0,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0xff,0x00,0x00,0x0f,0xf7,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x03,0xfc,0x00,0x00,0x3f,0xc1,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x0f,0xf0,0x00,0x00,0x7f,0x00,0x7f,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x3f,0xc0,0x00,0x01,0xfe,0x00,0x3f,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0xff,0x00,0x00,0x07,0xf8,0x00,0x0f,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0x80,0x00,0x03,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x07,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xfe,0x00,0x00,0x0f,0xf0,0x00,0x00,0x7f,0x80,0x00,0x07,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xf8,0x00,0x00,0x3f,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xf0,0x00,0x00,0xff,0x00,0x00,0x07,0xf8,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xc0,0x00,0x03,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x00,0xff,0x1f,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0x00,0x00,0x0f,0xf0,0x00,0x00,0x7f,0x80,0x00,0x03,0xfc,0x07,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xfc,0x00,0x00,0x3f,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xf0,0x03,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xf0,0x00,0x00,0x7f,0x00,0x00,0x07,0xf8,0x00,0x00,0x3f,0xc0,0x01,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xc0,0x00,0x01,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x00,0xff,0x00,0x00,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0x00,0x00,0x07,0xf0,0x00,0x00,0x7f,0x80,0x00,0x03,0xfc,0x00,0x00,0x3f,0xff,0xff,0x80,0x00, +0xff,0xfc,0x00,0x00,0x1f,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xf0,0x00,0x00,0x1f,0xff,0xff,0x80,0x00, +0xff,0xf0,0x00,0x00,0x7f,0x00,0x00,0x07,0xf8,0x00,0x00,0x3f,0xc0,0x00,0x00,0x0f,0xff,0xff,0x80,0x00, +0xff,0xc0,0x00,0x01,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x00,0xff,0x00,0x00,0x00,0x07,0xff,0xff,0x80,0x00, +0xff,0x00,0x00,0x07,0xf0,0x00,0x00,0x7f,0x80,0x00,0x03,0xfc,0x00,0x00,0x00,0x03,0xff,0xff,0x80,0x00, +0xf8,0x00,0x00,0x1f,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xf8,0x00,0x00,0x00,0x01,0xff,0xff,0x80,0x00, +0xfe,0x00,0x00,0x7f,0x00,0x00,0x07,0xf8,0x00,0x00,0x3f,0xe0,0x00,0x00,0x00,0x00,0xff,0xff,0x80,0x00, +0xff,0x80,0x01,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x00,0xff,0x80,0x00,0x00,0x00,0x00,0x7f,0xff,0x80,0x00, +0xff,0xc0,0x07,0xf0,0x00,0x00,0x7f,0x80,0x00,0x03,0xfe,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0x80,0x00, +0xff,0xf0,0x1f,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xf8,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0x80,0x00, +0xff,0xf8,0x7f,0x00,0x00,0x07,0xf8,0x00,0x00,0x3f,0xe0,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0x80,0x00, +0xff,0xfd,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x00,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0x80,0x00, +0xff,0xff,0xf0,0x00,0x00,0x7f,0x80,0x00,0x03,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0x80,0x00, +0xff,0xff,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0x80,0x00, +0xff,0xff,0xe0,0x00,0x07,0xf8,0x00,0x00,0x3f,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0x80,0x00, +0xff,0xff,0xf8,0x00,0x1f,0xe0,0x00,0x00,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0x80,0x00, +0xff,0xf9,0xfe,0x00,0x7f,0xc0,0x00,0x03,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x80,0x00, +0xff,0xf0,0xff,0x01,0xff,0x00,0x00,0x0f,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x80,0x00, +0xff,0xe0,0x3f,0xe3,0xfc,0x00,0x00,0x3f,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x80,0x00, +0xff,0xe0,0x0f,0xcf,0xf0,0x00,0x00,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x80,0x00, +0xff,0xc0,0x07,0xff,0xc0,0x00,0x01,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x80,0x00, +0xff,0x80,0x01,0xfe,0x00,0x00,0x07,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x80,0x00, +0xff,0x00,0x00,0xff,0x00,0x00,0x1f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x80,0x00, +0xff,0x00,0x00,0x3f,0xc0,0x00,0x7f,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x80,0x00, +0xfe,0x00,0x00,0x1f,0xe0,0x01,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x80,0x00, +0xfe,0x00,0x00,0x07,0xf8,0x07,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x80,0x00, +0xfc,0x00,0x00,0x01,0xfe,0x1f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00, +0xf8,0x00,0x00,0x00,0xfe,0x7f,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00, +0xf8,0x00,0x00,0x00,0x3f,0xff,0x00,0x00,0x1f,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00, +0xf8,0x00,0x00,0x00,0x1f,0xfc,0x00,0x00,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00, +0xf0,0x00,0x00,0x00,0x07,0xf8,0x00,0x03,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00, +0xf0,0x00,0x00,0x00,0x03,0xfe,0x00,0x0f,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00, +0xe0,0x00,0x00,0x00,0x00,0xff,0x00,0x1f,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00, +0xe0,0x00,0x00,0x00,0x00,0x7f,0xc0,0x3f,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00, +0xe0,0x00,0x00,0x00,0x00,0x1f,0xf0,0x7f,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00, +0xc0,0x00,0x00,0x00,0x00,0x0f,0xf8,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00, +0xc0,0x00,0x00,0x00,0x00,0x03,0xfc,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00, +0xc0,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00, +0xc0,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00, +0x80,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00, +0x80,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00, +0x80,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00, +0x80,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00, +0x80,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x03,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x3f,0xe0,0x00,0x00,0x00,0x00,0x07,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xfe,0x1f,0xf8,0x00,0x00,0x00,0x00,0x07,0x80,0x00, +0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xfc,0x07,0xfc,0x00,0x00,0x00,0x00,0x07,0x80,0x00, +0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xf8,0x01,0xff,0x00,0x00,0x00,0x00,0x0f,0x80,0x00, +0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xf0,0x00,0x7f,0xc0,0x00,0x00,0x00,0x0f,0x80,0x00, +0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xe0,0x00,0x3f,0xe0,0x00,0x00,0x00,0x0f,0x80,0x00, +0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x80,0x00,0x3f,0xf8,0x00,0x00,0x00,0x1f,0x80,0x00, +0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xfc,0x00,0x00,0x7f,0xfc,0x00,0x00,0x00,0x1f,0x80,0x00, +0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xfe,0x00,0x00,0x00,0x1f,0x80,0x00, +0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xfe,0xff,0x80,0x00,0x00,0x3f,0x80,0x00, +0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xf8,0x7f,0xc0,0x00,0x00,0x7f,0x80,0x00, +0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xe0,0x1f,0xf0,0x00,0x00,0x7f,0x80,0x00, +0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0x80,0x0f,0xf8,0x00,0x00,0xff,0x80,0x00, +0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xfe,0x00,0x03,0xfe,0x00,0x00,0xff,0x80,0x00, +0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xf8,0x00,0x00,0xff,0x80,0x01,0xff,0x80,0x00, +0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xe0,0x00,0x01,0xff,0xc0,0x03,0xff,0x80,0x00, +0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0x80,0x00,0x03,0xff,0xf0,0x03,0xff,0x80,0x00, +0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xfe,0x00,0x00,0x0f,0xff,0xf8,0x07,0xff,0x80,0x00, +0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xf8,0x00,0x00,0x3f,0xc3,0xfe,0x0f,0xff,0x80,0x00, +0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xe0,0x00,0x00,0xff,0x01,0xff,0x1f,0xff,0x80,0x00, +0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0x80,0x00,0x03,0xfc,0x00,0x7f,0x9f,0xff,0x80,0x00, +0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xfe,0x00,0x00,0x0f,0xf0,0x00,0x1f,0xff,0xff,0x80,0x00, +0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xf8,0x00,0x00,0x3f,0xc0,0x00,0x0f,0xff,0xff,0x80,0x00, +0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xe0,0x00,0x00,0xff,0x00,0x00,0x07,0xff,0xff,0x80,0x00, +0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x80,0x00,0x03,0xfc,0x00,0x00,0x1f,0xff,0xff,0x80,0x00, +0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x03,0xfe,0x00,0x00,0x0f,0xf0,0x00,0x00,0x7f,0xff,0xff,0x80,0x00, +0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x0f,0xfc,0x00,0x00,0x3f,0xc0,0x00,0x01,0xfe,0x3f,0xff,0x80,0x00, +0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x3f,0xf0,0x00,0x00,0xff,0x00,0x00,0x07,0xf8,0x0f,0xff,0x80,0x00, +0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0xff,0xc0,0x00,0x03,0xfe,0x00,0x00,0x1f,0xe0,0x03,0xff,0x80,0x00, +0xff,0xfe,0x00,0x00,0x00,0x00,0x03,0xff,0x00,0x00,0x07,0xf8,0x00,0x00,0x7f,0x80,0x01,0xff,0x80,0x00, +0xff,0xff,0x00,0x00,0x00,0x00,0x0f,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x01,0xfe,0x00,0x00,0x7f,0x80,0x00, +0xff,0xff,0x80,0x00,0x00,0x00,0x3f,0xf0,0x00,0x00,0x7f,0x80,0x00,0x07,0xf8,0x00,0x00,0x7f,0x80,0x00, +0xff,0xff,0xe0,0x00,0x00,0x00,0xff,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xe0,0x00,0x00,0xff,0x80,0x00, +0xff,0xff,0xe0,0x00,0x00,0x03,0xff,0x00,0x00,0x07,0xf8,0x00,0x00,0x3f,0x80,0x00,0x03,0xff,0x80,0x00, +0xff,0xff,0xf0,0x00,0x00,0x0f,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x00,0xfe,0x00,0x00,0x0f,0xff,0x80,0x00, +0xff,0xff,0xfc,0x00,0x00,0x3f,0xf0,0x00,0x00,0x7f,0x80,0x00,0x03,0xf8,0x00,0x00,0x3f,0xff,0x80,0x00, +0xff,0xff,0xfe,0x00,0x00,0xff,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xe0,0x00,0x00,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0x00,0x03,0xff,0x00,0x00,0x07,0xf8,0x00,0x00,0x3f,0x80,0x00,0x03,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0x80,0x0f,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x00,0xfe,0x00,0x00,0x0f,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xc0,0x3f,0xf0,0x00,0x00,0x7f,0x80,0x00,0x03,0xf8,0x00,0x00,0x3f,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xf0,0x7f,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xe0,0x00,0x00,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xf9,0xff,0x00,0x00,0x07,0xf8,0x00,0x00,0x3f,0x80,0x00,0x03,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x00,0xfe,0x00,0x00,0x0f,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x7f,0x80,0x00,0x03,0xf8,0x00,0x00,0x3f,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0x80,0x00,0x01,0xfe,0x00,0x00,0x0f,0xe0,0x00,0x00,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xc0,0x00,0x07,0xf8,0x00,0x00,0x3f,0x80,0x00,0x03,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xf0,0x00,0x1f,0xe0,0x00,0x00,0xff,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xfc,0x00,0x7f,0x80,0x00,0x03,0xfc,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xfe,0x01,0xfe,0x00,0x00,0x0f,0xf0,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0x87,0xf8,0x00,0x00,0x3f,0xc0,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xdf,0xe0,0x00,0x00,0xff,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x03,0xfc,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x0f,0xf0,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x3f,0xc0,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0xff,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x03,0xfc,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x0f,0xf0,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x3f,0xc0,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00, +}; + +MWIMAGEHDR image_cs1 = { + 145, 156, /* width, height*/ + 1, 1, /* planes, bpp*/ + 20, 1, /* pitch, bytesperpixel*/ + 1, 2, /* compression, palsize*/ + -1L, /* transcolor*/ + palette, + imagebits, +}; Index: bmp/micro2.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/micro2.bmp =================================================================== --- bmp/micro2.bmp (nonexistent) +++ bmp/micro2.bmp (revision 174)
bmp/micro2.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: bmp/microwin.c =================================================================== --- bmp/microwin.c (nonexistent) +++ bmp/microwin.c (revision 174) @@ -0,0 +1,407 @@ +/* Generated by convbmp*/ +#include "device.h" + +/* MWIMAGEHDR image_microwin converted from microwin.bmp*/ + +static MWPALENTRY palette[16] = { + RGBDEF( 0, 0, 0 ), /* pal 0*/ + RGBDEF( 0, 0, 0 ), /* pal 1*/ + RGBDEF( 0, 0, 0 ), /* pal 2*/ + RGBDEF( 0, 0, 0 ), /* pal 3*/ + RGBDEF( 0, 0, 0 ), /* pal 4*/ + RGBDEF( 0, 0, 0 ), /* pal 5*/ + RGBDEF( 0, 0, 0 ), /* pal 6*/ + RGBDEF( 0, 0, 0 ), /* pal 7*/ + RGBDEF( 0, 0, 0 ), /* pal 8*/ + RGBDEF( 0, 128, 0 ), /* pal 9*/ + RGBDEF( 63, 135, 163 ), /* pal 10*/ + RGBDEF( 0, 0, 255 ), /* pal 11*/ + RGBDEF( 255, 0, 0 ), /* pal 12*/ + RGBDEF( 61, 160, 199 ), /* pal 13*/ + RGBDEF( 119, 190, 217 ), /* pal 14*/ + RGBDEF( 255, 255, 0 ), /* pal 15*/ +}; + +static MWUCHAR imagebits[] = { +0xea,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x00, +0xee,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x00, +0xee,0xea,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x8f,0x9f,0x9f,0xf9,0xf9,0xf9,0xf8,0x88,0x88,0x88,0x88,0xff,0x9f,0xff,0xf9,0xf9,0xff,0x88,0x88,0x88,0x88,0x88,0x88,0xf9,0xff,0xf9,0xff,0x9f,0xf9,0xff,0x9f,0x9f,0xf9,0xfc,0xf9,0xff,0x9f,0xf9,0xff,0x9f,0xf9,0xff,0x9f,0xff,0x9f,0xf9,0xff,0x9f,0x9f,0xf9,0xff,0xf9,0xf9,0xfc,0xff,0xf9,0xff,0x9f,0x9f,0xf9,0xff,0x9c,0xf9,0xff,0x9f,0xf9,0xff,0x9f,0xff,0x9f,0xf9,0xff,0xff,0x9f,0xf9,0xff,0x9f,0x9f,0xcf,0x9f,0xf9,0xff,0x9f,0x9f,0x9f,0x9f,0xcf,0x9f,0xcf,0xf9,0xff,0x9f,0xff,0xcf,0x9f,0xff,0xff,0x9f,0xff,0x9f,0x9f,0x9f,0xf9,0xf9,0xfc,0xf9,0xff,0x9f,0xf9,0xff,0xff,0xcf,0x9f,0x9f,0x8f,0x9f,0xff,0x9f,0x9f,0xf9,0x88,0x88,0x88,0x88,0x88,0xf9,0xff,0xf9,0xff,0x9f,0xf8,0x88,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0xcf,0x9f,0xff,0x98,0x8f,0xff,0x88,0x9f,0xf8,0x88,0x8f,0x9f,0xff,0x98,0x88,0x88,0x88,0x8f,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0xff,0xf8,0xc8,0x8f,0xff,0xff,0x88,0xff,0xff,0xf9,0x88,0xff,0xff,0x88,0xff,0x8f,0x8c,0x88,0xff,0xff,0xf8,0x88,0x8f,0xff,0x98,0x88,0x8f,0xf8,0x8f,0xff,0xff,0x8f,0x9f,0xff,0xff,0xff,0x88,0xf8,0xff,0xff,0xf8,0x88,0x8f,0xff,0x98,0x88,0xff,0xff,0xff,0xf8,0xff,0xff,0xf8,0x8f,0xff,0xf8,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf9,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0xff,0x88,0xff,0xf8,0x8f,0xff,0x88,0xff,0xff,0x88,0x8f,0x88,0xff,0xff,0x88,0x88,0xf8,0x8f,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0xf8,0x88,0xfc,0x8f,0xff,0xf8,0x8f,0xf8,0xff,0xff,0x88,0xff,0xf8,0x88,0xff,0x88,0xf9,0xf8,0xff,0xff,0xf8,0x88,0x8f,0xff,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xf8,0x8f,0xf8,0x8f,0xff,0xf8,0x8f,0xcf,0x8f,0xff,0xff,0x88,0x8f,0xff,0xf8,0x88,0xff,0xff,0x88,0xf8,0x8f,0xff,0xf8,0xff,0xff,0x88,0x9f,0xff,0xff,0xff,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0xff,0xff,0x88,0xff,0xff,0x88,0x8f,0x98,0x88,0xff,0x88,0x88,0xff,0x8f,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0x98,0x89,0xff,0xf9,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0x88,0x88,0xf9,0x8f,0xff,0xff,0x89,0xff,0xff,0x88,0xff,0xff,0xff,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0xff,0xff,0x88,0xff,0xff,0xf9,0xff,0xff,0x88,0xff,0xff,0xf8,0x88,0xff,0xf8,0x88,0xff,0x88,0x8f,0xf8,0xff,0xf8,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0xff,0xf8,0x88,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0xf8,0x8f,0xff,0xff,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xf9,0xf8,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0xff,0xf9,0x88,0x9f,0xff,0xff,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0x9f,0xff,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xf8,0x88,0xff,0x88,0x88,0xff,0x88,0x8f,0xf8,0xff,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0x9f,0xf8,0xff,0xf8,0x88,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0x88,0x8f,0xff,0xff,0xff,0x88,0x8f,0xff,0xff,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xff,0xf8,0x88,0x89,0xff,0xff,0x88,0x88,0x8f,0xff,0xff,0x88,0xff,0xff,0xf9,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0xff,0xf9,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xf8,0x88,0xff,0x88,0x88,0xff,0x88,0x89,0xf8,0xff,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0xf9,0x88,0x8f,0x9f,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0x8f,0xff,0xff,0x88,0x8f,0x88,0x8f,0xff,0xff,0xff,0x88,0x8f,0xff,0xff,0x98,0x88,0x8f,0xf8,0x88,0x9f,0xff,0x88,0x88,0xff,0xff,0x88,0x88,0x88,0x8f,0xff,0xff,0x88,0xff,0xff,0xff,0x88,0x9f,0x88,0xff,0xff,0x88,0x8f,0xff,0xf9,0xff,0x88,0xff,0xff,0xff,0xff,0xf9,0x88,0x9f,0xff,0xf8,0x88,0xff,0x88,0x88,0xff,0x88,0x8f,0xf8,0xf8,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0xf8,0x88,0xff,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0xf8,0x8f,0xff,0xff,0xff,0x88,0x8f,0xff,0xff,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xf9,0x88,0x88,0xf8,0xf9,0x88,0x88,0x88,0xff,0xff,0xf9,0x88,0xff,0xff,0xff,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0xfc,0xff,0x88,0x9f,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xf8,0x88,0xff,0x88,0x88,0xf9,0x88,0x8f,0xf8,0xf8,0x88,0x8f,0x9f,0xff,0xff,0xff,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0x9f,0xff,0xf8,0x88,0xff,0x9f,0xff,0x88,0x8f,0x98,0x88,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0x98,0x88,0xff,0xff,0xff,0xf8,0x89,0xff,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0x88,0x8f,0xf8,0xff,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0xff,0xf8,0xf9,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0x9f,0xff,0x88,0xff,0xff,0xff,0x98,0xff,0x88,0xff,0xcf,0xf8,0x88,0xff,0x88,0x88,0xff,0x88,0x8f,0xf9,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0xff,0x8f,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0xf8,0x8f,0xff,0xf8,0xff,0x88,0x8f,0xf8,0x88,0xff,0xf8,0x88,0x8f,0xf8,0xff,0x88,0x8f,0xff,0x8f,0xf8,0xff,0x88,0x9f,0x88,0xff,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0xf8,0xff,0x88,0xff,0xf9,0xf8,0x88,0xff,0xf8,0x88,0xff,0x88,0x8f,0xff,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xf8,0x8f,0xf8,0x88,0x8f,0xf8,0x8f,0xff,0x88,0x8f,0x88,0xff,0xff,0x88,0x88,0xf8,0x8f,0xff,0x88,0x8f,0x88,0x8f,0xff,0xff,0xff,0xff,0x88,0xff,0x88,0xff,0xf8,0x8f,0x98,0xff,0xff,0x88,0x88,0xff,0x88,0xff,0xf8,0x8f,0xff,0x8f,0xf8,0x8f,0x88,0xff,0x88,0xf8,0x88,0xf8,0x88,0xff,0xff,0x88,0x8f,0xff,0x88,0xff,0xf8,0x8f,0xf9,0x8f,0xf8,0xff,0x88,0xf8,0x8f,0xf8,0x88,0xff,0xff,0x88,0xf8,0x8f,0xff,0xf8,0x88,0x8f,0xff,0x8f,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xed,0xdd,0xdd,0xdd,0xde,0xee,0xdd,0xee,0xee,0xdd,0xde,0xde,0xee,0xdd,0xee,0xee,0xdd,0xde,0xee,0xed,0xdd,0xee,0xee,0xde,0xee,0xed,0xdd,0xdd,0xdd,0xee,0xee,0xdd,0xdd,0xee,0xdd,0xdd,0xee,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0xed,0xdd,0xdd,0xdd,0x00,0x0e,0xe0,0x00,0x0d,0xdd,0x0e,0x00,0x0d,0xe0,0x00,0x0d,0xdd,0x00,0x00,0xee,0xd0,0x00,0x0d,0x00,0x00,0xdd,0xdd,0xdd,0xd0,0x00,0x0e,0xed,0xd0,0x0e,0xdd,0xd0,0x00,0x0d,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xed,0xdd,0xdd,0xd0,0x00,0x00,0xde,0x00,0xed,0xdd,0x00,0xdd,0xd0,0xed,0x00,0xed,0xd0,0x0d,0xd0,0x0e,0xed,0x00,0xed,0xd0,0x0e,0xdd,0xdd,0xdd,0x00,0xdd,0x00,0xed,0xd0,0x0d,0xdd,0x00,0x0d,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xde,0xdd,0xdd,0x00,0x0d,0xdd,0x0d,0x00,0xed,0xdd,0x0d,0xdd,0xe0,0xed,0x00,0xed,0x00,0xed,0xdd,0x00,0xed,0x00,0xed,0xd0,0x0e,0xdd,0xdd,0xdd,0x0e,0xdd,0xd0,0xee,0xdd,0xdd,0xdd,0x00,0xed,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x0e,0x0e,0xdd,0xdd,0x00,0xed,0xdd,0xdd,0x00,0xed,0xdd,0xdd,0xe0,0x00,0xdd,0x00,0xed,0x00,0xed,0xdd,0x00,0xed,0x00,0xed,0xd0,0x0e,0xdd,0xdd,0xd0,0x0e,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0x00,0xed,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x0d,0x0d,0xed,0xdd,0x00,0xee,0xee,0xee,0x00,0xed,0xdd,0xd0,0x00,0x0d,0xdd,0x00,0xed,0x00,0xed,0xdd,0x00,0xed,0x00,0xed,0xd0,0x0e,0xdd,0xdd,0xd0,0x0e,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0x00,0xee,0xd0,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xed,0xd0,0xed,0xdd,0x00,0x00,0x00,0x0e,0x00,0xed,0xdd,0x00,0x0d,0xdd,0xed,0x00,0xed,0x00,0xed,0xdd,0x00,0xed,0x00,0xed,0xd0,0x0e,0xdd,0xdd,0xd0,0x0e,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xd0,0x0e,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xdd,0xd0,0xed,0xdd,0x00,0xee,0xd0,0x0d,0x00,0xee,0xde,0x0e,0xdd,0xd0,0xed,0x00,0xed,0x00,0xee,0xdd,0x00,0xdd,0x00,0xee,0xd0,0x0e,0xdd,0xdd,0xd0,0x0e,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x0e,0xdd,0xd0,0xde,0xdd,0xd0,0x0e,0xe0,0xd0,0x00,0x0d,0x0e,0x0d,0xee,0x00,0xe0,0x00,0xed,0xd0,0x0e,0xe0,0x0d,0xd0,0x00,0x0d,0xe0,0x0d,0xdd,0xdd,0xd0,0x0e,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xd0,0x0d,0x0d,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x0d,0xdd,0xdd,0x0e,0xdd,0xdd,0x00,0x0d,0xdd,0x00,0xd0,0x0d,0xd0,0x00,0xd0,0xdd,0x00,0xdd,0xdd,0x00,0x00,0xdd,0xdd,0x00,0xd0,0x00,0xdd,0xdd,0xdd,0xd0,0x0e,0xdd,0xd0,0x0d,0xdd,0xdd,0xdd,0x00,0xed,0xd0,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xed,0xdd,0xdd,0x0d,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xed,0xd0,0xed,0xdd,0xdd,0xdd,0x00,0xed,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xde,0x00,0xee,0xdd,0xdd,0xe0,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xde,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xee,0x00,0xdd,0xdd,0xdd,0xdd,0x00,0xee,0xe0,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x00,0x0d,0xdd,0xd0,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xee,0xee,0xee,0xed,0xdd,0xdd,0xde,0xdd,0xdd,0xde,0xee,0xee,0xee,0xee,0xde,0xee,0xee,0xee,0xdd,0xdd,0xdd,0xee,0xee,0xdd,0xdd,0xde,0xee,0xee,0xee,0xdd,0xdd,0xdd,0xdd,0xde,0xee,0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xed,0xdd,0xdd,0xdd,0xdd,0xed,0xdd,0xdd,0xdd,0xdd,0xee,0xee,0xee,0xed,0xee,0xee,0xee,0xed,0xde,0xee,0xee,0xed,0xdd,0xdd,0xee,0xee,0xdd,0xee,0xdd,0xdd,0xdd,0xdd,0xee,0xee,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xed,0xdd,0xdd,0xdd,0xde,0xdd,0xdd,0xdd,0xde,0xdd,0xee,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x00,0x00,0xdd,0xdd,0xdd,0x0e,0xed,0xdd,0x00,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0d,0xdd,0xdd,0xe0,0x00,0x0e,0xee,0xdd,0x00,0x00,0x00,0x0d,0xdd,0xdd,0xdd,0xde,0x00,0x00,0x00,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0xee,0xdd,0xdd,0xdd,0xd0,0xed,0xdd,0xdd,0xdd,0xd0,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xdd,0xdd,0xe0,0x00,0x0e,0xe0,0x0e,0xee,0xdd,0xdd,0xe0,0x00,0x00,0x0e,0xed,0xdd,0xdd,0xdd,0xdd,0xd0,0xee,0xdd,0xdd,0xdd,0x0e,0xed,0xdd,0xdd,0x0e,0xe0,0x00,0x0e,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x00,0x0d,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xd0,0x00,0x00,0x00,0x0e,0xed,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0x00,0x00,0xdd,0xd0,0x0e,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0x00,0xee,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0x00,0x00,0xd0,0x00,0x0e,0xed,0xd0,0x00,0x0d,0xdd,0x00,0xee,0xdd,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0d,0xdd,0x00,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xde,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0x00,0x00,0x00,0x00,0x00,0xed,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0x00,0x0d,0xdd,0xdd,0x00,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0x00,0x00,0x0d,0xdd,0x00,0x00,0x00,0xdd,0xd0,0x00,0xdd,0xdd,0xd0,0x0e,0xed,0xdd,0xdd,0xdd,0x00,0x0d,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0xdd,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0xdd,0x00,0x0e,0x0e,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0x00,0x00,0xdd,0xdd,0x00,0xed,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0x00,0x0e,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0xed,0xdd,0xdd,0xd0,0x00,0xe0,0xed,0xdd,0xd0,0x00,0xde,0xdd,0xdd,0x0e,0xdd,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0xdd,0x00,0x0d,0x0e,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0e,0xdd,0xd0,0x00,0x0d,0xdd,0xdd,0xd0,0xee,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0x00,0xdd,0xdd,0xdd,0xd0,0x0e,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x0d,0xed,0xdd,0xd0,0x00,0x0d,0xed,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xd0,0x00,0x0d,0xdd,0xdd,0xd0,0x00,0xed,0xd0,0x00,0x0d,0xdd,0xdd,0xdd,0x00,0xee,0xdd,0xdd,0xd0,0x00,0xd0,0xde,0xdd,0x00,0x0e,0x0e,0xdd,0xdd,0x0d,0xdd,0xde,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0xd0,0x00,0xed,0x0d,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0e,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x0e,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xde,0xee,0xee,0xee,0xed,0xdd,0xdd,0xdd,0xd0,0x00,0xe0,0xed,0xdd,0xd0,0x00,0xe0,0xed,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x00,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0x00,0x0e,0xdd,0x0e,0xdd,0x00,0x0d,0x0e,0xdd,0xdd,0xdd,0xde,0x00,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0xd0,0x00,0xdd,0xd0,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0e,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0xdd,0x0d,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0x00,0x00,0x00,0x00,0xed,0xdd,0xdd,0xdd,0xd0,0x00,0xd0,0xed,0xdd,0xd0,0x00,0xd0,0xed,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x00,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0x00,0x0e,0xdd,0x0d,0xe0,0x00,0xed,0x0d,0xed,0xdd,0xdd,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0x00,0x0e,0xdd,0xd0,0xde,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0e,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0x00,0x00,0x00,0x00,0xed,0xdd,0xdd,0xdd,0x00,0x0e,0xd0,0xde,0xdd,0x00,0x0e,0xd0,0xee,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x00,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0x00,0x0d,0xdd,0xd0,0xe0,0x00,0xdd,0xd0,0xed,0xdd,0xd0,0x00,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0x00,0x0d,0xdd,0xdd,0x0e,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0e,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xde,0xed,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0x0e,0xdd,0x00,0x0e,0xd0,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x00,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0x0e,0xdd,0xd0,0xed,0xdd,0x00,0x00,0x0d,0xdd,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x0d,0xed,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0e,0xdd,0xd0,0x0e,0xed,0xdd,0xdd,0x00,0xed,0xdd,0x00,0x0e,0xed,0xdd,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x0d,0xdd,0x0e,0xd0,0x00,0x0d,0xdd,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0x00,0xed,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0x00,0xed,0xdd,0xdd,0xdd,0x00,0x0d,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0x00,0x0d,0xdd,0xd0,0xde,0xdd,0x00,0x0d,0xdd,0xd0,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0xd0,0xed,0xd0,0x00,0xed,0xdd,0xde,0x00,0x0e,0xdd,0xdd,0x00,0xed,0xdd,0xd0,0x00,0xed,0xde,0x00,0x00,0xed,0xde,0xee,0xd0,0x0e,0xed,0xdd,0xdd,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0x0d,0xe0,0x00,0xed,0xdd,0x0e,0xdd,0xdd,0xdd,0xe0,0x00,0xed,0xdd,0xe0,0x00,0xee,0xed,0xd0,0x00,0xed,0xdd,0x00,0xee,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0x00,0xee,0xdd,0xdd,0xd0,0x00,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0xed,0xdd,0xdd,0x0e,0xdd,0x00,0xed,0xdd,0xd0,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xd0,0xde,0xd0,0x00,0xed,0xdd,0x00,0x00,0x0e,0xdd,0xdd,0x00,0xee,0xdd,0xd0,0x00,0xdd,0x00,0x00,0x00,0xde,0x00,0x0e,0xdd,0x00,0xee,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xdd,0xdd,0xd0,0xe0,0x00,0xdd,0xdd,0x0d,0xed,0xdd,0xd0,0x00,0x00,0xed,0xd0,0x00,0x00,0x00,0xee,0x00,0x00,0xdd,0xdd,0xd0,0x0e,0xed,0xdd,0x00,0x00,0xed,0xdd,0xd0,0x0e,0xed,0xdd,0x00,0x0e,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x0d,0xed,0x00,0xee,0xdd,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0x0e,0xd0,0x00,0xed,0xdd,0xd0,0x00,0x0e,0xdd,0xdd,0xd0,0x0d,0xee,0x00,0x0d,0xdd,0xd0,0x00,0x0e,0x00,0x00,0x0d,0xdd,0xd0,0x0e,0xee,0x00,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x0e,0xdd,0xdd,0xd0,0x00,0x0e,0xdd,0xdd,0xd0,0xed,0xdd,0xdd,0x00,0x00,0xed,0xdd,0x00,0x00,0xe0,0x00,0x00,0x0d,0xdd,0xdd,0xdd,0x00,0xee,0xe0,0x00,0x00,0xed,0xdd,0xdd,0x00,0xee,0xe0,0x00,0x0d,0xdd,0xd0,0x00,0x0e,0xed,0xdd,0xe0,0x00,0xee,0xdd,0xdd,0xe0,0xee,0xd0,0x0e,0xe0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0x0d,0xe0,0x00,0xed,0xdd,0xdd,0xd0,0x0d,0xdd,0xdd,0xdd,0xd0,0x00,0x00,0xdd,0xdd,0xdd,0xd0,0x0d,0xd0,0x00,0xdd,0xdd,0xdd,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xd0,0x00,0x0e,0xdd,0xdd,0xd0,0xed,0xdd,0xdd,0xdd,0x00,0xdd,0xdd,0xdd,0x00,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x00,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x00,0x00,0x0d,0xdd,0xdd,0x00,0x00,0x00,0xdd,0xd0,0x00,0x00,0x0d,0xdd,0xd0,0x00,0x0d,0xdd,0x00,0x0d,0xd0,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xd0,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0xe0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x0d,0xdd,0xdd,0xd0,0x00,0x0d,0xdd,0xdd,0xd0,0xde,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0xe0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0xdd,0x0d,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x00,0xee,0xdd,0xdd,0xde,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x0e,0xed,0xdd,0xdd,0x00,0x0e,0xed,0xdd,0xdd,0xdd,0xd0,0xee,0xdd,0xdd,0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe0,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x0e,0xee,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xde,0x00,0x00,0xee,0xdd,0xe0,0x00,0x00,0xee,0xed,0xdd,0xde,0x00,0x0e,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x00,0x0d,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x00,0x00,0x0d,0xd0,0x00,0x00,0x00,0x00,0xdd,0xdd,0x00,0x00,0x00,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x8f,0x9f,0x9f,0xf9,0xf9,0xf9,0xf8,0x88,0x88,0x88,0x88,0xff,0x9f,0xff,0xf9,0xf9,0xff,0x88,0x88,0x88,0x88,0x88,0x88,0xf9,0xff,0xf9,0xff,0x9f,0xf9,0xff,0x9f,0x9f,0xf9,0xfc,0xf9,0xff,0x9f,0xf9,0xff,0x9f,0xf9,0xff,0x9f,0xff,0x9f,0xf9,0xff,0x9f,0x9f,0xf9,0xff,0xf9,0xf9,0xfc,0xff,0xf9,0xff,0x9f,0x9f,0xf9,0xff,0x9c,0xf9,0xff,0x9f,0xf9,0xff,0x9f,0xff,0x9f,0xf9,0xff,0xff,0x9f,0xf9,0xff,0x9f,0x9f,0xcf,0x9f,0xf9,0xff,0x9f,0x9f,0x9f,0x9f,0xcf,0x9f,0xcf,0xf9,0xff,0x9f,0xff,0xcf,0x9f,0xff,0xff,0x9f,0xff,0x9f,0x9f,0x9f,0xf9,0xf9,0xfc,0xf9,0xff,0x9f,0xf9,0xff,0xff,0xcf,0x9f,0x9f,0x8f,0x9f,0xff,0x9f,0x9f,0xf9,0x88,0x88,0x88,0x88,0x88,0xf9,0xff,0xf9,0xff,0x9f,0xf8,0x88,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf9,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0xff,0x88,0xff,0xf8,0x8f,0xff,0x88,0xff,0xff,0x88,0x8f,0x88,0xff,0xff,0x88,0x88,0xf8,0x8f,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0xf8,0x88,0xfc,0x8f,0xff,0xf8,0x8f,0xf8,0xff,0xff,0x88,0xff,0xf8,0x88,0xff,0x88,0xf9,0xf8,0xff,0xff,0xf8,0x88,0x8f,0xff,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xf8,0x8f,0xf8,0x8f,0xff,0xf8,0x8f,0xcf,0x8f,0xff,0xff,0x88,0x8f,0xff,0xf8,0x88,0xff,0xff,0x88,0xf8,0x8f,0xff,0xf8,0xff,0xff,0x88,0x9f,0xff,0xff,0xff,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0x9f,0xff,0x88,0xff,0xff,0x88,0x8f,0xf8,0x8f,0xff,0x88,0x88,0xff,0x8f,0xff,0x88,0x8f,0x98,0x88,0xff,0xff,0xff,0xf8,0x8f,0xff,0xff,0xff,0x88,0x8f,0xf8,0x8f,0xff,0xfc,0xff,0x88,0x88,0xff,0x88,0xff,0xff,0x8f,0xff,0xff,0x88,0xff,0xff,0xfc,0x88,0xff,0x88,0xcf,0xff,0x88,0x8f,0xff,0xff,0xff,0x88,0x9f,0xff,0x9f,0xff,0xf9,0x88,0xff,0xff,0xf8,0x88,0xff,0xf8,0x88,0xf9,0x88,0x8f,0xf8,0xff,0xff,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0xff,0xff,0xff,0xff,0xf9,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0xff,0xff,0x88,0xff,0xff,0x88,0x8f,0x98,0x88,0xff,0x88,0x88,0xff,0x8f,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0x98,0x89,0xff,0xf9,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0x88,0x88,0xf9,0x8f,0xff,0xff,0x89,0xff,0xff,0x88,0xff,0xff,0xff,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0xff,0xff,0x88,0xff,0xff,0xf9,0xff,0xff,0x88,0xff,0xff,0xf8,0x88,0xff,0xf8,0x88,0xff,0x88,0x8f,0xf8,0xff,0xf8,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0xff,0xf8,0x88,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0xf8,0x8f,0xff,0xff,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xf9,0xf8,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0xff,0xf9,0x88,0x9f,0xff,0xff,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0x9f,0xff,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xf8,0x88,0xff,0x88,0x88,0xff,0x88,0x8f,0xf8,0xff,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0x9f,0xf8,0xff,0xf8,0x88,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0x88,0x8f,0xff,0xff,0xff,0x88,0x8f,0xff,0xff,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xff,0xf8,0x88,0x89,0xff,0xff,0x88,0x88,0x8f,0xff,0xff,0x88,0xff,0xff,0xf9,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0xff,0xf9,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xf8,0x88,0xff,0x88,0x88,0xff,0x88,0x89,0xf8,0xff,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0xf9,0x88,0x8f,0x9f,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0x8f,0xff,0xff,0x88,0x8f,0x88,0x8f,0xff,0xff,0xff,0x88,0x8f,0xff,0xff,0x98,0x88,0x8f,0xf8,0x88,0x9f,0xff,0x88,0x88,0xff,0xff,0x88,0x88,0x88,0x8f,0xff,0xff,0x88,0xff,0xff,0xff,0x88,0x9f,0x88,0xff,0xff,0x88,0x8f,0xff,0xf9,0xff,0x88,0xff,0xff,0xff,0xff,0xf9,0x88,0x9f,0xff,0xf8,0x88,0xff,0x88,0x88,0xff,0x88,0x8f,0xf8,0xf8,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0xf8,0x88,0xff,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0xf8,0x8f,0xff,0xff,0xff,0x88,0x8f,0xff,0xff,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xf9,0x88,0x88,0xf8,0xf9,0x88,0x88,0x88,0xff,0xff,0xf9,0x88,0xff,0xff,0xff,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0xfc,0xff,0x88,0x9f,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xf8,0x88,0xff,0x88,0x88,0xf9,0x88,0x8f,0xf8,0xf8,0x88,0x8f,0x9f,0xff,0xff,0xff,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0xff,0x8f,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0xf8,0x8f,0xff,0xf8,0xff,0x88,0x8f,0xf8,0x88,0xff,0xf8,0x88,0x8f,0xf8,0xff,0x88,0x8f,0xff,0x8f,0xf8,0xff,0x88,0x9f,0x88,0xff,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0xf8,0xff,0x88,0xff,0xf9,0xf8,0x88,0xff,0xf8,0x88,0xff,0x88,0x8f,0xff,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0x8f,0xf8,0x88,0x88,0xff,0x8f,0xff,0x88,0x8f,0xf8,0x8f,0xff,0x88,0x88,0xf8,0x8f,0xff,0x88,0x8f,0xf8,0x8f,0xff,0xff,0xff,0xf8,0x8f,0xff,0xf8,0xff,0x88,0x8f,0xf8,0x8f,0xff,0xf8,0x88,0xff,0xf8,0xff,0x88,0x8f,0xff,0x8f,0xf8,0xf9,0x88,0xff,0x88,0xff,0x88,0xf9,0x88,0xff,0xff,0x88,0x8f,0xff,0xf9,0xff,0x88,0x8f,0xff,0x8f,0x98,0xf9,0x88,0xf9,0x8f,0xf8,0x88,0xff,0xff,0x88,0xf8,0x88,0xff,0xf8,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xf8,0x8f,0xf8,0x88,0x8f,0xf8,0x8f,0xff,0x88,0x8f,0x88,0xff,0xff,0x88,0x88,0xf8,0x8f,0xff,0x88,0x8f,0x88,0x8f,0xff,0xff,0xff,0xff,0x88,0xff,0x88,0xff,0xf8,0x8f,0x98,0xff,0xff,0x88,0x88,0xff,0x88,0xff,0xf8,0x8f,0xff,0x8f,0xf8,0x8f,0x88,0xff,0x88,0xf8,0x88,0xf8,0x88,0xff,0xff,0x88,0x8f,0xff,0x88,0xff,0xf8,0x8f,0xf9,0x8f,0xf8,0xff,0x88,0xf8,0x8f,0xf8,0x88,0xff,0xff,0x88,0xf8,0x8f,0xff,0xf8,0x88,0x8f,0xff,0x8f,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xda,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xad,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00, +0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xea,0x00, +0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x00, +}; + +MWIMAGEHDR image_microwin = { + 310, 371, /* width, height*/ + 1, 4, /* planes, bpp*/ + 156, 1, /* pitch, bytesperpixel*/ + 1, 16, /* compression, palsize*/ + -1L, /* transcolor*/ + palette, + imagebits, +}; Index: bmp/close4.c =================================================================== --- bmp/close4.c (nonexistent) +++ bmp/close4.c (revision 174) @@ -0,0 +1,46 @@ +/* Generated by convbmp*/ +#include "device.h" + +/* MWIMAGEHDR image_close4 converted from close4.bmp*/ + +static MWPALENTRY palette[16] = { + RGBDEF( 0, 0, 0 ), /* pal 0*/ + RGBDEF( 191, 0, 0 ), /* pal 1*/ + RGBDEF( 0, 191, 0 ), /* pal 2*/ + RGBDEF( 191, 191, 0 ), /* pal 3*/ + RGBDEF( 0, 0, 191 ), /* pal 4*/ + RGBDEF( 191, 0, 191 ), /* pal 5*/ + RGBDEF( 0, 191, 191 ), /* pal 6*/ + RGBDEF( 192, 192, 192 ), /* pal 7*/ + RGBDEF( 128, 128, 128 ), /* pal 8*/ + RGBDEF( 255, 0, 0 ), /* pal 9*/ + RGBDEF( 0, 255, 0 ), /* pal 10*/ + RGBDEF( 255, 255, 0 ), /* pal 11*/ + RGBDEF( 0, 0, 255 ), /* pal 12*/ + RGBDEF( 255, 0, 255 ), /* pal 13*/ + RGBDEF( 0, 255, 255 ), /* pal 14*/ + RGBDEF( 255, 255, 255 ), /* pal 15*/ +}; + +static MWUCHAR imagebits[] = { +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xf8,0x88,0x88,0x88,0x88,0x80,0x00,0x00, +0xf7,0x00,0x77,0x77,0x00,0x80,0x00,0x00, +0xf7,0x70,0x07,0x70,0x07,0x80,0x00,0x00, +0xf7,0x77,0x00,0x00,0x77,0x80,0x00,0x00, +0xf7,0x77,0x70,0x07,0x77,0x80,0x00,0x00, +0xf7,0x77,0x00,0x00,0x77,0x80,0x00,0x00, +0xf7,0x70,0x07,0x70,0x07,0x80,0x00,0x00, +0xf7,0x00,0x77,0x77,0x00,0x80,0x00,0x00, +0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00, +}; + +MWIMAGEHDR image_close4 = { + 12, 10, /* width, height*/ + 1, 4, /* planes, bpp*/ + 8, 1, /* pitch, bytesperpixel*/ + 1, 16, /* compression, palsize*/ + -1L, /* transcolor*/ + palette, + imagebits, +}; Index: bmp/under4.bmp =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: bmp/under4.bmp =================================================================== --- bmp/under4.bmp (nonexistent) +++ bmp/under4.bmp (revision 174)
bmp/under4.bmp Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.