From 65228807725d57aa4d33bcb8c3e3966d1acf0b8a Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 18 May 2012 20:13:40 +0000 Subject: style cleanup: ghost/x11 --- intern/ghost/intern/GHOST_DisplayManagerX11.cpp | 62 +- intern/ghost/intern/GHOST_DisplayManagerX11.h | 48 +- intern/ghost/intern/GHOST_DropTargetX11.cpp | 30 +- intern/ghost/intern/GHOST_DropTargetX11.h | 52 +- intern/ghost/intern/GHOST_NDOFManagerX11.cpp | 8 +- intern/ghost/intern/GHOST_SystemPathsX11.cpp | 18 +- intern/ghost/intern/GHOST_SystemPathsX11.h | 14 +- intern/ghost/intern/GHOST_SystemX11.cpp | 966 ++++++++++++------------ intern/ghost/intern/GHOST_SystemX11.h | 128 ++-- intern/ghost/intern/GHOST_WindowX11.cpp | 849 +++++++++++---------- intern/ghost/intern/GHOST_WindowX11.h | 262 +++---- 11 files changed, 1228 insertions(+), 1209 deletions(-) (limited to 'intern/ghost') diff --git a/intern/ghost/intern/GHOST_DisplayManagerX11.cpp b/intern/ghost/intern/GHOST_DisplayManagerX11.cpp index b8fe271fd4d..d719a4caa55 100644 --- a/intern/ghost/intern/GHOST_DisplayManagerX11.cpp +++ b/intern/ghost/intern/GHOST_DisplayManagerX11.cpp @@ -43,30 +43,29 @@ GHOST_DisplayManagerX11:: GHOST_DisplayManagerX11( - GHOST_SystemX11 *system -) : + GHOST_SystemX11 *system + ) : GHOST_DisplayManager(), m_system(system) { //nothing to do. } - GHOST_TSuccess +GHOST_TSuccess GHOST_DisplayManagerX11:: -getNumDisplays( - GHOST_TUns8& numDisplays -) const{ +getNumDisplays(GHOST_TUns8& numDisplays) const +{ numDisplays = m_system->getNumDisplays(); return GHOST_kSuccess; } - GHOST_TSuccess +GHOST_TSuccess GHOST_DisplayManagerX11:: getNumDisplaySettings( - GHOST_TUns8 display, - GHOST_TInt32& numSettings -) const{ + GHOST_TUns8 display, + GHOST_TInt32& numSettings) const +{ #ifdef WITH_X11_XF86VMODE int majorVersion, minorVersion; XF86VidModeModeInfo **vidmodes; @@ -96,13 +95,13 @@ getNumDisplaySettings( return GHOST_kSuccess; } - GHOST_TSuccess +GHOST_TSuccess GHOST_DisplayManagerX11:: getDisplaySetting( - GHOST_TUns8 display, - GHOST_TInt32 index, - GHOST_DisplaySetting& setting -) const { + GHOST_TUns8 display, + GHOST_TInt32 index, + GHOST_DisplaySetting& setting) const +{ #ifdef WITH_X11_XF86VMODE int majorVersion, minorVersion; @@ -128,13 +127,13 @@ getDisplaySetting( setting.xPixels = vidmodes[index]->hdisplay; setting.yPixels = vidmodes[index]->vdisplay; - setting.bpp = DefaultDepth(dpy,DefaultScreen(dpy)); + setting.bpp = DefaultDepth(dpy, DefaultScreen(dpy)); #else GHOST_ASSERT(display < 1, "Only single display systems are currently supported.\n"); GHOST_ASSERT(index < 1, "Requested setting outside of valid range.\n"); - Display * x_display = m_system->getXDisplay(); + Display *x_display = m_system->getXDisplay(); if (x_display == NULL) { return GHOST_kFailure; @@ -142,7 +141,7 @@ getDisplaySetting( setting.xPixels = DisplayWidth(x_display, DefaultScreen(x_display)); setting.yPixels = DisplayHeight(x_display, DefaultScreen(x_display)); - setting.bpp = DefaultDepth(x_display,DefaultScreen(x_display)); + setting.bpp = DefaultDepth(x_display, DefaultScreen(x_display)); #endif // Don't think it's possible to get this value from X! @@ -152,25 +151,25 @@ getDisplaySetting( return GHOST_kSuccess; } - GHOST_TSuccess +GHOST_TSuccess GHOST_DisplayManagerX11:: getCurrentDisplaySetting( - GHOST_TUns8 display, - GHOST_DisplaySetting& setting -) const { + GHOST_TUns8 display, + GHOST_DisplaySetting& setting) const +{ /* According to the xf86vidmodegetallmodelines man page, * "The first element of the array corresponds to the current video mode." */ - return getDisplaySetting(display,GHOST_TInt32(0),setting); + return getDisplaySetting(display, GHOST_TInt32(0), setting); } - GHOST_TSuccess +GHOST_TSuccess GHOST_DisplayManagerX11:: setCurrentDisplaySetting( - GHOST_TUns8 display, - const GHOST_DisplaySetting& setting -){ + GHOST_TUns8 display, + const GHOST_DisplaySetting& setting) +{ #ifdef WITH_X11_XF86VMODE // // Mode switching code ported from Quake 2: @@ -196,7 +195,7 @@ setCurrentDisplaySetting( } # ifdef _DEBUG printf("Using XFree86-VidModeExtension Version %d.%d\n", - majorVersion, minorVersion); + majorVersion, minorVersion); # endif /* The X11 man page says vidmodes needs to be freed, but doing so causes a @@ -208,7 +207,7 @@ setCurrentDisplaySetting( for (int i = 0; i < num_vidmodes; i++) { if (setting.xPixels > vidmodes[i]->hdisplay || - setting.yPixels > vidmodes[i]->vdisplay) + setting.yPixels > vidmodes[i]->vdisplay) continue; x = setting.xPixels - vidmodes[i]->hdisplay; @@ -226,7 +225,7 @@ setCurrentDisplaySetting( actualWidth = vidmodes[best_fit]->hdisplay; actualHeight = vidmodes[best_fit]->vdisplay; printf("Switching to video mode %dx%d\n", - actualWidth, actualHeight); + actualWidth, actualHeight); # endif // change to the mode @@ -234,7 +233,8 @@ setCurrentDisplaySetting( // Move the viewport to top left XF86VidModeSetViewPort(dpy, scrnum, 0, 0); - } else + } + else return GHOST_kFailure; XFlush(dpy); diff --git a/intern/ghost/intern/GHOST_DisplayManagerX11.h b/intern/ghost/intern/GHOST_DisplayManagerX11.h index c4d2b6dbb0a..61b4578cac3 100644 --- a/intern/ghost/intern/GHOST_DisplayManagerX11.h +++ b/intern/ghost/intern/GHOST_DisplayManagerX11.h @@ -50,18 +50,18 @@ public: * Constructor. */ GHOST_DisplayManagerX11( - GHOST_SystemX11 *system - ); + GHOST_SystemX11 *system + ); /** * Returns the number of display devices on this system. * @param numDisplays The number of displays on this system. * @return Indication of success. */ - GHOST_TSuccess + GHOST_TSuccess getNumDisplays( - GHOST_TUns8& numDisplays - ) const; + GHOST_TUns8& numDisplays + ) const; /** * Returns the number of display settings for this display device. @@ -69,11 +69,11 @@ public: * @param setting The number of settings of the display device with this index. * @return Indication of success. */ - GHOST_TSuccess + GHOST_TSuccess getNumDisplaySettings( - GHOST_TUns8 display, - GHOST_TInt32& numSettings - ) const; + GHOST_TUns8 display, + GHOST_TInt32& numSettings + ) const; /** * Returns the current setting for this display device. @@ -82,12 +82,12 @@ public: * @param setting The setting of the display device with this index. * @return Indication of success. */ - GHOST_TSuccess + GHOST_TSuccess getDisplaySetting( - GHOST_TUns8 display, - GHOST_TInt32 index, - GHOST_DisplaySetting& setting - ) const; + GHOST_TUns8 display, + GHOST_TInt32 index, + GHOST_DisplaySetting& setting + ) const; /** * Returns the current setting for this display device. @@ -95,11 +95,11 @@ public: * @param setting The current setting of the display device with this index. * @return Indication of success. */ - GHOST_TSuccess + GHOST_TSuccess getCurrentDisplaySetting( - GHOST_TUns8 display, - GHOST_DisplaySetting& setting - ) const; + GHOST_TUns8 display, + GHOST_DisplaySetting& setting + ) const; /** * Changes the current setting for this display device. @@ -107,15 +107,15 @@ public: * @param setting The current setting of the display device with this index. * @return Indication of success. */ - GHOST_TSuccess + GHOST_TSuccess setCurrentDisplaySetting( - GHOST_TUns8 display, - const GHOST_DisplaySetting& setting - ); + GHOST_TUns8 display, + const GHOST_DisplaySetting& setting + ); -private : +private: - GHOST_SystemX11 * m_system; + GHOST_SystemX11 *m_system; }; diff --git a/intern/ghost/intern/GHOST_DropTargetX11.cpp b/intern/ghost/intern/GHOST_DropTargetX11.cpp index 2239ac63d33..c1cc55b332a 100644 --- a/intern/ghost/intern/GHOST_DropTargetX11.cpp +++ b/intern/ghost/intern/GHOST_DropTargetX11.cpp @@ -37,8 +37,8 @@ bool GHOST_DropTargetX11::m_xdndInitialized = false; DndClass GHOST_DropTargetX11::m_dndClass; -Atom * GHOST_DropTargetX11::m_dndTypes = NULL; -Atom * GHOST_DropTargetX11::m_dndActions = NULL; +Atom *GHOST_DropTargetX11::m_dndTypes = NULL; +Atom *GHOST_DropTargetX11::m_dndActions = NULL; const char *GHOST_DropTargetX11::m_dndMimeTypes[] = {"url/url", "text/uri-list", "text/plain", "application/octet-stream"}; int GHOST_DropTargetX11::m_refCounter = 0; @@ -55,13 +55,13 @@ int GHOST_DropTargetX11::m_refCounter = 0; void GHOST_DropTargetX11::Initialize(void) { Display *display = m_system->getXDisplay(); - int dndTypesCount = sizeof(m_dndMimeTypes) / sizeof(char*); + int dndTypesCount = sizeof(m_dndMimeTypes) / sizeof(char *); int counter; xdnd_init(&m_dndClass, display); m_dndTypes = new Atom[dndTypesCount + 1]; - XInternAtoms(display, (char**)m_dndMimeTypes, dndTypesCount, 0, m_dndTypes); + XInternAtoms(display, (char **)m_dndMimeTypes, dndTypesCount, 0, m_dndTypes); m_dndTypes[dndTypesCount] = 0; m_dndActions = new Atom[8]; @@ -86,10 +86,10 @@ void GHOST_DropTargetX11::Uninitialize(void) xdnd_shut(&m_dndClass); } -GHOST_DropTargetX11::GHOST_DropTargetX11(GHOST_WindowX11 * window, GHOST_SystemX11 * system) -: -m_window(window), -m_system(system) +GHOST_DropTargetX11::GHOST_DropTargetX11(GHOST_WindowX11 *window, GHOST_SystemX11 *system) + : + m_window(window), + m_system(system) { if (!m_xdndInitialized) { Initialize(); @@ -177,7 +177,7 @@ void GHOST_DropTargetX11::UrlDecode(char *decodedOut, int bufferSize, const char assert(strlen(decodedOut) < bufferSize); // Concatenate this character onto the output - strncat(decodedOut, (char*)&asciiCharacter, 1); + strncat(decodedOut, (char *)&asciiCharacter, 1); // Skip the next character i++; @@ -188,7 +188,7 @@ void GHOST_DropTargetX11::UrlDecode(char *decodedOut, int bufferSize, const char char *GHOST_DropTargetX11::FileUrlDecode(char *fileUrl) { - if(!strncpy(fileUrl, "file://", 7) == 0) { + if (!strncpy(fileUrl, "file://", 7) == 0) { /* assume one character of encoded URL can be expanded to 4 chars max */ int decodedSize = 4 * strlen(fileUrl) + 1; char *decodedPath = (char *)malloc(decodedSize); @@ -217,9 +217,9 @@ void *GHOST_DropTargetX11::getURIListGhostData(unsigned char *dropBuffer, int dr else curLength++; } - strArray = (GHOST_TStringArray*)malloc(sizeof(GHOST_TStringArray)); + strArray = (GHOST_TStringArray *)malloc(sizeof(GHOST_TStringArray)); strArray->count = 0; - strArray->strings = (GHOST_TUns8**)malloc(totPaths*sizeof(GHOST_TUns8*)); + strArray->strings = (GHOST_TUns8 **)malloc(totPaths * sizeof(GHOST_TUns8 *)); curLength = 0; for (int i = 0; i <= dropBufferSize; i++) { @@ -228,12 +228,12 @@ void *GHOST_DropTargetX11::getURIListGhostData(unsigned char *dropBuffer, int dr char *curPath = (char *)malloc(curLength + 1); char *decodedPath; - strncpy(curPath, (char*)dropBuffer + i - curLength, curLength); + strncpy(curPath, (char *)dropBuffer + i - curLength, curLength); curPath[curLength] = 0; decodedPath = FileUrlDecode(curPath); - if(decodedPath) { - strArray->strings[strArray->count] = (GHOST_TUns8*)decodedPath; + if (decodedPath) { + strArray->strings[strArray->count] = (GHOST_TUns8 *)decodedPath; strArray->count++; } diff --git a/intern/ghost/intern/GHOST_DropTargetX11.h b/intern/ghost/intern/GHOST_DropTargetX11.h index b9e17dcc93b..10d76bbb165 100644 --- a/intern/ghost/intern/GHOST_DropTargetX11.h +++ b/intern/ghost/intern/GHOST_DropTargetX11.h @@ -47,7 +47,7 @@ public: * @param window The window to register as drop target. * @param system The associated system. */ - GHOST_DropTargetX11(GHOST_WindowX11 * window, GHOST_SystemX11 * system); + GHOST_DropTargetX11(GHOST_WindowX11 *window, GHOST_SystemX11 *system); /** * Destructor @@ -55,8 +55,8 @@ public: ~GHOST_DropTargetX11(); /** - * Handler of ClientMessage X11 event - */ + * Handler of ClientMessage X11 event + */ bool GHOST_HandleClientMessage(XEvent *event); /** @@ -73,42 +73,42 @@ private: /* Internal helper functions */ /** - * Initiailize XDND and all related X atoms - */ + * Initiailize XDND and all related X atoms + */ void Initialize(void); /** - * Uninitiailize XDND and all related X atoms - */ + * Uninitiailize XDND and all related X atoms + */ void Uninitialize(void); /** - * Get data to be passed to event from text/uri-list mime type - * @param dropBuffer - buffer returned from source application - * @param dropBufferSize - size of dropped buffer - * @return pointer to newly created GHOST data - */ - void * getURIListGhostData(unsigned char *dropBuffer, int dropBufferSize); + * Get data to be passed to event from text/uri-list mime type + * @param dropBuffer - buffer returned from source application + * @param dropBufferSize - size of dropped buffer + * @return pointer to newly created GHOST data + */ + void *getURIListGhostData(unsigned char *dropBuffer, int dropBufferSize); /** - * Decode URL (i.e. converts "file:///a%20b/test" to "file:///a b/test") - * @param decodedOut - buffer for decoded URL - * @param bufferSize - size of output buffer - * @param encodedIn - input encoded buffer to be decoded - */ + * Decode URL (i.e. converts "file:///a%20b/test" to "file:///a b/test") + * @param decodedOut - buffer for decoded URL + * @param bufferSize - size of output buffer + * @param encodedIn - input encoded buffer to be decoded + */ void UrlDecode(char *decodedOut, int bufferSize, const char *encodedIn); /** - * Fully decode file URL (i.e. converts "file:///a%20b/test" to "/a b/test") - * @param fileUrl - file path URL to be fully decoded - * @return decoded file path (resutl shold be free-d) - */ + * Fully decode file URL (i.e. converts "file:///a%20b/test" to "/a b/test") + * @param fileUrl - file path URL to be fully decoded + * @return decoded file path (resutl shold be free-d) + */ char *FileUrlDecode(char *fileUrl); /* The associated GHOST_WindowWin32. */ - GHOST_WindowX11 * m_window; + GHOST_WindowX11 *m_window; /* The System. */ - GHOST_SystemX11 * m_system; + GHOST_SystemX11 *m_system; /* Data type of the dragged object */ GHOST_TDragnDropTypes m_draggedObjectType; @@ -120,10 +120,10 @@ private: static DndClass m_dndClass; /* list of supported types to eb draggeg into */ - static Atom * m_dndTypes; + static Atom *m_dndTypes; /* list of supported dran'n'drop actions */ - static Atom * m_dndActions; + static Atom *m_dndActions; /* List of supported MIME types to be dragged into */ static const char *m_dndMimeTypes[]; diff --git a/intern/ghost/intern/GHOST_NDOFManagerX11.cpp b/intern/ghost/intern/GHOST_NDOFManagerX11.cpp index 565324ae211..bd285bc7a27 100644 --- a/intern/ghost/intern/GHOST_NDOFManagerX11.cpp +++ b/intern/ghost/intern/GHOST_NDOFManagerX11.cpp @@ -30,9 +30,9 @@ GHOST_NDOFManagerX11::GHOST_NDOFManagerX11(GHOST_System& sys) - : - GHOST_NDOFManager(sys), - m_available(false) + : + GHOST_NDOFManager(sys), + m_available(false) { setDeadZone(0.1f); /* how to calibrate on Linux? throw away slight motion! */ @@ -44,7 +44,7 @@ GHOST_NDOFManagerX11::GHOST_NDOFManagerX11(GHOST_System& sys) #define MAX_LINE_LENGTH 100 /* look for USB devices with Logitech's vendor ID */ - FILE* command_output = popen("lsusb -d 046d:","r"); + FILE *command_output = popen("lsusb -d 046d:", "r"); if (command_output) { char line[MAX_LINE_LENGTH] = {0}; while (fgets(line, MAX_LINE_LENGTH, command_output)) { diff --git a/intern/ghost/intern/GHOST_SystemPathsX11.cpp b/intern/ghost/intern/GHOST_SystemPathsX11.cpp index 6dad3661a57..c148a16d5fc 100644 --- a/intern/ghost/intern/GHOST_SystemPathsX11.cpp +++ b/intern/ghost/intern/GHOST_SystemPathsX11.cpp @@ -47,9 +47,9 @@ #endif #ifdef PREFIX -static const char *static_path= PREFIX "/share"; +static const char *static_path = PREFIX "/share"; #else -static const char *static_path= NULL; +static const char *static_path = NULL; #endif GHOST_SystemPathsX11::GHOST_SystemPathsX11() @@ -60,18 +60,18 @@ GHOST_SystemPathsX11::~GHOST_SystemPathsX11() { } -const GHOST_TUns8* GHOST_SystemPathsX11::getSystemDir() const +const GHOST_TUns8 *GHOST_SystemPathsX11::getSystemDir() const { /* no prefix assumes a portable build which only uses bundled scripts */ return (const GHOST_TUns8 *)static_path; } -const GHOST_TUns8* GHOST_SystemPathsX11::getUserDir() const +const GHOST_TUns8 *GHOST_SystemPathsX11::getUserDir() const { #ifndef WITH_XDG_USER_DIRS return (const GHOST_TUns8 *)getenv("HOME"); #else /* WITH_XDG_USER_DIRS */ - const char *home= getenv("XDG_CONFIG_HOME"); + const char *home = getenv("XDG_CONFIG_HOME"); if (home) { return (const GHOST_TUns8 *)home; @@ -79,10 +79,10 @@ const GHOST_TUns8* GHOST_SystemPathsX11::getUserDir() const else { static char user_path[PATH_MAX]; - home= getenv("HOME"); + home = getenv("HOME"); if (home == NULL) { - home= getpwuid(getuid())->pw_dir; + home = getpwuid(getuid())->pw_dir; } snprintf(user_path, sizeof(user_path), "%s/.config", home); @@ -91,12 +91,12 @@ const GHOST_TUns8* GHOST_SystemPathsX11::getUserDir() const #endif /* WITH_XDG_USER_DIRS */ } -const GHOST_TUns8* GHOST_SystemPathsX11::getBinaryDir() const +const GHOST_TUns8 *GHOST_SystemPathsX11::getBinaryDir() const { return NULL; } -void GHOST_SystemPathsX11::addToSystemRecentFiles(const char* filename) const +void GHOST_SystemPathsX11::addToSystemRecentFiles(const char *filename) const { /* XXXXX TODO: Implementation for X11 if possible */ diff --git a/intern/ghost/intern/GHOST_SystemPathsX11.h b/intern/ghost/intern/GHOST_SystemPathsX11.h index d05cab5de75..8ded9a35276 100644 --- a/intern/ghost/intern/GHOST_SystemPathsX11.h +++ b/intern/ghost/intern/GHOST_SystemPathsX11.h @@ -55,25 +55,25 @@ public: * "unpack and run" path, then look for properly installed path, not including versioning. * @return Unsigned char string pointing to system dir (eg /usr/share/blender/). */ - const GHOST_TUns8* getSystemDir() const; + const GHOST_TUns8 *getSystemDir() const; /** * Determine the base dir in which user configuration is stored, not including versioning. * If needed, it will create the base directory. * @return Unsigned char string pointing to user dir (eg ~/.blender/). */ - const GHOST_TUns8* getUserDir() const; + const GHOST_TUns8 *getUserDir() const; /** - * Determine the directory of the current binary - * @return Unsigned char string pointing to the binary dir - */ - const GHOST_TUns8* getBinaryDir() const; + * Determine the directory of the current binary + * @return Unsigned char string pointing to the binary dir + */ + const GHOST_TUns8 *getBinaryDir() const; /** * Add the file to the operating system most recently used files */ - void addToSystemRecentFiles(const char* filename) const; + void addToSystemRecentFiles(const char *filename) const; }; #endif diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp b/intern/ghost/intern/GHOST_SystemX11.cpp index cabec06301a..c58ed93425d 100644 --- a/intern/ghost/intern/GHOST_SystemX11.cpp +++ b/intern/ghost/intern/GHOST_SystemX11.cpp @@ -75,14 +75,14 @@ static GHOST_TKey convertXKey(KeySym key); //these are for copy and select copy -static char *txt_cut_buffer= NULL; -static char *txt_select_buffer= NULL; +static char *txt_cut_buffer = NULL; +static char *txt_select_buffer = NULL; using namespace std; GHOST_SystemX11:: GHOST_SystemX11( -) : + ) : GHOST_System(), m_start_time(0) { @@ -99,40 +99,40 @@ GHOST_SystemX11( #endif m_delete_window_atom - = XInternAtom(m_display, "WM_DELETE_WINDOW", True); - - m_wm_protocols= XInternAtom(m_display, "WM_PROTOCOLS", False); - m_wm_take_focus= XInternAtom(m_display, "WM_TAKE_FOCUS", False); - m_wm_state= XInternAtom(m_display, "WM_STATE", False); - m_wm_change_state= XInternAtom(m_display, "WM_CHANGE_STATE", False); - m_net_state= XInternAtom(m_display, "_NET_WM_STATE", False); - m_net_max_horz= XInternAtom(m_display, - "_NET_WM_STATE_MAXIMIZED_HORZ", False); - m_net_max_vert= XInternAtom(m_display, - "_NET_WM_STATE_MAXIMIZED_VERT", False); - m_net_fullscreen= XInternAtom(m_display, - "_NET_WM_STATE_FULLSCREEN", False); - m_motif= XInternAtom(m_display, "_MOTIF_WM_HINTS", False); - m_targets= XInternAtom(m_display, "TARGETS", False); - m_string= XInternAtom(m_display, "STRING", False); - m_compound_text= XInternAtom(m_display, "COMPOUND_TEXT", False); - m_text= XInternAtom(m_display, "TEXT", False); - m_clipboard= XInternAtom(m_display, "CLIPBOARD", False); - m_primary= XInternAtom(m_display, "PRIMARY", False); - m_xclip_out= XInternAtom(m_display, "XCLIP_OUT", False); - m_incr= XInternAtom(m_display, "INCR", False); - m_utf8_string= XInternAtom(m_display, "UTF8_STRING", False); + = XInternAtom(m_display, "WM_DELETE_WINDOW", True); + + m_wm_protocols = XInternAtom(m_display, "WM_PROTOCOLS", False); + m_wm_take_focus = XInternAtom(m_display, "WM_TAKE_FOCUS", False); + m_wm_state = XInternAtom(m_display, "WM_STATE", False); + m_wm_change_state = XInternAtom(m_display, "WM_CHANGE_STATE", False); + m_net_state = XInternAtom(m_display, "_NET_WM_STATE", False); + m_net_max_horz = XInternAtom(m_display, + "_NET_WM_STATE_MAXIMIZED_HORZ", False); + m_net_max_vert = XInternAtom(m_display, + "_NET_WM_STATE_MAXIMIZED_VERT", False); + m_net_fullscreen = XInternAtom(m_display, + "_NET_WM_STATE_FULLSCREEN", False); + m_motif = XInternAtom(m_display, "_MOTIF_WM_HINTS", False); + m_targets = XInternAtom(m_display, "TARGETS", False); + m_string = XInternAtom(m_display, "STRING", False); + m_compound_text = XInternAtom(m_display, "COMPOUND_TEXT", False); + m_text = XInternAtom(m_display, "TEXT", False); + m_clipboard = XInternAtom(m_display, "CLIPBOARD", False); + m_primary = XInternAtom(m_display, "PRIMARY", False); + m_xclip_out = XInternAtom(m_display, "XCLIP_OUT", False); + m_incr = XInternAtom(m_display, "INCR", False); + m_utf8_string = XInternAtom(m_display, "UTF8_STRING", False); m_last_warp = 0; // compute the initial time timeval tv; - if (gettimeofday(&tv,NULL) == -1) { - GHOST_ASSERT(false,"Could not instantiate timer!"); + if (gettimeofday(&tv, NULL) == -1) { + GHOST_ASSERT(false, "Could not instantiate timer!"); } // Taking care not to overflow the tv.tv_sec*1000 - m_start_time = GHOST_TUns64(tv.tv_sec)*1000 + tv.tv_usec/1000; + m_start_time = GHOST_TUns64(tv.tv_sec) * 1000 + tv.tv_usec / 1000; /* use detectable autorepeate, mac and windows also do this */ @@ -158,10 +158,10 @@ GHOST_SystemX11:: } - GHOST_TSuccess +GHOST_TSuccess GHOST_SystemX11:: -init( -){ +init() +{ GHOST_TSuccess success = GHOST_System::init(); if (success) { @@ -178,82 +178,82 @@ init( return GHOST_kFailure; } - GHOST_TUns64 +GHOST_TUns64 GHOST_SystemX11:: -getMilliSeconds( -) const { +getMilliSeconds() const +{ timeval tv; - if (gettimeofday(&tv,NULL) == -1) { - GHOST_ASSERT(false,"Could not compute time!"); + if (gettimeofday(&tv, NULL) == -1) { + GHOST_ASSERT(false, "Could not compute time!"); } // Taking care not to overflow the tv.tv_sec*1000 - return GHOST_TUns64(tv.tv_sec)*1000 + tv.tv_usec/1000 - m_start_time; + return GHOST_TUns64(tv.tv_sec) * 1000 + tv.tv_usec / 1000 - m_start_time; } - GHOST_TUns8 +GHOST_TUns8 GHOST_SystemX11:: -getNumDisplays( -) const { +getNumDisplays() const +{ return GHOST_TUns8(1); } - /** - * Returns the dimensions of the main display on this system. - * @return The dimension of the main display. - */ - void +/** + * Returns the dimensions of the main display on this system. + * @return The dimension of the main display. + */ +void GHOST_SystemX11:: getMainDisplayDimensions( - GHOST_TUns32& width, - GHOST_TUns32& height -) const { + GHOST_TUns32& width, + GHOST_TUns32& height) const +{ if (m_display) { width = DisplayWidth(m_display, DefaultScreen(m_display)); height = DisplayHeight(m_display, DefaultScreen(m_display)); } } - /** - * Create a new window. - * The new window is added to the list of windows managed. - * Never explicitly delete the window, use disposeWindow() instead. - * @param title The name of the window (displayed in the title bar of the window if the OS supports it). - * @param left The coordinate of the left edge of the window. - * @param top The coordinate of the top edge of the window. - * @param width The width the window. - * @param height The height the window. - * @param state The state of the window when opened. - * @param type The type of drawing context installed in this window. - * @param stereoVisual Stereo visual for quad buffered stereo. - * @param numOfAASamples Number of samples used for AA (zero if no AA) - * @param parentWindow Parent (embedder) window - * @return The new window (or 0 if creation failed). - */ - GHOST_IWindow* +/** + * Create a new window. + * The new window is added to the list of windows managed. + * Never explicitly delete the window, use disposeWindow() instead. + * @param title The name of the window (displayed in the title bar of the window if the OS supports it). + * @param left The coordinate of the left edge of the window. + * @param top The coordinate of the top edge of the window. + * @param width The width the window. + * @param height The height the window. + * @param state The state of the window when opened. + * @param type The type of drawing context installed in this window. + * @param stereoVisual Stereo visual for quad buffered stereo. + * @param numOfAASamples Number of samples used for AA (zero if no AA) + * @param parentWindow Parent (embedder) window + * @return The new window (or 0 if creation failed). + */ +GHOST_IWindow * GHOST_SystemX11:: createWindow( - const STR_String& title, - GHOST_TInt32 left, - GHOST_TInt32 top, - GHOST_TUns32 width, - GHOST_TUns32 height, - GHOST_TWindowState state, - GHOST_TDrawingContextType type, - bool stereoVisual, - const GHOST_TUns16 numOfAASamples, - const GHOST_TEmbedderWindowID parentWindow -){ - GHOST_WindowX11 * window = 0; + const STR_String& title, + GHOST_TInt32 left, + GHOST_TInt32 top, + GHOST_TUns32 width, + GHOST_TUns32 height, + GHOST_TWindowState state, + GHOST_TDrawingContextType type, + bool stereoVisual, + const GHOST_TUns16 numOfAASamples, + const GHOST_TEmbedderWindowID parentWindow) +{ + GHOST_WindowX11 *window = 0; if (!m_display) return 0; - window = new GHOST_WindowX11 ( - this,m_display,title, left, top, width, height, state, parentWindow, type, stereoVisual - ); + window = new GHOST_WindowX11( + this, m_display, title, left, top, width, height, state, parentWindow, type, stereoVisual + ); if (window) { // Both are now handle in GHOST_WindowX11.cpp @@ -263,7 +263,7 @@ createWindow( // Store the pointer to the window m_windowManager->addWindow(window); m_windowManager->setActiveWindow(window); - pushEvent( new GHOST_Event(getMilliSeconds(), GHOST_kEventWindowSize, window) ); + pushEvent(new GHOST_Event(getMilliSeconds(), GHOST_kEventWindowSize, window) ); } else { delete window; @@ -273,11 +273,11 @@ createWindow( return window; } - GHOST_WindowX11 * +GHOST_WindowX11 * GHOST_SystemX11:: findGhostWindow( - Window xwind -) const { + Window xwind) const +{ if (xwind == 0) return NULL; @@ -292,7 +292,7 @@ findGhostWindow( vector::const_iterator win_end = win_vec.end(); for (; win_it != win_end; ++win_it) { - GHOST_WindowX11 * window = static_cast(*win_it); + GHOST_WindowX11 *window = static_cast(*win_it); if (window->getXWindow() == xwind) { return window; } @@ -315,8 +315,8 @@ static void SleepTillEvent(Display *display, GHOST_TInt64 maxSleep) else { timeval tv; - tv.tv_sec = maxSleep/1000; - tv.tv_usec = (maxSleep - tv.tv_sec*1000)*1000; + tv.tv_sec = maxSleep / 1000; + tv.tv_usec = (maxSleep - tv.tv_sec * 1000) * 1000; select(fd + 1, &fds, NULL, NULL, &tv); } @@ -325,78 +325,78 @@ static void SleepTillEvent(Display *display, GHOST_TInt64 maxSleep) /* This function borrowed from Qt's X11 support * qclipboard_x11.cpp * */ -struct init_timestamp_data -{ - Time timestamp; +struct init_timestamp_data { + Time timestamp; }; -static Bool init_timestamp_scanner(Display*, XEvent *event, XPointer arg) +static Bool init_timestamp_scanner(Display *, XEvent *event, XPointer arg) { init_timestamp_data *data = - reinterpret_cast(arg); - switch(event->type) - { - case ButtonPress: - case ButtonRelease: - data->timestamp = event->xbutton.time; - break; - case MotionNotify: - data->timestamp = event->xmotion.time; - break; - case KeyPress: - case KeyRelease: - data->timestamp = event->xkey.time; - break; - case PropertyNotify: - data->timestamp = event->xproperty.time; - break; - case EnterNotify: - case LeaveNotify: - data->timestamp = event->xcrossing.time; - break; - case SelectionClear: - data->timestamp = event->xselectionclear.time; - break; - default: - break; - } - - return false; + reinterpret_cast(arg); + switch (event->type) + { + case ButtonPress: + case ButtonRelease: + data->timestamp = event->xbutton.time; + break; + case MotionNotify: + data->timestamp = event->xmotion.time; + break; + case KeyPress: + case KeyRelease: + data->timestamp = event->xkey.time; + break; + case PropertyNotify: + data->timestamp = event->xproperty.time; + break; + case EnterNotify: + case LeaveNotify: + data->timestamp = event->xcrossing.time; + break; + case SelectionClear: + data->timestamp = event->xselectionclear.time; + break; + default: + break; + } + + return false; } Time GHOST_SystemX11:: lastEventTime(Time default_time) { - init_timestamp_data data; - data.timestamp = default_time; - XEvent ev; - XCheckIfEvent(m_display, &ev, &init_timestamp_scanner, (XPointer)&data); + init_timestamp_data data; + data.timestamp = default_time; + XEvent ev; + XCheckIfEvent(m_display, &ev, &init_timestamp_scanner, (XPointer) & data); - return data.timestamp; + return data.timestamp; } - bool +bool GHOST_SystemX11:: processEvents( - bool waitForEvent -){ + bool waitForEvent) +{ // Get all the current events -- translate them into // ghost events and call base class pushEvent() method. bool anyProcessed = false; do { - GHOST_TimerManager* timerMgr = getTimerManager(); + GHOST_TimerManager *timerMgr = getTimerManager(); if (waitForEvent && m_dirty_windows.empty() && !XPending(m_display)) { GHOST_TUns64 next = timerMgr->nextFireTime(); - if (next==GHOST_kFireTimeNever) { + if (next == GHOST_kFireTimeNever) { SleepTillEvent(m_display, -1); - } else { + } + else { GHOST_TInt64 maxSleep = next - getMilliSeconds(); - if(maxSleep >= 0) + if (maxSleep >= 0) SleepTillEvent(m_display, next - getMilliSeconds()); } } @@ -417,7 +417,7 @@ processEvents( } #ifdef WITH_INPUT_NDOF - if (dynamic_cast(m_ndofManager)->processEvents()) { + if (dynamic_cast(m_ndofManager)->processEvents()) { anyProcessed = true; } #endif @@ -430,20 +430,20 @@ processEvents( #ifdef WITH_X11_XINPUT /* set currently using tablet mode (stylus or eraser) depending on device ID */ -static void setTabletMode(GHOST_WindowX11 * window, XID deviceid) +static void setTabletMode(GHOST_WindowX11 *window, XID deviceid) { - if(deviceid == window->GetXTablet().StylusID) - window->GetXTablet().CommonData.Active= GHOST_kTabletModeStylus; - else if(deviceid == window->GetXTablet().EraserID) - window->GetXTablet().CommonData.Active= GHOST_kTabletModeEraser; + if (deviceid == window->GetXTablet().StylusID) + window->GetXTablet().CommonData.Active = GHOST_kTabletModeStylus; + else if (deviceid == window->GetXTablet().EraserID) + window->GetXTablet().CommonData.Active = GHOST_kTabletModeEraser; } #endif /* WITH_X11_XINPUT */ - void +void GHOST_SystemX11::processEvent(XEvent *xe) { - GHOST_WindowX11 * window = findGhostWindow(xe->xany.window); - GHOST_Event * g_event = NULL; + GHOST_WindowX11 *window = findGhostWindow(xe->xany.window); + GHOST_Event *g_event = NULL; if (!window) { return; @@ -459,11 +459,11 @@ GHOST_SystemX11::processEvent(XEvent *xe) // per read of the event queue. g_event = new - GHOST_Event( - getMilliSeconds(), - GHOST_kEventWindowUpdate, - window - ); + GHOST_Event( + getMilliSeconds(), + GHOST_kEventWindowUpdate, + window + ); } break; } @@ -479,13 +479,13 @@ GHOST_SystemX11::processEvent(XEvent *xe) #endif if (is_tablet == false && window->getCursorGrabModeIsWarp()) { - GHOST_TInt32 x_new= xme.x_root; - GHOST_TInt32 y_new= xme.y_root; + GHOST_TInt32 x_new = xme.x_root; + GHOST_TInt32 y_new = xme.y_root; GHOST_TInt32 x_accum, y_accum; GHOST_Rect bounds; /* fallback to window bounds */ - if(window->getCursorGrabBounds(bounds)==GHOST_kFailure) + if (window->getCursorGrabBounds(bounds) == GHOST_kFailure) window->getClientBounds(bounds); /* could also clamp to screen bounds @@ -493,37 +493,38 @@ GHOST_SystemX11::processEvent(XEvent *xe) bounds.wrapPoint(x_new, y_new, 8); /* offset of one incase blender is at screen bounds */ window->getCursorGrabAccum(x_accum, y_accum); - if(x_new != xme.x_root || y_new != xme.y_root) { + if (x_new != xme.x_root || y_new != xme.y_root) { if (xme.time > m_last_warp) { /* when wrapping we don't need to add an event because the * setCursorPosition call will cause a new event after */ setCursorPosition(x_new, y_new); /* wrap */ window->setCursorGrabAccum(x_accum + (xme.x_root - x_new), y_accum + (xme.y_root - y_new)); m_last_warp = lastEventTime(xme.time); - } else { + } + else { setCursorPosition(x_new, y_new); /* wrap but don't accumulate */ } } else { g_event = new - GHOST_EventCursor( - getMilliSeconds(), - GHOST_kEventCursorMove, - window, - xme.x_root + x_accum, - xme.y_root + y_accum - ); + GHOST_EventCursor( + getMilliSeconds(), + GHOST_kEventCursorMove, + window, + xme.x_root + x_accum, + xme.y_root + y_accum + ); } } else { g_event = new - GHOST_EventCursor( - getMilliSeconds(), - GHOST_kEventCursorMove, - window, - xme.x_root, - xme.y_root - ); + GHOST_EventCursor( + getMilliSeconds(), + GHOST_kEventCursorMove, + window, + xme.x_root, + xme.y_root + ); } break; } @@ -532,13 +533,13 @@ GHOST_SystemX11::processEvent(XEvent *xe) case KeyRelease: { XKeyEvent *xke = &(xe->xkey); - KeySym key_sym = XLookupKeysym(xke,0); + KeySym key_sym = XLookupKeysym(xke, 0); char ascii; char utf8_buf[6]; /* 6 is enough for a utf8 char */ GHOST_TKey gkey = convertXKey(key_sym); GHOST_TEventType type = (xke->type == KeyPress) ? - GHOST_kEventKeyDown : GHOST_kEventKeyUp; + GHOST_kEventKeyDown : GHOST_kEventKeyUp; if (!XLookupString(xke, &ascii, 1, NULL, NULL)) { ascii = '\0'; @@ -551,8 +552,8 @@ GHOST_SystemX11::processEvent(XEvent *xe) int len; /* use utf8 because its not locale depentant, from xorg docs */ - if (!(len= Xutf8LookupString(window->getX11_XIC(), xke, utf8_buf, sizeof(utf8_buf), &key_sym, &status))) { - utf8_buf[0]= '\0'; + if (!(len = Xutf8LookupString(window->getX11_XIC(), xke, utf8_buf, sizeof(utf8_buf), &key_sym, &status))) { + utf8_buf[0] = '\0'; } if ((status == XLookupChars || status == XLookupBoth)) { @@ -560,7 +561,7 @@ GHOST_SystemX11::processEvent(XEvent *xe) /* do nothing for now, this is valid utf8 */ } else { - utf8_buf[0]= '\0'; + utf8_buf[0] = '\0'; } } else if (status == XLookupKeySym) { @@ -569,33 +570,33 @@ GHOST_SystemX11::processEvent(XEvent *xe) } else { printf("Bad keycode lookup. Keysym 0x%x Status: %s\n", - (unsigned int) key_sym, - (status == XBufferOverflow ? "BufferOverflow" : - status == XLookupNone ? "XLookupNone" : - status == XLookupKeySym ? "XLookupKeySym" : - "Unknown status")); + (unsigned int) key_sym, + (status == XBufferOverflow ? "BufferOverflow" : + status == XLookupNone ? "XLookupNone" : + status == XLookupKeySym ? "XLookupKeySym" : + "Unknown status")); printf("'%.*s' %p %p\n", len, utf8_buf, window->getX11_XIC(), m_xim); } } else { - utf8_buf[0]= '\0'; + utf8_buf[0] = '\0'; } #else - utf8_buf[0]= '\0'; + utf8_buf[0] = '\0'; #endif g_event = new - GHOST_EventKey( - getMilliSeconds(), - type, - window, - gkey, - ascii, + GHOST_EventKey( + getMilliSeconds(), + type, + window, + gkey, + ascii, utf8_buf - ); + ); - break; + break; } case ButtonPress: @@ -604,59 +605,59 @@ GHOST_SystemX11::processEvent(XEvent *xe) XButtonEvent & xbe = xe->xbutton; GHOST_TButtonMask gbmask = GHOST_kButtonMaskLeft; GHOST_TEventType type = (xbe.type == ButtonPress) ? - GHOST_kEventButtonDown : GHOST_kEventButtonUp; + GHOST_kEventButtonDown : GHOST_kEventButtonUp; /* process wheel mouse events and break, only pass on press events */ - if(xbe.button == Button4) { - if(xbe.type == ButtonPress) + if (xbe.button == Button4) { + if (xbe.type == ButtonPress) g_event = new GHOST_EventWheel(getMilliSeconds(), window, 1); break; } - else if(xbe.button == Button5) { - if(xbe.type == ButtonPress) + else if (xbe.button == Button5) { + if (xbe.type == ButtonPress) g_event = new GHOST_EventWheel(getMilliSeconds(), window, -1); break; } /* process rest of normal mouse buttons */ - if(xbe.button == Button1) + if (xbe.button == Button1) gbmask = GHOST_kButtonMaskLeft; - else if(xbe.button == Button2) + else if (xbe.button == Button2) gbmask = GHOST_kButtonMaskMiddle; - else if(xbe.button == Button3) + else if (xbe.button == Button3) gbmask = GHOST_kButtonMaskRight; /* It seems events 6 and 7 are for horizontal scrolling. - * you can re-order button mapping like this... (swaps 6,7 with 8,9) - * xmodmap -e "pointer = 1 2 3 4 5 8 9 6 7" - */ - else if(xbe.button == 8) + * you can re-order button mapping like this... (swaps 6,7 with 8,9) + * xmodmap -e "pointer = 1 2 3 4 5 8 9 6 7" + */ + else if (xbe.button == 8) gbmask = GHOST_kButtonMaskButton4; - else if(xbe.button == 9) + else if (xbe.button == 9) gbmask = GHOST_kButtonMaskButton5; else break; g_event = new - GHOST_EventButton( - getMilliSeconds(), - type, - window, - gbmask - ); + GHOST_EventButton( + getMilliSeconds(), + type, + window, + gbmask + ); break; } - // change of size, border, layer etc. + // change of size, border, layer etc. case ConfigureNotify: { /* XConfigureEvent & xce = xe->xconfigure; */ g_event = new - GHOST_Event( - getMilliSeconds(), - GHOST_kEventWindowSize, - window - ); + GHOST_Event( + getMilliSeconds(), + GHOST_kEventWindowSize, + window + ); break; } @@ -672,14 +673,14 @@ GHOST_SystemX11::processEvent(XEvent *xe) // out. GHOST_TEventType gtype = (xfe.type == FocusIn) ? - GHOST_kEventWindowActivate : GHOST_kEventWindowDeactivate; + GHOST_kEventWindowActivate : GHOST_kEventWindowDeactivate; g_event = new - GHOST_Event( - getMilliSeconds(), - gtype, - window - ); + GHOST_Event( + getMilliSeconds(), + gtype, + window + ); break; } @@ -689,11 +690,11 @@ GHOST_SystemX11::processEvent(XEvent *xe) if (((Atom)xcme.data.l[0]) == m_delete_window_atom) { g_event = new - GHOST_Event( - getMilliSeconds(), - GHOST_kEventWindowClose, - window - ); + GHOST_Event( + getMilliSeconds(), + GHOST_kEventWindowClose, + window + ); } else if (((Atom)xcme.data.l[0]) == m_wm_take_focus) { XWindowAttributes attr; @@ -718,7 +719,8 @@ GHOST_SystemX11::processEvent(XEvent *xe) } } } - } else { + } + else { #ifdef WITH_XDND /* try to handle drag event (if there's no such events, GHOST_HandleClientMessage will return zero) */ if (window->getDropTarget()->GHOST_HandleClientMessage(xe) == false) { @@ -735,8 +737,8 @@ GHOST_SystemX11::processEvent(XEvent *xe) case DestroyNotify: ::exit(-1); // We're not interested in the following things.(yet...) - case NoExpose : - case GraphicsExpose : + case NoExpose: + case GraphicsExpose: break; case EnterNotify: @@ -748,17 +750,17 @@ GHOST_SystemX11::processEvent(XEvent *xe) we only do moves when the crossing mode is 'normal' (really crossing between windows) since some windowmanagers also send grab/ungrab crossings for mousewheel events. - */ + */ XCrossingEvent &xce = xe->xcrossing; - if( xce.mode == NotifyNormal ) { + if (xce.mode == NotifyNormal) { g_event = new - GHOST_EventCursor( - getMilliSeconds(), - GHOST_kEventCursorMove, - window, - xce.x_root, - xce.y_root - ); + GHOST_EventCursor( + getMilliSeconds(), + GHOST_kEventCursorMove, + window, + xce.x_root, + xce.y_root + ); } // printf("X: %s window %d\n", xce.type == EnterNotify ? "entering" : "leaving", (int) xce.window); @@ -785,7 +787,7 @@ GHOST_SystemX11::processEvent(XEvent *xe) * Now we are sure that the window is * mapped, so only need change the state. */ - window->setState (window->m_post_state); + window->setState(window->m_post_state); window->m_post_init = False; } break; @@ -820,15 +822,17 @@ GHOST_SystemX11::processEvent(XEvent *xe) nxe.xselection.time = xse->time; /*Check to see if the requestor is asking for String*/ - if(xse->target == utf8_string || xse->target == string || xse->target == compound_text || xse->target == c_string) { + if (xse->target == utf8_string || xse->target == string || xse->target == compound_text || xse->target == c_string) { if (xse->selection == XInternAtom(m_display, "PRIMARY", False)) { XChangeProperty(m_display, xse->requestor, xse->property, xse->target, 8, PropModeReplace, - (unsigned char*)txt_select_buffer, strlen(txt_select_buffer)); - } else if (xse->selection == XInternAtom(m_display, "CLIPBOARD", False)) { + (unsigned char *)txt_select_buffer, strlen(txt_select_buffer)); + } + else if (xse->selection == XInternAtom(m_display, "CLIPBOARD", False)) { XChangeProperty(m_display, xse->requestor, xse->property, xse->target, 8, PropModeReplace, - (unsigned char*)txt_cut_buffer, strlen(txt_cut_buffer)); + (unsigned char *)txt_cut_buffer, strlen(txt_cut_buffer)); } - } else if (xse->target == target) { + } + else if (xse->target == target) { Atom alist[5]; alist[0] = target; alist[1] = utf8_string; @@ -836,9 +840,10 @@ GHOST_SystemX11::processEvent(XEvent *xe) alist[3] = compound_text; alist[4] = c_string; XChangeProperty(m_display, xse->requestor, xse->property, xse->target, 32, PropModeReplace, - (unsigned char*)alist, 5); + (unsigned char *)alist, 5); XFlush(m_display); - } else { + } + else { //Change property to None because we do not support anything but STRING nxe.xselection.property = None; } @@ -851,33 +856,33 @@ GHOST_SystemX11::processEvent(XEvent *xe) default: { #ifdef WITH_X11_XINPUT - if(xe->type == window->GetXTablet().MotionEvent) + if (xe->type == window->GetXTablet().MotionEvent) { - XDeviceMotionEvent* data = (XDeviceMotionEvent*)xe; + XDeviceMotionEvent *data = (XDeviceMotionEvent *)xe; /* stroke might begin without leading ProxyIn event, * this happens when window is opened when stylus is already hovering * around tablet surface */ setTabletMode(window, data->deviceid); - window->GetXTablet().CommonData.Pressure= - data->axis_data[2]/((float)window->GetXTablet().PressureLevels); + window->GetXTablet().CommonData.Pressure = + data->axis_data[2] / ((float)window->GetXTablet().PressureLevels); - /* the (short) cast and the &0xffff is bizarre and unexplained anywhere, - * but I got garbage data without it. Found it in the xidump.c source --matt */ - window->GetXTablet().CommonData.Xtilt= - (short)(data->axis_data[3]&0xffff)/((float)window->GetXTablet().XtiltLevels); - window->GetXTablet().CommonData.Ytilt= - (short)(data->axis_data[4]&0xffff)/((float)window->GetXTablet().YtiltLevels); + /* the (short) cast and the &0xffff is bizarre and unexplained anywhere, + * but I got garbage data without it. Found it in the xidump.c source --matt */ + window->GetXTablet().CommonData.Xtilt = + (short)(data->axis_data[3] & 0xffff) / ((float)window->GetXTablet().XtiltLevels); + window->GetXTablet().CommonData.Ytilt = + (short)(data->axis_data[4] & 0xffff) / ((float)window->GetXTablet().YtiltLevels); } - else if(xe->type == window->GetXTablet().ProxInEvent) + else if (xe->type == window->GetXTablet().ProxInEvent) { - XProximityNotifyEvent* data = (XProximityNotifyEvent*)xe; + XProximityNotifyEvent *data = (XProximityNotifyEvent *)xe; setTabletMode(window, data->deviceid); } - else if(xe->type == window->GetXTablet().ProxOutEvent) - window->GetXTablet().CommonData.Active= GHOST_kTabletModeNone; + else if (xe->type == window->GetXTablet().ProxOutEvent) + window->GetXTablet().CommonData.Active = GHOST_kTabletModeNone; #endif // WITH_X11_XINPUT break; } @@ -888,29 +893,29 @@ GHOST_SystemX11::processEvent(XEvent *xe) } } - GHOST_TSuccess +GHOST_TSuccess GHOST_SystemX11:: getModifierKeys( - GHOST_ModifierKeys& keys -) const { + GHOST_ModifierKeys& keys) const +{ // analyse the masks retuned from XQueryPointer. - memset((void *)m_keyboard_vector,0,sizeof(m_keyboard_vector)); + memset((void *)m_keyboard_vector, 0, sizeof(m_keyboard_vector)); - XQueryKeymap(m_display,(char *)m_keyboard_vector); + XQueryKeymap(m_display, (char *)m_keyboard_vector); // now translate key symobols into keycodes and // test with vector. - const static KeyCode shift_l = XKeysymToKeycode(m_display,XK_Shift_L); - const static KeyCode shift_r = XKeysymToKeycode(m_display,XK_Shift_R); - const static KeyCode control_l = XKeysymToKeycode(m_display,XK_Control_L); - const static KeyCode control_r = XKeysymToKeycode(m_display,XK_Control_R); - const static KeyCode alt_l = XKeysymToKeycode(m_display,XK_Alt_L); - const static KeyCode alt_r = XKeysymToKeycode(m_display,XK_Alt_R); - const static KeyCode super_l = XKeysymToKeycode(m_display,XK_Super_L); - const static KeyCode super_r = XKeysymToKeycode(m_display,XK_Super_R); + const static KeyCode shift_l = XKeysymToKeycode(m_display, XK_Shift_L); + const static KeyCode shift_r = XKeysymToKeycode(m_display, XK_Shift_R); + const static KeyCode control_l = XKeysymToKeycode(m_display, XK_Control_L); + const static KeyCode control_r = XKeysymToKeycode(m_display, XK_Control_R); + const static KeyCode alt_l = XKeysymToKeycode(m_display, XK_Alt_L); + const static KeyCode alt_r = XKeysymToKeycode(m_display, XK_Alt_R); + const static KeyCode super_l = XKeysymToKeycode(m_display, XK_Super_L); + const static KeyCode super_r = XKeysymToKeycode(m_display, XK_Super_R); // shift keys.set(GHOST_kModifierKeyLeftShift, ((m_keyboard_vector[shift_l >> 3] >> (shift_l & 7)) & 1) != 0); @@ -928,22 +933,21 @@ getModifierKeys( return GHOST_kSuccess; } - GHOST_TSuccess +GHOST_TSuccess GHOST_SystemX11:: getButtons( - GHOST_Buttons& buttons -) const { - + GHOST_Buttons& buttons) const +{ Window root_return, child_return; - int rx,ry,wx,wy; + int rx, ry, wx, wy; unsigned int mask_return; if (XQueryPointer(m_display, - RootWindow(m_display,DefaultScreen(m_display)), + RootWindow(m_display, DefaultScreen(m_display)), &root_return, &child_return, - &rx,&ry, - &wx,&wy, + &rx, &ry, + &wx, &wy, &mask_return) == True) { buttons.set(GHOST_kButtonMaskLeft, (mask_return & Button1Mask) != 0); @@ -958,28 +962,29 @@ getButtons( } - GHOST_TSuccess +GHOST_TSuccess GHOST_SystemX11:: getCursorPosition( - GHOST_TInt32& x, - GHOST_TInt32& y -) const { + GHOST_TInt32& x, + GHOST_TInt32& y) const +{ Window root_return, child_return; - int rx,ry,wx,wy; + int rx, ry, wx, wy; unsigned int mask_return; if (XQueryPointer( - m_display, - RootWindow(m_display,DefaultScreen(m_display)), - &root_return, - &child_return, - &rx,&ry, - &wx,&wy, - &mask_return - ) == False) { + m_display, + RootWindow(m_display, DefaultScreen(m_display)), + &root_return, + &child_return, + &rx, &ry, + &wx, &wy, + &mask_return + ) == False) { return GHOST_kFailure; - } else { + } + else { x = rx; y = ry; } @@ -987,60 +992,58 @@ getCursorPosition( } - GHOST_TSuccess +GHOST_TSuccess GHOST_SystemX11:: setCursorPosition( - GHOST_TInt32 x, - GHOST_TInt32 y -) { + GHOST_TInt32 x, + GHOST_TInt32 y + ) { // This is a brute force move in screen coordinates // XWarpPointer does relative moves so first determine the // current pointer position. - int cx,cy; - if (getCursorPosition(cx,cy) == GHOST_kFailure) { + int cx, cy; + if (getCursorPosition(cx, cy) == GHOST_kFailure) { return GHOST_kFailure; } - int relx = x-cx; - int rely = y-cy; + int relx = x - cx; + int rely = y - cy; - XWarpPointer(m_display,None,None,0,0,0,0,relx,rely); + XWarpPointer(m_display, None, None, 0, 0, 0, 0, relx, rely); XSync(m_display, 0); /* Sync to process all requests */ return GHOST_kSuccess; } - void +void GHOST_SystemX11:: addDirtyWindow( - GHOST_WindowX11 * bad_wind -){ - + GHOST_WindowX11 *bad_wind) +{ GHOST_ASSERT((bad_wind != NULL), "addDirtyWindow() NULL ptr trapped (window)"); m_dirty_windows.push_back(bad_wind); } - bool +bool GHOST_SystemX11:: -generateWindowExposeEvents( -){ - +generateWindowExposeEvents() +{ vector::iterator w_start = m_dirty_windows.begin(); vector::const_iterator w_end = m_dirty_windows.end(); bool anyProcessed = false; - for (;w_start != w_end; ++w_start) { - GHOST_Event * g_event = new - GHOST_Event( - getMilliSeconds(), - GHOST_kEventWindowUpdate, - *w_start - ); + for (; w_start != w_end; ++w_start) { + GHOST_Event *g_event = new + GHOST_Event( + getMilliSeconds(), + GHOST_kEventWindowUpdate, + *w_start + ); (*w_start)->validate(); @@ -1054,7 +1057,7 @@ generateWindowExposeEvents( return anyProcessed; } -#define GXMAP(k,x,y) case x: k = y; break; +#define GXMAP(k, x, y) case x: k = y; break static GHOST_TKey convertXKey(KeySym key) @@ -1062,12 +1065,15 @@ convertXKey(KeySym key) GHOST_TKey type; if ((key >= XK_A) && (key <= XK_Z)) { - type = GHOST_TKey( key - XK_A + int(GHOST_kKeyA)); - } else if ((key >= XK_a) && (key <= XK_z)) { + type = GHOST_TKey(key - XK_A + int(GHOST_kKeyA)); + } + else if ((key >= XK_a) && (key <= XK_z)) { type = GHOST_TKey(key - XK_a + int(GHOST_kKeyA)); - } else if ((key >= XK_0) && (key <= XK_9)) { + } + else if ((key >= XK_0) && (key <= XK_9)) { type = GHOST_TKey(key - XK_0 + int(GHOST_kKey0)); - } else if ((key >= XK_F1) && (key <= XK_F24)) { + } + else if ((key >= XK_F1) && (key <= XK_F24)) { type = GHOST_TKey(key - XK_F1 + int(GHOST_kKeyF1)); #if defined(__sun) || defined(__sun__) /* This is a bit of a hack, but it looks like sun @@ -1076,121 +1082,124 @@ convertXKey(KeySym key) following link has documentation on it: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4734408 also from /usr/include/X11/Sunkeysym.h -#define SunXK_F36 0x1005FF10 // Labeled F11 -#define SunXK_F37 0x1005FF11 // Labeled F12 + #define SunXK_F36 0x1005FF10 // Labeled F11 + #define SunXK_F37 0x1005FF11 // Labeled F12 - mein@cs.umn.edu + mein@cs.umn.edu */ - } else if (key == 268828432) { + } + else if (key == 268828432) { type = GHOST_kKeyF11; - } else if (key == 268828433) { + } + else if (key == 268828433) { type = GHOST_kKeyF12; #endif - } else { - switch(key) { - GXMAP(type,XK_BackSpace, GHOST_kKeyBackSpace); - GXMAP(type,XK_Tab, GHOST_kKeyTab); - GXMAP(type,XK_Return, GHOST_kKeyEnter); - GXMAP(type,XK_Escape, GHOST_kKeyEsc); - GXMAP(type,XK_space, GHOST_kKeySpace); - - GXMAP(type,XK_Linefeed, GHOST_kKeyLinefeed); - GXMAP(type,XK_semicolon, GHOST_kKeySemicolon); - GXMAP(type,XK_period, GHOST_kKeyPeriod); - GXMAP(type,XK_comma, GHOST_kKeyComma); - GXMAP(type,XK_quoteright, GHOST_kKeyQuote); - GXMAP(type,XK_quoteleft, GHOST_kKeyAccentGrave); - GXMAP(type,XK_minus, GHOST_kKeyMinus); - GXMAP(type,XK_slash, GHOST_kKeySlash); - GXMAP(type,XK_backslash, GHOST_kKeyBackslash); - GXMAP(type,XK_equal, GHOST_kKeyEqual); - GXMAP(type,XK_bracketleft, GHOST_kKeyLeftBracket); - GXMAP(type,XK_bracketright, GHOST_kKeyRightBracket); - GXMAP(type,XK_Pause, GHOST_kKeyPause); - - GXMAP(type,XK_Shift_L, GHOST_kKeyLeftShift); - GXMAP(type,XK_Shift_R, GHOST_kKeyRightShift); - GXMAP(type,XK_Control_L, GHOST_kKeyLeftControl); - GXMAP(type,XK_Control_R, GHOST_kKeyRightControl); - GXMAP(type,XK_Alt_L, GHOST_kKeyLeftAlt); - GXMAP(type,XK_Alt_R, GHOST_kKeyRightAlt); - GXMAP(type,XK_Super_L, GHOST_kKeyOS); - GXMAP(type,XK_Super_R, GHOST_kKeyOS); - - GXMAP(type,XK_Insert, GHOST_kKeyInsert); - GXMAP(type,XK_Delete, GHOST_kKeyDelete); - GXMAP(type,XK_Home, GHOST_kKeyHome); - GXMAP(type,XK_End, GHOST_kKeyEnd); - GXMAP(type,XK_Page_Up, GHOST_kKeyUpPage); - GXMAP(type,XK_Page_Down, GHOST_kKeyDownPage); - - GXMAP(type,XK_Left, GHOST_kKeyLeftArrow); - GXMAP(type,XK_Right, GHOST_kKeyRightArrow); - GXMAP(type,XK_Up, GHOST_kKeyUpArrow); - GXMAP(type,XK_Down, GHOST_kKeyDownArrow); - - GXMAP(type,XK_Caps_Lock, GHOST_kKeyCapsLock); - GXMAP(type,XK_Scroll_Lock, GHOST_kKeyScrollLock); - GXMAP(type,XK_Num_Lock, GHOST_kKeyNumLock); - - /* keypad events */ - - GXMAP(type,XK_KP_0, GHOST_kKeyNumpad0); - GXMAP(type,XK_KP_1, GHOST_kKeyNumpad1); - GXMAP(type,XK_KP_2, GHOST_kKeyNumpad2); - GXMAP(type,XK_KP_3, GHOST_kKeyNumpad3); - GXMAP(type,XK_KP_4, GHOST_kKeyNumpad4); - GXMAP(type,XK_KP_5, GHOST_kKeyNumpad5); - GXMAP(type,XK_KP_6, GHOST_kKeyNumpad6); - GXMAP(type,XK_KP_7, GHOST_kKeyNumpad7); - GXMAP(type,XK_KP_8, GHOST_kKeyNumpad8); - GXMAP(type,XK_KP_9, GHOST_kKeyNumpad9); - GXMAP(type,XK_KP_Decimal, GHOST_kKeyNumpadPeriod); - - GXMAP(type,XK_KP_Insert, GHOST_kKeyNumpad0); - GXMAP(type,XK_KP_End, GHOST_kKeyNumpad1); - GXMAP(type,XK_KP_Down, GHOST_kKeyNumpad2); - GXMAP(type,XK_KP_Page_Down, GHOST_kKeyNumpad3); - GXMAP(type,XK_KP_Left, GHOST_kKeyNumpad4); - GXMAP(type,XK_KP_Begin, GHOST_kKeyNumpad5); - GXMAP(type,XK_KP_Right, GHOST_kKeyNumpad6); - GXMAP(type,XK_KP_Home, GHOST_kKeyNumpad7); - GXMAP(type,XK_KP_Up, GHOST_kKeyNumpad8); - GXMAP(type,XK_KP_Page_Up, GHOST_kKeyNumpad9); - GXMAP(type,XK_KP_Delete, GHOST_kKeyNumpadPeriod); - - GXMAP(type,XK_KP_Enter, GHOST_kKeyNumpadEnter); - GXMAP(type,XK_KP_Add, GHOST_kKeyNumpadPlus); - GXMAP(type,XK_KP_Subtract, GHOST_kKeyNumpadMinus); - GXMAP(type,XK_KP_Multiply, GHOST_kKeyNumpadAsterisk); - GXMAP(type,XK_KP_Divide, GHOST_kKeyNumpadSlash); + } + else { + switch (key) { + GXMAP(type, XK_BackSpace, GHOST_kKeyBackSpace); + GXMAP(type, XK_Tab, GHOST_kKeyTab); + GXMAP(type, XK_Return, GHOST_kKeyEnter); + GXMAP(type, XK_Escape, GHOST_kKeyEsc); + GXMAP(type, XK_space, GHOST_kKeySpace); + + GXMAP(type, XK_Linefeed, GHOST_kKeyLinefeed); + GXMAP(type, XK_semicolon, GHOST_kKeySemicolon); + GXMAP(type, XK_period, GHOST_kKeyPeriod); + GXMAP(type, XK_comma, GHOST_kKeyComma); + GXMAP(type, XK_quoteright, GHOST_kKeyQuote); + GXMAP(type, XK_quoteleft, GHOST_kKeyAccentGrave); + GXMAP(type, XK_minus, GHOST_kKeyMinus); + GXMAP(type, XK_slash, GHOST_kKeySlash); + GXMAP(type, XK_backslash, GHOST_kKeyBackslash); + GXMAP(type, XK_equal, GHOST_kKeyEqual); + GXMAP(type, XK_bracketleft, GHOST_kKeyLeftBracket); + GXMAP(type, XK_bracketright, GHOST_kKeyRightBracket); + GXMAP(type, XK_Pause, GHOST_kKeyPause); + + GXMAP(type, XK_Shift_L, GHOST_kKeyLeftShift); + GXMAP(type, XK_Shift_R, GHOST_kKeyRightShift); + GXMAP(type, XK_Control_L, GHOST_kKeyLeftControl); + GXMAP(type, XK_Control_R, GHOST_kKeyRightControl); + GXMAP(type, XK_Alt_L, GHOST_kKeyLeftAlt); + GXMAP(type, XK_Alt_R, GHOST_kKeyRightAlt); + GXMAP(type, XK_Super_L, GHOST_kKeyOS); + GXMAP(type, XK_Super_R, GHOST_kKeyOS); + + GXMAP(type, XK_Insert, GHOST_kKeyInsert); + GXMAP(type, XK_Delete, GHOST_kKeyDelete); + GXMAP(type, XK_Home, GHOST_kKeyHome); + GXMAP(type, XK_End, GHOST_kKeyEnd); + GXMAP(type, XK_Page_Up, GHOST_kKeyUpPage); + GXMAP(type, XK_Page_Down, GHOST_kKeyDownPage); + + GXMAP(type, XK_Left, GHOST_kKeyLeftArrow); + GXMAP(type, XK_Right, GHOST_kKeyRightArrow); + GXMAP(type, XK_Up, GHOST_kKeyUpArrow); + GXMAP(type, XK_Down, GHOST_kKeyDownArrow); + + GXMAP(type, XK_Caps_Lock, GHOST_kKeyCapsLock); + GXMAP(type, XK_Scroll_Lock, GHOST_kKeyScrollLock); + GXMAP(type, XK_Num_Lock, GHOST_kKeyNumLock); + + /* keypad events */ + + GXMAP(type, XK_KP_0, GHOST_kKeyNumpad0); + GXMAP(type, XK_KP_1, GHOST_kKeyNumpad1); + GXMAP(type, XK_KP_2, GHOST_kKeyNumpad2); + GXMAP(type, XK_KP_3, GHOST_kKeyNumpad3); + GXMAP(type, XK_KP_4, GHOST_kKeyNumpad4); + GXMAP(type, XK_KP_5, GHOST_kKeyNumpad5); + GXMAP(type, XK_KP_6, GHOST_kKeyNumpad6); + GXMAP(type, XK_KP_7, GHOST_kKeyNumpad7); + GXMAP(type, XK_KP_8, GHOST_kKeyNumpad8); + GXMAP(type, XK_KP_9, GHOST_kKeyNumpad9); + GXMAP(type, XK_KP_Decimal, GHOST_kKeyNumpadPeriod); + + GXMAP(type, XK_KP_Insert, GHOST_kKeyNumpad0); + GXMAP(type, XK_KP_End, GHOST_kKeyNumpad1); + GXMAP(type, XK_KP_Down, GHOST_kKeyNumpad2); + GXMAP(type, XK_KP_Page_Down, GHOST_kKeyNumpad3); + GXMAP(type, XK_KP_Left, GHOST_kKeyNumpad4); + GXMAP(type, XK_KP_Begin, GHOST_kKeyNumpad5); + GXMAP(type, XK_KP_Right, GHOST_kKeyNumpad6); + GXMAP(type, XK_KP_Home, GHOST_kKeyNumpad7); + GXMAP(type, XK_KP_Up, GHOST_kKeyNumpad8); + GXMAP(type, XK_KP_Page_Up, GHOST_kKeyNumpad9); + GXMAP(type, XK_KP_Delete, GHOST_kKeyNumpadPeriod); + + GXMAP(type, XK_KP_Enter, GHOST_kKeyNumpadEnter); + GXMAP(type, XK_KP_Add, GHOST_kKeyNumpadPlus); + GXMAP(type, XK_KP_Subtract, GHOST_kKeyNumpadMinus); + GXMAP(type, XK_KP_Multiply, GHOST_kKeyNumpadAsterisk); + GXMAP(type, XK_KP_Divide, GHOST_kKeyNumpadSlash); /* Media keys in some keyboards and laptops with XFree86/Xorg */ #ifdef WITH_XF86KEYSYM - GXMAP(type,XF86XK_AudioPlay, GHOST_kKeyMediaPlay); - GXMAP(type,XF86XK_AudioStop, GHOST_kKeyMediaStop); - GXMAP(type,XF86XK_AudioPrev, GHOST_kKeyMediaFirst); - GXMAP(type,XF86XK_AudioRewind, GHOST_kKeyMediaFirst); - GXMAP(type,XF86XK_AudioNext, GHOST_kKeyMediaLast); + GXMAP(type, XF86XK_AudioPlay, GHOST_kKeyMediaPlay); + GXMAP(type, XF86XK_AudioStop, GHOST_kKeyMediaStop); + GXMAP(type, XF86XK_AudioPrev, GHOST_kKeyMediaFirst); + GXMAP(type, XF86XK_AudioRewind, GHOST_kKeyMediaFirst); + GXMAP(type, XF86XK_AudioNext, GHOST_kKeyMediaLast); #ifdef XF86XK_AudioForward /* Debian lenny's XF86keysym.h has no XF86XK_AudioForward define */ - GXMAP(type,XF86XK_AudioForward, GHOST_kKeyMediaLast); + GXMAP(type, XF86XK_AudioForward, GHOST_kKeyMediaLast); #endif #endif - /* some extra sun cruft (NICE KEYBOARD!) */ + /* some extra sun cruft (NICE KEYBOARD!) */ #ifdef __sun__ - GXMAP(type,0xffde, GHOST_kKeyNumpad1); - GXMAP(type,0xffe0, GHOST_kKeyNumpad3); - GXMAP(type,0xffdc, GHOST_kKeyNumpad5); - GXMAP(type,0xffd8, GHOST_kKeyNumpad7); - GXMAP(type,0xffda, GHOST_kKeyNumpad9); - - GXMAP(type,0xffd6, GHOST_kKeyNumpadSlash); - GXMAP(type,0xffd7, GHOST_kKeyNumpadAsterisk); + GXMAP(type, 0xffde, GHOST_kKeyNumpad1); + GXMAP(type, 0xffe0, GHOST_kKeyNumpad3); + GXMAP(type, 0xffdc, GHOST_kKeyNumpad5); + GXMAP(type, 0xffd8, GHOST_kKeyNumpad7); + GXMAP(type, 0xffda, GHOST_kKeyNumpad9); + + GXMAP(type, 0xffd6, GHOST_kKeyNumpadSlash); + GXMAP(type, 0xffd7, GHOST_kKeyNumpadAsterisk); #endif - default : + default: type = GHOST_kKeyUnknown; break; } @@ -1203,28 +1212,28 @@ convertXKey(KeySym key) /* from xclip.c xcout() v0.11 */ -#define XCLIB_XCOUT_NONE 0 /* no context */ -#define XCLIB_XCOUT_SENTCONVSEL 1 /* sent a request */ -#define XCLIB_XCOUT_INCR 2 /* in an incr loop */ -#define XCLIB_XCOUT_FALLBACK 3 /* STRING failed, need fallback to UTF8 */ -#define XCLIB_XCOUT_FALLBACK_UTF8 4 /* UTF8 failed, move to compouned */ -#define XCLIB_XCOUT_FALLBACK_COMP 5 /* compouned failed, move to text. */ -#define XCLIB_XCOUT_FALLBACK_TEXT 6 +#define XCLIB_XCOUT_NONE 0 /* no context */ +#define XCLIB_XCOUT_SENTCONVSEL 1 /* sent a request */ +#define XCLIB_XCOUT_INCR 2 /* in an incr loop */ +#define XCLIB_XCOUT_FALLBACK 3 /* STRING failed, need fallback to UTF8 */ +#define XCLIB_XCOUT_FALLBACK_UTF8 4 /* UTF8 failed, move to compouned */ +#define XCLIB_XCOUT_FALLBACK_COMP 5 /* compouned failed, move to text. */ +#define XCLIB_XCOUT_FALLBACK_TEXT 6 // Retrieves the contents of a selections. void GHOST_SystemX11::getClipboard_xcout(XEvent evt, - Atom sel, Atom target, unsigned char **txt, - unsigned long *len, unsigned int *context) const + Atom sel, Atom target, unsigned char **txt, + unsigned long *len, unsigned int *context) const { Atom pty_type; int pty_format; unsigned char *buffer; unsigned long pty_size, pty_items; - unsigned char *ltxt= *txt; + unsigned char *ltxt = *txt; vector & win_vec = m_windowManager->getWindows(); vector::iterator win_it = win_vec.begin(); - GHOST_WindowX11 * window = static_cast(*win_it); + GHOST_WindowX11 *window = static_cast(*win_it); Window win = window->getXWindow(); switch (*context) { @@ -1246,22 +1255,22 @@ void GHOST_SystemX11::getClipboard_xcout(XEvent evt, return; if (target == m_utf8_string && evt.xselection.property == None) { - *context= XCLIB_XCOUT_FALLBACK_UTF8; + *context = XCLIB_XCOUT_FALLBACK_UTF8; return; } else if (target == m_compound_text && evt.xselection.property == None) { - *context= XCLIB_XCOUT_FALLBACK_COMP; + *context = XCLIB_XCOUT_FALLBACK_COMP; return; } else if (target == m_text && evt.xselection.property == None) { - *context= XCLIB_XCOUT_FALLBACK_TEXT; + *context = XCLIB_XCOUT_FALLBACK_TEXT; return; } // find the size and format of the data in property XGetWindowProperty(m_display, win, m_xclip_out, 0, 0, False, - AnyPropertyType, &pty_type, &pty_format, - &pty_items, &pty_size, &buffer); + AnyPropertyType, &pty_type, &pty_format, + &pty_items, &pty_size, &buffer); XFree(buffer); if (pty_type == m_incr) { @@ -1282,8 +1291,8 @@ void GHOST_SystemX11::getClipboard_xcout(XEvent evt, // not using INCR mechanism, just read the property XGetWindowProperty(m_display, win, m_xclip_out, 0, (long) pty_size, - False, AnyPropertyType, &pty_type, - &pty_format, &pty_items, &pty_size, &buffer); + False, AnyPropertyType, &pty_type, + &pty_format, &pty_items, &pty_size, &buffer); // finished with property, delete it XDeleteProperty(m_display, win, m_xclip_out); @@ -1320,8 +1329,8 @@ void GHOST_SystemX11::getClipboard_xcout(XEvent evt, // check size and format of the property XGetWindowProperty(m_display, win, m_xclip_out, 0, 0, False, - AnyPropertyType, &pty_type, &pty_format, - &pty_items, &pty_size, (unsigned char **) &buffer); + AnyPropertyType, &pty_type, &pty_format, + &pty_items, &pty_size, (unsigned char **) &buffer); if (pty_format != 8) { // property does not contain text, delete it @@ -1348,8 +1357,8 @@ void GHOST_SystemX11::getClipboard_xcout(XEvent evt, // if we have come this far, the propery contains // text, we know the size. XGetWindowProperty(m_display, win, m_xclip_out, 0, (long) pty_size, - False, AnyPropertyType, &pty_type, &pty_format, - &pty_items, &pty_size, (unsigned char **) &buffer); + False, AnyPropertyType, &pty_type, &pty_format, + &pty_items, &pty_size, (unsigned char **) &buffer); // allocate memory to accommodate data in *txt if (*len == 0) { @@ -1378,37 +1387,37 @@ void GHOST_SystemX11::getClipboard_xcout(XEvent evt, GHOST_TUns8 *GHOST_SystemX11::getClipboard(bool selection) const { Atom sseln; - Atom target= m_utf8_string; + Atom target = m_utf8_string; Window owner; // from xclip.c doOut() v0.11 unsigned char *sel_buf; - unsigned long sel_len= 0; + unsigned long sel_len = 0; XEvent evt; - unsigned int context= XCLIB_XCOUT_NONE; + unsigned int context = XCLIB_XCOUT_NONE; if (selection == True) - sseln= m_primary; + sseln = m_primary; else - sseln= m_clipboard; + sseln = m_clipboard; vector & win_vec = m_windowManager->getWindows(); vector::iterator win_it = win_vec.begin(); - GHOST_WindowX11 * window = static_cast(*win_it); + GHOST_WindowX11 *window = static_cast(*win_it); Window win = window->getXWindow(); /* check if we are the owner. */ - owner= XGetSelectionOwner(m_display, sseln); + owner = XGetSelectionOwner(m_display, sseln); if (owner == win) { if (sseln == m_clipboard) { - sel_buf= (unsigned char *)malloc(strlen(txt_cut_buffer)+1); + sel_buf = (unsigned char *)malloc(strlen(txt_cut_buffer) + 1); strcpy((char *)sel_buf, txt_cut_buffer); - return((GHOST_TUns8*)sel_buf); + return((GHOST_TUns8 *)sel_buf); } else { - sel_buf= (unsigned char *)malloc(strlen(txt_select_buffer)+1); + sel_buf = (unsigned char *)malloc(strlen(txt_select_buffer) + 1); strcpy((char *)sel_buf, txt_select_buffer); - return((GHOST_TUns8*)sel_buf); + return((GHOST_TUns8 *)sel_buf); } } else if (owner == None) @@ -1424,20 +1433,20 @@ GHOST_TUns8 *GHOST_SystemX11::getClipboard(bool selection) const /* fallback is needed. set XA_STRING to target and restart the loop. */ if (context == XCLIB_XCOUT_FALLBACK) { - context= XCLIB_XCOUT_NONE; - target= m_string; + context = XCLIB_XCOUT_NONE; + target = m_string; continue; } else if (context == XCLIB_XCOUT_FALLBACK_UTF8) { /* utf8 fail, move to compouned text. */ - context= XCLIB_XCOUT_NONE; - target= m_compound_text; + context = XCLIB_XCOUT_NONE; + target = m_compound_text; continue; } else if (context == XCLIB_XCOUT_FALLBACK_COMP) { /* compouned text faile, move to text. */ - context= XCLIB_XCOUT_NONE; - target= m_text; + context = XCLIB_XCOUT_NONE; + target = m_text; continue; } @@ -1450,8 +1459,8 @@ GHOST_TUns8 *GHOST_SystemX11::getClipboard(bool selection) const /* only print the buffer out, and free it, if it's not * empty */ - unsigned char *tmp_data = (unsigned char*) malloc(sel_len+1); - memcpy((char*)tmp_data, (char*)sel_buf, sel_len); + unsigned char *tmp_data = (unsigned char *) malloc(sel_len + 1); + memcpy((char *)tmp_data, (char *)sel_buf, sel_len); tmp_data[sel_len] = '\0'; if (sseln == m_string) @@ -1459,7 +1468,7 @@ GHOST_TUns8 *GHOST_SystemX11::getClipboard(bool selection) const else free(sel_buf); - return (GHOST_TUns8*)tmp_data; + return (GHOST_TUns8 *)tmp_data; } return(NULL); } @@ -1470,25 +1479,26 @@ void GHOST_SystemX11::putClipboard(GHOST_TInt8 *buffer, bool selection) const vector & win_vec = m_windowManager->getWindows(); vector::iterator win_it = win_vec.begin(); - GHOST_WindowX11 * window = static_cast(*win_it); + GHOST_WindowX11 *window = static_cast(*win_it); m_window = window->getXWindow(); if (buffer) { if (selection == False) { XSetSelectionOwner(m_display, m_clipboard, m_window, CurrentTime); - owner= XGetSelectionOwner(m_display, m_clipboard); + owner = XGetSelectionOwner(m_display, m_clipboard); if (txt_cut_buffer) - free((void*)txt_cut_buffer); + free((void *)txt_cut_buffer); - txt_cut_buffer = (char*) malloc(strlen(buffer)+1); + txt_cut_buffer = (char *) malloc(strlen(buffer) + 1); strcpy(txt_cut_buffer, buffer); - } else { + } + else { XSetSelectionOwner(m_display, m_primary, m_window, CurrentTime); - owner= XGetSelectionOwner(m_display, m_primary); + owner = XGetSelectionOwner(m_display, m_primary); if (txt_select_buffer) - free((void*)txt_select_buffer); + free((void *)txt_select_buffer); - txt_select_buffer = (char*) malloc(strlen(buffer)+1); + txt_select_buffer = (char *) malloc(strlen(buffer) + 1); strcpy(txt_select_buffer, buffer); } @@ -1499,16 +1509,16 @@ void GHOST_SystemX11::putClipboard(GHOST_TInt8 *buffer, bool selection) const #ifdef WITH_XDND GHOST_TSuccess GHOST_SystemX11::pushDragDropEvent(GHOST_TEventType eventType, - GHOST_TDragnDropTypes draggedObjectType, - GHOST_IWindow* window, - int mouseX, int mouseY, - void* data) + GHOST_TDragnDropTypes draggedObjectType, + GHOST_IWindow *window, + int mouseX, int mouseY, + void *data) { - GHOST_SystemX11* system = ((GHOST_SystemX11*)getSystem()); + GHOST_SystemX11 *system = ((GHOST_SystemX11 *)getSystem()); return system->pushEvent(new GHOST_EventDragnDrop(system->getMilliSeconds(), - eventType, - draggedObjectType, - window,mouseX,mouseY,data) - ); + eventType, + draggedObjectType, + window, mouseX, mouseY, data) + ); } #endif diff --git a/intern/ghost/intern/GHOST_SystemX11.h b/intern/ghost/intern/GHOST_SystemX11.h index d236c73dabd..fd5a33c02d7 100644 --- a/intern/ghost/intern/GHOST_SystemX11.h +++ b/intern/ghost/intern/GHOST_SystemX11.h @@ -63,7 +63,7 @@ public: */ GHOST_SystemX11( - ); + ); /** * Destructor. @@ -71,9 +71,9 @@ public: virtual ~GHOST_SystemX11(); - GHOST_TSuccess + GHOST_TSuccess init( - ); + ); /** @@ -85,28 +85,28 @@ public: * Returns the number of milliseconds since the start of the system process. * @return The number of milliseconds. */ - GHOST_TUns64 + GHOST_TUns64 getMilliSeconds( - ) const; + ) const; /** * Returns the number of displays on this system. * @return The number of displays. */ - GHOST_TUns8 + GHOST_TUns8 getNumDisplays( - ) const; + ) const; /** * Returns the dimensions of the main display on this system. * @return The dimension of the main display. */ - void + void getMainDisplayDimensions( - GHOST_TUns32& width, - GHOST_TUns32& height - ) const; + GHOST_TUns32& width, + GHOST_TUns32& height + ) const; /** * Create a new window. @@ -120,22 +120,22 @@ public: * @param state The state of the window when opened. * @param type The type of drawing context installed in this window. * @param stereoVisual Create a stereo visual for quad buffered stereo. - * @param parentWindow Parent (embedder) window + * @param parentWindow Parent (embedder) window * @return The new window (or 0 if creation failed). */ - GHOST_IWindow* + GHOST_IWindow * createWindow( - const STR_String& title, - GHOST_TInt32 left, - GHOST_TInt32 top, - GHOST_TUns32 width, - GHOST_TUns32 height, - GHOST_TWindowState state, - GHOST_TDrawingContextType type, - const bool stereoVisual, - const GHOST_TUns16 numOfAASamples = 0, - const GHOST_TEmbedderWindowID parentWindow = 0 - ); + const STR_String& title, + GHOST_TInt32 left, + GHOST_TInt32 top, + GHOST_TUns32 width, + GHOST_TUns32 height, + GHOST_TWindowState state, + GHOST_TDrawingContextType type, + const bool stereoVisual, + const GHOST_TUns16 numOfAASamples = 0, + const GHOST_TEmbedderWindowID parentWindow = 0 + ); /** * @section Interface Inherited from GHOST_ISystem @@ -146,45 +146,45 @@ public: * @param waitForEvent Flag to wait for an event (or return immediately). * @return Indication of the presence of events. */ - bool + bool processEvents( - bool waitForEvent - ); + bool waitForEvent + ); /** * @section Interface Inherited from GHOST_System */ - GHOST_TSuccess + GHOST_TSuccess getCursorPosition( - GHOST_TInt32& x, - GHOST_TInt32& y - ) const; + GHOST_TInt32& x, + GHOST_TInt32& y + ) const; - GHOST_TSuccess + GHOST_TSuccess setCursorPosition( - GHOST_TInt32 x, - GHOST_TInt32 y - ); + GHOST_TInt32 x, + GHOST_TInt32 y + ); /** * Returns the state of all modifier keys. * @param keys The state of all modifier keys (true == pressed). * @return Indication of success. */ - GHOST_TSuccess + GHOST_TSuccess getModifierKeys( - GHOST_ModifierKeys& keys - ) const; + GHOST_ModifierKeys& keys + ) const; /** * Returns the state of the mouse buttons (ouside the message queue). * @param buttons The state of the buttons. * @return Indication of success. */ - GHOST_TSuccess + GHOST_TSuccess getButtons( - GHOST_Buttons& buttons - ) const; + GHOST_Buttons& buttons + ) const; /** * @section Interface Dirty @@ -192,26 +192,26 @@ public: * generate a GHOST window update event on a call to processEvents() */ - void + void addDirtyWindow( - GHOST_WindowX11 * bad_wind - ); + GHOST_WindowX11 *bad_wind + ); /** * return a pointer to the X11 display structure */ - Display * + Display * getXDisplay( - ) { + ) { return m_display; } #if defined(WITH_X11_XINPUT) && defined(X_HAVE_UTF8_STRING) - XIM + XIM getX11_XIM( - ) { + ) { return m_xim; } #endif @@ -246,13 +246,15 @@ public: * @param window The window on which the event occurred * @return Indication whether the event was handled. */ - static GHOST_TSuccess pushDragDropEvent(GHOST_TEventType eventType, GHOST_TDragnDropTypes draggedObjectType,GHOST_IWindow* window, int mouseX, int mouseY, void* data); + static GHOST_TSuccess pushDragDropEvent(GHOST_TEventType eventType, GHOST_TDragnDropTypes draggedObjectType, GHOST_IWindow *window, int mouseX, int mouseY, void *data); #endif /** * @see GHOST_ISystem */ - int toggleConsole(int action) { return 0; } + int toggleConsole(int action) { + return 0; + } /** * Atom used for ICCCM, WM-spec and Motif. @@ -282,9 +284,9 @@ public: Atom m_incr; Atom m_utf8_string; -private : +private: - Display * m_display; + Display *m_display; #if defined(WITH_X11_XINPUT) && defined(X_HAVE_UTF8_STRING) XIM m_xim; #endif @@ -307,24 +309,24 @@ private : * X11 window xwind */ - GHOST_WindowX11 * + GHOST_WindowX11 * findGhostWindow( - Window xwind - ) const; + Window xwind + ) const; - void + void processEvent( - XEvent *xe - ); + XEvent *xe + ); - Time + Time lastEventTime( - Time default_time - ); + Time default_time + ); - bool + bool generateWindowExposeEvents( - ); + ); }; #endif diff --git a/intern/ghost/intern/GHOST_WindowX11.cpp b/intern/ghost/intern/GHOST_WindowX11.cpp index 85a9163ec91..12990064621 100644 --- a/intern/ghost/intern/GHOST_WindowX11.cpp +++ b/intern/ghost/intern/GHOST_WindowX11.cpp @@ -43,7 +43,7 @@ #include #include -#if defined(__sun__) || defined( __sun ) || defined (__sparc) || defined (__sparc__) || defined (_AIX) +#if defined(__sun__) || defined(__sun) || defined(__sparc) || defined(__sparc__) || defined(_AIX) #include #endif @@ -79,13 +79,13 @@ typedef struct { #define _NET_WM_STATE_TOGGLE 2 /* -import bpy -I = bpy.data.images['blender.png'] # the 48x48 icon + import bpy + I = bpy.data.images['blender.png'] # the 48x48 icon -# Write to a file that can be -# used within static unsigned char BLENDER_ICON_48x48x24[] = {...} -f = open('/myicon.txt', 'w') -for j in xrange(48): + # Write to a file that can be + # used within static unsigned char BLENDER_ICON_48x48x24[] = {...} + f = open('/myicon.txt', 'w') + for j in xrange(48): for k in xrange(48): v = I.getPixelI(j,47-k) v.pop() @@ -93,60 +93,60 @@ for j in xrange(48): f.write(str(hex(p))+',') f.write('\n') -*/ + */ // See the python script above to regenerate the 48x48 icon within blender #define BLENDER_ICON_WIDTH 48 #define BLENDER_ICON_HEIGHT 48 static unsigned char BLENDER_ICON_48x48x24[] = { -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x4f,0x2a,0xd,0xa7,0x5b,0x1f,0xb8,0x66,0x22,0x6c,0x3b,0x14,0x5,0x3,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x6f,0x3a,0x13,0xea,0x7f,0x2c,0xee,0x7e,0x2b,0xee,0x7e,0x2b,0xef,0x85,0x2e,0x5f,0x35,0x12,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x43,0x22,0xb,0xed,0x7f,0x2c,0xed,0x7c,0x2b,0xee,0x7f,0x2c,0xee,0x80,0x2c,0xee,0x80,0x2c,0xa8,0x5f,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x2e,0x16,0x6,0xd0,0x6f,0x26,0xed,0x7b,0x2a,0xed,0x7d,0x2b,0xee,0x7f,0x2c,0xee,0x80,0x2c,0xee,0x82,0x2d,0x9a,0x57,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x17,0xb,0x4,0xb9,0x60,0x21,0xed,0x7a,0x2a,0xed,0x7b,0x2a,0xed,0x7e,0x2b,0xee,0x7f,0x2c,0xee,0x7f,0x2c,0xee,0x86,0x2e,0x4e,0x2b,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x1,0x0,0x0,0x96,0x4d,0x19,0xee,0x7a,0x2a,0xed,0x79,0x2a,0xed,0x7c,0x2b,0xed,0x7e,0x2b,0xed,0x7e,0x2b,0xef,0x83,0x2d,0x98,0x55,0x1c,0x3,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x20,0xf,0x5,0x4b,0x27,0xe,0x21,0x11,0x5,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x67,0x34,0x11,0xed,0x7b,0x2a,0xec,0x79,0x29,0xed,0x7b,0x2a,0xed,0x7c,0x2b,0xed,0x7d,0x2b,0xee,0x7f,0x2c,0xbb,0x69,0x24,0x11,0x9,0x3,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x38,0x1c,0x9,0xc9,0x6d,0x2c,0xf1,0x86,0x36,0xd7,0x79,0x2a,0x22,0x12,0x5,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x3b,0x1d,0x9,0xe0,0x74,0x27,0xed,0x7a,0x2a,0xed,0x7c,0x2a,0xed,0x7d,0x2b,0xed,0x7d,0x2b,0xed,0x7d,0x2b,0xdc,0x7a,0x2a,0x1e,0xf,0x5,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xa6,0x56,0x23,0xee,0x83,0x3b,0xed,0x7d,0x2c,0xf0,0x85,0x2e,0x75,0x43,0x17,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x25,0x12,0x5,0xc9,0x68,0x24,0xed,0x7b,0x2a,0xed,0x7d,0x2b,0xed,0x7e,0x2b,0xee,0x7e,0x2c,0xed,0x7d,0x2b,0xe3,0x7d,0x2b,0x3b,0x1f,0xa,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x1c,0xd,0x4,0xd9,0x74,0x35,0xee,0x83,0x3a,0xee,0x7f,0x2b,0xf0,0x86,0x2e,0x83,0x4d,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xa,0x5,0x1,0xa1,0x54,0x1c,0xee,0x7e,0x2c,0xed,0x7e,0x2c,0xed,0x7f,0x2c,0xed,0x80,0x2c,0xed,0x7f,0x2b,0xec,0x81,0x2d,0x60,0x33,0x11,0x1,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x24,0x11,0x5,0xe0,0x7a,0x38,0xee,0x84,0x3a,0xee,0x82,0x2c,0xf0,0x88,0x2f,0x82,0x4d,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x6f,0x39,0x13,0xef,0x82,0x30,0xed,0x82,0x2f,0xee,0x82,0x2e,0xee,0x82,0x2d,0xee,0x81,0x2c,0xf0,0x83,0x2d,0x88,0x49,0x18,0x3,0x2,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x24,0x11,0x5,0xe0,0x7c,0x3a,0xee,0x86,0x3b,0xee,0x84,0x2d,0xf1,0x8b,0x30,0x82,0x4d,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0x54,0x2b,0xf,0xe9,0x80,0x30,0xee,0x87,0x33,0xef,0x88,0x32,0xef,0x88,0x30,0xee,0x85,0x2f,0xef,0x83,0x2e,0xae,0x5f,0x20,0x4,0x2,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x24,0x11,0x5,0xe0,0x7e,0x3d,0xef,0x8a,0x3d,0xef,0x88,0x2e,0xf1,0x8d,0x31,0x81,0x4d,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0x29,0x15,0x7,0xd2,0x74,0x2d,0xf0,0x8b,0x36,0xf0,0x8d,0x35,0xef,0x8d,0x35,0xef,0x8b,0x33,0xef,0x88,0x30,0xc4,0x6d,0x26,0x18,0xc,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x24,0x11,0x5,0xe1,0x80,0x3f,0xf0,0x8d,0x3f,0xef,0x8a,0x2f,0xf1,0x8f,0x32,0x81,0x4e,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x3,0x0,0xb1,0x61,0x26,0xf1,0x8e,0x3a,0xf1,0x90,0x3a,0xf0,0x90,0x38,0xf0,0x90,0x36,0xef,0x8e,0x35,0xd3,0x7a,0x2c,0x22,0x11,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x24,0x12,0x5,0xe1,0x83,0x42,0xf0,0x90,0x42,0xf0,0x8d,0x30,0xf2,0x92,0x33,0x80,0x4e,0x1b,0x0,0x0,0x0,0x3,0x2,0x0,0x81,0x45,0x1b,0xf1,0x90,0x3e,0xf1,0x94,0x3d,0xf1,0x95,0x3c,0xf0,0x94,0x3b,0xf0,0x92,0x39,0xf0,0x90,0x35,0xd0,0x7b,0x2b,0xc2,0x6e,0x26,0xbe,0x6c,0x25,0x94,0x54,0x1c,0x5b,0x33,0x11,0x1a,0xe,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x25,0x14,0x6,0xe2,0x86,0x44,0xf1,0x94,0x45,0xf0,0x90,0x31,0xf2,0x94,0x33,0x80,0x4e,0x1b,0x0,0x0,0x0,0x60,0x34,0x14,0xed,0x8c,0x3e,0xf0,0x96,0x42,0xf1,0x97,0x40,0xf1,0x95,0x3f,0xf0,0x91,0x39,0xef,0x8e,0x33,0xef,0x8d,0x31,0xf0,0x8d,0x31,0xef,0x8c,0x30,0xef,0x8c,0x30,0xf0,0x8d,0x31,0xf1,0x8e,0x31,0xe1,0x85,0x2e,0x92,0x55,0x1d,0x25,0x14,0x7,0x1,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe2,0x89,0x46,0xf2,0x97,0x47,0xf1,0x92,0x32,0xf2,0x96,0x34,0x80,0x4e,0x1a,0x32,0x1a,0xa,0xe3,0x87,0x3d,0xf1,0x97,0x45,0xf1,0x98,0x44,0xf1,0x95,0x41,0xf0,0x90,0x39,0xef,0x8d,0x30,0xef,0x8f,0x31,0xf0,0x90,0x32,0xf0,0x92,0x33,0xf1,0x93,0x33,0xf1,0x94,0x34,0xf1,0x94,0x34,0xf0,0x93,0x34,0xf0,0x91,0x32,0xf1,0x91,0x33,0xe2,0x8a,0x30,0x6b,0x3f,0x15,0x1,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe3,0x8b,0x49,0xf2,0x9a,0x49,0xf1,0x93,0x32,0xf2,0x98,0x35,0x8f,0x57,0x1d,0xcf,0x7c,0x38,0xf2,0x99,0x48,0xf1,0x98,0x47,0xf1,0x96,0x44,0xf0,0x90,0x39,0xef,0x8d,0x31,0xf0,0x90,0x31,0xf0,0x92,0x33,0xf1,0x94,0x33,0xf1,0x96,0x35,0xf1,0x98,0x35,0xf1,0x9a,0x36,0xf1,0x9c,0x37,0xf2,0x9d,0x37,0xf2,0x9c,0x37,0xf2,0x99,0x36,0xf0,0x94,0x34,0xf3,0x97,0x35,0x9f,0x60,0x21,0x13,0xb,0x3,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe3,0x8d,0x4b,0xf2,0x9b,0x4c,0xf1,0x93,0x32,0xf1,0x97,0x35,0xea,0x98,0x43,0xf2,0x9d,0x4d,0xf1,0x9a,0x4b,0xf1,0x99,0x49,0xf0,0x93,0x3d,0xf0,0x8d,0x30,0xf0,0x90,0x32,0xf0,0x92,0x32,0xf0,0x94,0x34,0xf1,0x96,0x34,0xf1,0x98,0x36,0xf1,0x9a,0x36,0xf2,0x9c,0x38,0xf2,0x9f,0x38,0xf2,0xa2,0x39,0xf3,0xa2,0x39,0xf3,0xa2,0x39,0xf2,0x9f,0x38,0xf1,0x99,0x35,0xf2,0x97,0x35,0xba,0x74,0x29,0x13,0xb,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe4,0x8e,0x4d,0xf2,0x9d,0x4e,0xf1,0x93,0x32,0xf2,0x9d,0x3f,0xf3,0xa4,0x54,0xf2,0x9d,0x50,0xf1,0x9b,0x4d,0xf2,0x98,0x46,0xef,0x8d,0x31,0xf0,0x8f,0x31,0xf0,0x91,0x32,0xf0,0x93,0x32,0xf1,0x94,0x32,0xf1,0x95,0x32,0xf1,0x98,0x34,0xf1,0x9b,0x36,0xf2,0x9e,0x38,0xf2,0xa1,0x39,0xf2,0xa4,0x3a,0xf3,0xa6,0x3b,0xf4,0xa8,0x3c,0xf3,0xa7,0x3c,0xf3,0xa4,0x3a,0xf2,0x9c,0x37,0xf2,0x99,0x36,0xa9,0x69,0x25,0x2,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe4,0x90,0x50,0xf2,0x9e,0x51,0xf1,0x95,0x35,0xf4,0xa6,0x54,0xf3,0xa2,0x55,0xf2,0x9e,0x51,0xf2,0x9c,0x4e,0xf0,0x8f,0x35,0xf0,0x8e,0x31,0xf0,0x90,0x32,0xf3,0xa5,0x56,0xf7,0xc4,0x8e,0xfa,0xd8,0xb6,0xfb,0xdf,0xc2,0xfa,0xd8,0xb2,0xf7,0xc4,0x89,0xf4,0xae,0x59,0xf2,0xa1,0x38,0xf3,0xa5,0x3b,0xf4,0xa8,0x3c,0xf4,0xab,0x3d,0xf4,0xac,0x3e,0xf4,0xab,0x3d,0xf3,0xa7,0x3b,0xf2,0x9e,0x38,0xf4,0x9e,0x38,0x6f,0x45,0x17,0x1,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x19,0xc,0x5,0x63,0x36,0x18,0x3f,0x20,0x9,0x2,0x1,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe4,0x91,0x52,0xf3,0xa2,0x55,0xf2,0x9d,0x43,0xf4,0xa7,0x5b,0xf3,0xa2,0x57,0xf3,0xa0,0x55,0xf1,0x97,0x43,0xf0,0x8d,0x30,0xf2,0x9d,0x4c,0xfa,0xda,0xbc,0xfe,0xfb,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfb,0xf6,0xfa,0xdc,0xb5,0xf4,0xae,0x4e,0xf4,0xa9,0x3c,0xf4,0xac,0x3d,0xf4,0xae,0x3f,0xf4,0xaf,0x3f,0xf4,0xad,0x3f,0xf3,0xa8,0x3d,0xf2,0x9d,0x38,0xe2,0x94,0x34,0x23,0x14,0x6,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x11,0x8,0x3,0x9e,0x62,0x39,0xf2,0x91,0x4e,0xe7,0x79,0x29,0x48,0x25,0xc,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0x27,0x13,0x6,0xe5,0x93,0x54,0xf3,0xa7,0x59,0xf4,0xa6,0x56,0xf4,0xa7,0x5d,0xf3,0xa4,0x59,0xf3,0xa2,0x57,0xf1,0x90,0x36,0xf4,0xa7,0x5d,0xfe,0xf4,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xf2,0xe3,0xf6,0xb8,0x5f,0xf4,0xac,0x3e,0xf4,0xaf,0x3f,0xf4,0xb1,0x40,0xf4,0xb2,0x40,0xf5,0xaf,0x3f,0xf3,0xa6,0x3c,0xf3,0x9f,0x38,0x90,0x5d,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x3d,0x1f,0xf,0xed,0x9c,0x6a,0xef,0x8b,0x4a,0xec,0x78,0x29,0xe4,0x79,0x2a,0x29,0x15,0x7,0x0,0x0,0x0,0xff,0x0,0xff,0x28,0x14,0x6,0xe6,0x97,0x57,0xf5,0xad,0x63,0xf5,0xac,0x62,0xf4,0xa8,0x5f,0xf4,0xa6,0x5c,0xf3,0xa0,0x53,0xf4,0xa9,0x64,0xfe,0xf8,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xff,0xf2,0xf7,0xfa,0xed,0xf4,0xf8,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf7,0xed,0xf5,0xb5,0x53,0xf5,0xb0,0x3f,0xf5,0xb3,0x41,0xf5,0xb4,0x42,0xf5,0xb3,0x41,0xf4,0xad,0x3f,0xf3,0xa1,0x39,0xe4,0x98,0x37,0x1d,0x11,0x5,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x43,0x23,0x10,0xf2,0xa1,0x70,0xf1,0x99,0x61,0xec,0x78,0x2a,0xed,0x7b,0x2a,0xc4,0x69,0x23,0x15,0xa,0x3,0x0,0x0,0x0,0x1d,0xf,0x5,0xe7,0x9b,0x5b,0xf5,0xb1,0x68,0xf5,0xad,0x65,0xf4,0xaa,0x62,0xf4,0xa8,0x5f,0xf3,0xa4,0x59,0xfd,0xec,0xde,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xfd,0xfe,0xc3,0xda,0xe9,0x5c,0x9a,0xc5,0x2a,0x7b,0xb4,0x17,0x6f,0xae,0x36,0x81,0xb8,0x91,0xbb,0xd9,0xf0,0xf6,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xe7,0xc7,0xf5,0xb2,0x43,0xf6,0xb3,0x41,0xf5,0xb5,0x43,0xf5,0xb6,0x43,0xf5,0xb3,0x42,0xf4,0xa8,0x3c,0xf4,0xa2,0x3a,0x66,0x41,0x17,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x22,0x10,0x7,0xd6,0x88,0x5b,0xf2,0xa5,0x76,0xee,0x84,0x3f,0xed,0x7a,0x2a,0xee,0x80,0x2c,0xa5,0x59,0x1e,0x7,0x3,0x1,0x19,0xd,0x4,0xe7,0x9e,0x5e,0xf6,0xb2,0x6b,0xf5,0xae,0x67,0xf5,0xac,0x65,0xf4,0xa9,0x61,0xf8,0xcc,0xa1,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0xfe,0xfe,0x97,0xbf,0xdb,0x33,0x83,0xbb,0x24,0x7e,0xb9,0x3,0x6a,0xae,0x0,0x66,0xab,0x0,0x64,0xa9,0x1,0x63,0xa9,0x3c,0x87,0xbd,0xee,0xf5,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xf8,0xc7,0x76,0xf6,0xb4,0x41,0xf5,0xb7,0x43,0xf6,0xb8,0x44,0xf6,0xb6,0x43,0xf5,0xae,0x3f,0xf3,0xa2,0x3a,0xac,0x71,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x52,0x2c,0x16,0xf0,0xa1,0x71,0xf2,0xa2,0x6f,0xed,0x7e,0x32,0xed,0x7e,0x2b,0xef,0x82,0x2d,0x8a,0x49,0x18,0x1b,0xe,0x4,0xe7,0xa2,0x61,0xf6,0xb3,0x6e,0xf6,0xb0,0x6a,0xf5,0xae,0x67,0xf5,0xab,0x64,0xfe,0xf4,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xb4,0xd1,0xe5,0x3e,0x8d,0xc3,0x37,0x8e,0xc5,0x16,0x7a,0xb9,0x0,0x6b,0xaf,0x0,0x68,0xac,0x0,0x65,0xaa,0x0,0x65,0xab,0x0,0x66,0xac,0x4d,0x93,0xc4,0xf8,0xfb,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xe7,0xc5,0xf6,0xb3,0x40,0xf6,0xb7,0x43,0xf6,0xb9,0x44,0xf6,0xb8,0x45,0xf5,0xb2,0x41,0xf3,0xa5,0x3b,0xe2,0x98,0x37,0x3,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x86,0x4e,0x2e,0xf3,0xa6,0x77,0xf1,0x9e,0x66,0xed,0x7e,0x2d,0xee,0x82,0x2c,0xf0,0x85,0x2d,0x7e,0x47,0x17,0xe8,0xa6,0x64,0xf6,0xb5,0x70,0xf6,0xb2,0x6d,0xf5,0xb0,0x6a,0xf7,0xbb,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xf9,0xfb,0xfd,0x5b,0x9c,0xca,0x42,0x96,0xcb,0x3c,0x93,0xc9,0x9,0x73,0xb6,0x0,0x6b,0xb0,0x0,0x69,0xad,0x0,0x66,0xab,0x0,0x66,0xab,0x0,0x67,0xad,0x4,0x6a,0xaf,0xbb,0xd7,0xe9,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf8,0xee,0xf6,0xb9,0x4f,0xf6,0xb7,0x44,0xf6,0xba,0x45,0xf6,0xba,0x45,0xf5,0xb5,0x43,0xf4,0xa8,0x3d,0xf5,0xa7,0x3d,0x1b,0xf,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x11,0x8,0x3,0xb0,0x6d,0x45,0xf4,0xaa,0x7b,0xf1,0x9a,0x5b,0xee,0x82,0x2d,0xef,0x86,0x2e,0xee,0x91,0x36,0xf5,0xb5,0x70,0xf6,0xb7,0x73,0xf6,0xb4,0x70,0xf5,0xb1,0x6c,0xf9,0xcc,0xa1,0xff,0xff,0xff,0xff,0xff,0xff,0xd1,0xe2,0xef,0x4b,0x97,0xca,0x47,0x9a,0xce,0x3f,0x95,0xcb,0x3,0x71,0xb5,0x0,0x6c,0xb0,0x0,0x69,0xae,0x0,0x67,0xac,0x0,0x66,0xac,0x0,0x67,0xad,0x0,0x69,0xaf,0x66,0xa5,0xcf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfa,0xf8,0xc3,0x67,0xf6,0xb8,0x44,0xf6,0xba,0x45,0xf6,0xbb,0x46,0xf6,0xb7,0x44,0xf4,0xab,0x3e,0xf8,0xab,0x3f,0x2a,0x19,0x8,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x2b,0x15,0x9,0xd4,0x8a,0x5c,0xf4,0xac,0x7c,0xf1,0x98,0x54,0xee,0x85,0x2e,0xf1,0x93,0x38,0xf6,0xba,0x75,0xf6,0xb9,0x75,0xf6,0xb6,0x72,0xf6,0xb3,0x6f,0xfa,0xd5,0xb1,0xff,0xff,0xff,0xff,0xff,0xff,0xb0,0xcf,0xe5,0x51,0x9e,0xcf,0x4b,0x9d,0xd0,0x43,0x97,0xcc,0x3,0x71,0xb5,0x0,0x6d,0xb1,0x0,0x6a,0xae,0x0,0x67,0xac,0x0,0x67,0xad,0x0,0x68,0xae,0x0,0x6a,0xb0,0x3b,0x8c,0xc2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf9,0xc9,0x77,0xf6,0xb8,0x44,0xf6,0xba,0x45,0xf6,0xbc,0x46,0xf6,0xb8,0x44,0xf4,0xad,0x3f,0xf8,0xac,0x3f,0x2a,0x1a,0x8,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x47,0x26,0x12,0xee,0xa3,0x72,0xf4,0xae,0x7b,0xf1,0x97,0x4e,0xf1,0x92,0x38,0xf6,0xbb,0x78,0xf6,0xbb,0x78,0xf6,0xb7,0x75,0xf6,0xb5,0x71,0xfa,0xd6,0xb2,0xff,0xff,0xff,0xff,0xff,0xff,0xad,0xcd,0xe4,0x54,0xa0,0xd1,0x4e,0xa0,0xd1,0x48,0x9b,0xce,0xb,0x76,0xb8,0x0,0x6d,0xb2,0x0,0x6a,0xaf,0x0,0x68,0xad,0x0,0x68,0xad,0x0,0x69,0xae,0x0,0x6b,0xb1,0x36,0x89,0xc1,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xf9,0xc9,0x76,0xf6,0xb9,0x44,0xf6,0xbb,0x46,0xf6,0xbc,0x47,0xf6,0xb9,0x44,0xf4,0xad,0x3f,0xf8,0xad,0x40,0x2a,0x1a,0x8,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x70,0x42,0x26,0xf4,0xad,0x7b,0xf5,0xb1,0x7d,0xf3,0x9f,0x50,0xf7,0xbc,0x7b,0xf7,0xbc,0x7b,0xf6,0xb9,0x78,0xf6,0xb7,0x74,0xf9,0xd0,0xa6,0xff,0xff,0xff,0xff,0xff,0xff,0xc3,0xda,0xeb,0x56,0xa0,0xd0,0x51,0xa1,0xd2,0x4a,0x9c,0xcf,0x20,0x82,0xbf,0x0,0x6e,0xb2,0x0,0x6b,0xb0,0x0,0x68,0xae,0x0,0x68,0xae,0x0,0x69,0xaf,0x0,0x6b,0xb1,0x50,0x98,0xc9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xf9,0xf8,0xc3,0x66,0xf6,0xb9,0x45,0xf7,0xbb,0x46,0xf6,0xbc,0x47,0xf6,0xb8,0x45,0xf4,0xad,0x3f,0xf8,0xac,0x3f,0x2a,0x19,0x7,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xc,0x5,0x0,0xa5,0x67,0x40,0xf5,0xb1,0x7f,0xf5,0xb7,0x7e,0xf7,0xbf,0x80,0xf7,0xbe,0x7d,0xf7,0xbb,0x7b,0xf6,0xb9,0x78,0xf8,0xc2,0x8b,0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xf5,0xf9,0x5b,0xa0,0xce,0x53,0xa2,0xd2,0x4c,0x9e,0xd0,0x3c,0x93,0xc8,0x6,0x71,0xb4,0x0,0x6c,0xb0,0x0,0x69,0xae,0x0,0x69,0xae,0x0,0x6a,0xaf,0x0,0x6b,0xb1,0x9b,0xc5,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf7,0xec,0xf6,0xba,0x4e,0xf6,0xb9,0x45,0xf7,0xbb,0x46,0xf6,0xbc,0x47,0xf5,0xb7,0x44,0xf4,0xab,0x3e,0xf5,0xa8,0x3e,0x18,0xd,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x1f,0x10,0x7,0xc9,0x84,0x56,0xf5,0xb5,0x81,0xf7,0xbf,0x82,0xf8,0xc0,0x80,0xf7,0xbd,0x7d,0xf7,0xba,0x7a,0xf6,0xb8,0x77,0xfe,0xf5,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0x9a,0xc2,0xdf,0x55,0x9f,0xd0,0x4e,0x9f,0xd0,0x47,0x99,0xcc,0x2a,0x87,0xc1,0x3,0x6d,0xb1,0x0,0x69,0xaf,0x0,0x6a,0xaf,0x0,0x6a,0xb0,0x27,0x80,0xbc,0xec,0xf4,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xe5,0xbf,0xf6,0xb6,0x42,0xf6,0xba,0x46,0xf7,0xbb,0x46,0xf7,0xbb,0x47,0xf5,0xb5,0x43,0xf3,0xa8,0x3d,0xdd,0x97,0x37,0x2,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x32,0x1a,0xb,0xe4,0x9d,0x6a,0xf7,0xbd,0x84,0xf8,0xc1,0x83,0xf8,0xbe,0x80,0xf7,0xbd,0x7d,0xf7,0xba,0x79,0xfa,0xd9,0xb6,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xf6,0xfa,0x74,0xac,0xd4,0x4f,0x9b,0xcd,0x48,0x99,0xcc,0x41,0x94,0xc8,0x2c,0x85,0xbe,0xb,0x70,0xb3,0x1,0x6a,0xb0,0xb,0x6e,0xb2,0xbf,0xd9,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xf8,0xc8,0x74,0xf6,0xb7,0x44,0xf6,0xba,0x46,0xf7,0xbb,0x46,0xf7,0xb9,0x46,0xf6,0xb2,0x42,0xf4,0xa7,0x3d,0xa6,0x70,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x4f,0x2e,0x18,0xef,0xaf,0x78,0xf8,0xc1,0x85,0xf8,0xc0,0x82,0xf7,0xbe,0x7f,0xf7,0xbc,0x7d,0xf7,0xbe,0x81,0xfe,0xf3,0xe8,0xff,0xff,0xff,0xff,0xff,0xff,0xf2,0xf7,0xfa,0x91,0xbd,0xdb,0x4f,0x97,0xc8,0x40,0x8e,0xc3,0x37,0x8a,0xc0,0x34,0x88,0xbf,0x57,0x9c,0xca,0xcc,0xe1,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xe4,0xbf,0xf5,0xb6,0x45,0xf6,0xb8,0x45,0xf6,0xba,0x46,0xf7,0xba,0x46,0xf6,0xb7,0x45,0xf5,0xad,0x3f,0xf4,0xa9,0x40,0x5c,0x3d,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x85,0x55,0x31,0xf7,0xbd,0x84,0xf8,0xc2,0x85,0xf8,0xc0,0x82,0xf7,0xbe,0x80,0xf7,0xbc,0x7d,0xf9,0xcb,0x99,0xfe,0xf9,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfe,0xfe,0xe5,0xef,0xf6,0xc1,0xda,0xeb,0xba,0xd5,0xe9,0xd8,0xe8,0xf2,0xf9,0xfb,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf3,0xe4,0xf6,0xb9,0x51,0xf5,0xb5,0x43,0xf6,0xb8,0x45,0xf6,0xb9,0x46,0xf6,0xb8,0x46,0xf6,0xb3,0x43,0xf4,0xa7,0x3e,0xdf,0x9d,0x43,0x17,0xd,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x14,0xa,0x4,0xb2,0x7b,0x4b,0xf8,0xc2,0x88,0xf8,0xc1,0x85,0xf7,0xbf,0x82,0xf7,0xbe,0x80,0xf7,0xbd,0x7d,0xf9,0xca,0x97,0xfe,0xf9,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xf2,0xe1,0xf7,0xbc,0x5d,0xf5,0xb3,0x42,0xf5,0xb6,0x44,0xf5,0xb7,0x45,0xf6,0xb8,0x45,0xf6,0xb5,0x44,0xf5,0xad,0x40,0xf6,0xae,0x4c,0x88,0x5d,0x27,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x1d,0x10,0x6,0xdb,0xa0,0x68,0xf8,0xc3,0x88,0xf7,0xc1,0x85,0xf7,0xc0,0x82,0xf7,0xbf,0x80,0xf7,0xbe,0x7e,0xf8,0xc4,0x88,0xfc,0xe6,0xcc,0xfe,0xfb,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfa,0xf3,0xfa,0xda,0xa9,0xf5,0xb3,0x4a,0xf5,0xb2,0x42,0xf5,0xb3,0x43,0xf5,0xb6,0x44,0xf5,0xb7,0x45,0xf5,0xb5,0x44,0xf5,0xb0,0x42,0xf5,0xad,0x4d,0xdd,0x9e,0x4a,0x19,0xf,0x5,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x50,0x33,0x19,0xec,0xb4,0x7a,0xf8,0xc2,0x87,0xf7,0xc1,0x85,0xf7,0xc1,0x83,0xf7,0xc0,0x80,0xf7,0xc0,0x7f,0xf7,0xc0,0x7c,0xf7,0xc2,0x7e,0xf8,0xcc,0x92,0xfa,0xda,0xb0,0xfb,0xdf,0xb9,0xfa,0xd9,0xad,0xf7,0xc8,0x84,0xf5,0xb4,0x54,0xf4,0xad,0x3f,0xf4,0xaf,0x41,0xf5,0xb2,0x42,0xf5,0xb4,0x43,0xf5,0xb5,0x44,0xf5,0xb4,0x44,0xf5,0xb2,0x46,0xf5,0xb2,0x54,0xf5,0xb4,0x5a,0x5e,0x3e,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x71,0x4b,0x29,0xf8,0xc0,0x86,0xf7,0xc3,0x87,0xf7,0xc2,0x85,0xf7,0xc1,0x83,0xf7,0xc2,0x82,0xf7,0xc2,0x7f,0xf7,0xc2,0x7e,0xf6,0xc0,0x76,0xf4,0xb4,0x59,0xf3,0xa8,0x3e,0xf3,0xa7,0x39,0xf3,0xa9,0x3d,0xf4,0xab,0x3e,0xf4,0xad,0x40,0xf4,0xb0,0x41,0xf4,0xb2,0x42,0xf5,0xb2,0x42,0xf5,0xb3,0x45,0xf6,0xb7,0x54,0xf6,0xb7,0x60,0xf6,0xb5,0x5f,0x9d,0x6b,0x31,0x2,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x8b,0x5f,0x36,0xf9,0xc1,0x87,0xf7,0xc3,0x88,0xf8,0xc3,0x86,0xf7,0xc3,0x84,0xf8,0xc3,0x81,0xf7,0xc4,0x80,0xf7,0xc4,0x7e,0xf7,0xc4,0x7d,0xf7,0xc3,0x7a,0xf6,0xbd,0x6c,0xf5,0xb7,0x5c,0xf5,0xb5,0x54,0xf5,0xb4,0x50,0xf5,0xb6,0x52,0xf6,0xb9,0x58,0xf6,0xbd,0x62,0xf7,0xbf,0x6a,0xf6,0xba,0x66,0xf6,0xb6,0x63,0xab,0x78,0x39,0xa,0x6,0x2,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x83,0x58,0x32,0xf0,0xb9,0x7f,0xf7,0xc3,0x88,0xf7,0xc3,0x86,0xf8,0xc4,0x84,0xf7,0xc5,0x82,0xf7,0xc5,0x80,0xf7,0xc5,0x7f,0xf8,0xc5,0x7d,0xf7,0xc4,0x7b,0xf7,0xc4,0x79,0xf7,0xc4,0x78,0xf7,0xc3,0x76,0xf7,0xc3,0x74,0xf7,0xc2,0x71,0xf6,0xbe,0x6d,0xf6,0xba,0x6a,0xf4,0xb6,0x65,0x8a,0x5e,0x2c,0xc,0x7,0x3,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x4f,0x33,0x1a,0xd2,0x99,0x60,0xf8,0xc4,0x89,0xf8,0xc3,0x86,0xf8,0xc4,0x84,0xf7,0xc5,0x82,0xf7,0xc5,0x80,0xf7,0xc5,0x7f,0xf7,0xc4,0x7e,0xf7,0xc4,0x7b,0xf7,0xc3,0x79,0xf7,0xc2,0x77,0xf6,0xc0,0x74,0xf6,0xbd,0x71,0xf6,0xbb,0x6e,0xe1,0xa4,0x59,0x5c,0x3d,0x1b,0x1,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xe,0x6,0x0,0x72,0x4b,0x28,0xd0,0x9a,0x62,0xf7,0xbf,0x80,0xf8,0xc4,0x85,0xf7,0xc3,0x82,0xf7,0xc3,0x80,0xf7,0xc3,0x7e,0xf7,0xc1,0x7c,0xf6,0xc0,0x7a,0xf7,0xbf,0x78,0xf8,0xbc,0x72,0xde,0xa2,0x5d,0x80,0x57,0x2b,0x13,0xb,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x19,0xe,0x5,0x44,0x2c,0x15,0x81,0x59,0x32,0xb2,0x80,0x4c,0xcb,0x95,0x5b,0xd2,0x9c,0x5f,0xcd,0x97,0x5a,0xb9,0x86,0x4d,0x8b,0x61,0x34,0x4a,0x30,0x17,0x15,0xc,0x5,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, -0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x0,0x0,0x0,0x1,0x0,0x0,0x3,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x4f, 0x2a, 0xd, 0xa7, 0x5b, 0x1f, 0xb8, 0x66, 0x22, 0x6c, 0x3b, 0x14, 0x5, 0x3, 0x1, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x6f, 0x3a, 0x13, 0xea, 0x7f, 0x2c, 0xee, 0x7e, 0x2b, 0xee, 0x7e, 0x2b, 0xef, 0x85, 0x2e, 0x5f, 0x35, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x43, 0x22, 0xb, 0xed, 0x7f, 0x2c, 0xed, 0x7c, 0x2b, 0xee, 0x7f, 0x2c, 0xee, 0x80, 0x2c, 0xee, 0x80, 0x2c, 0xa8, 0x5f, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x2e, 0x16, 0x6, 0xd0, 0x6f, 0x26, 0xed, 0x7b, 0x2a, 0xed, 0x7d, 0x2b, 0xee, 0x7f, 0x2c, 0xee, 0x80, 0x2c, 0xee, 0x82, 0x2d, 0x9a, 0x57, 0x1d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x17, 0xb, 0x4, 0xb9, 0x60, 0x21, 0xed, 0x7a, 0x2a, 0xed, 0x7b, 0x2a, 0xed, 0x7e, 0x2b, 0xee, 0x7f, 0x2c, 0xee, 0x7f, 0x2c, 0xee, 0x86, 0x2e, 0x4e, 0x2b, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x1, 0x0, 0x0, 0x96, 0x4d, 0x19, 0xee, 0x7a, 0x2a, 0xed, 0x79, 0x2a, 0xed, 0x7c, 0x2b, 0xed, 0x7e, 0x2b, 0xed, 0x7e, 0x2b, 0xef, 0x83, 0x2d, 0x98, 0x55, 0x1c, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x20, 0xf, 0x5, 0x4b, 0x27, 0xe, 0x21, 0x11, 0x5, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x67, 0x34, 0x11, 0xed, 0x7b, 0x2a, 0xec, 0x79, 0x29, 0xed, 0x7b, 0x2a, 0xed, 0x7c, 0x2b, 0xed, 0x7d, 0x2b, 0xee, 0x7f, 0x2c, 0xbb, 0x69, 0x24, 0x11, 0x9, 0x3, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x38, 0x1c, 0x9, 0xc9, 0x6d, 0x2c, 0xf1, 0x86, 0x36, 0xd7, 0x79, 0x2a, 0x22, 0x12, 0x5, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x3b, 0x1d, 0x9, 0xe0, 0x74, 0x27, 0xed, 0x7a, 0x2a, 0xed, 0x7c, 0x2a, 0xed, 0x7d, 0x2b, 0xed, 0x7d, 0x2b, 0xed, 0x7d, 0x2b, 0xdc, 0x7a, 0x2a, 0x1e, 0xf, 0x5, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xa6, 0x56, 0x23, 0xee, 0x83, 0x3b, 0xed, 0x7d, 0x2c, 0xf0, 0x85, 0x2e, 0x75, 0x43, 0x17, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x25, 0x12, 0x5, 0xc9, 0x68, 0x24, 0xed, 0x7b, 0x2a, 0xed, 0x7d, 0x2b, 0xed, 0x7e, 0x2b, 0xee, 0x7e, 0x2c, 0xed, 0x7d, 0x2b, 0xe3, 0x7d, 0x2b, 0x3b, 0x1f, 0xa, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x1c, 0xd, 0x4, 0xd9, 0x74, 0x35, 0xee, 0x83, 0x3a, 0xee, 0x7f, 0x2b, 0xf0, 0x86, 0x2e, 0x83, 0x4d, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xa, 0x5, 0x1, 0xa1, 0x54, 0x1c, 0xee, 0x7e, 0x2c, 0xed, 0x7e, 0x2c, 0xed, 0x7f, 0x2c, 0xed, 0x80, 0x2c, 0xed, 0x7f, 0x2b, 0xec, 0x81, 0x2d, 0x60, 0x33, 0x11, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x24, 0x11, 0x5, 0xe0, 0x7a, 0x38, 0xee, 0x84, 0x3a, 0xee, 0x82, 0x2c, 0xf0, 0x88, 0x2f, 0x82, 0x4d, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x6f, 0x39, 0x13, 0xef, 0x82, 0x30, 0xed, 0x82, 0x2f, 0xee, 0x82, 0x2e, 0xee, 0x82, 0x2d, 0xee, 0x81, 0x2c, 0xf0, 0x83, 0x2d, 0x88, 0x49, 0x18, 0x3, 0x2, 0x1, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x24, 0x11, 0x5, 0xe0, 0x7c, 0x3a, 0xee, 0x86, 0x3b, 0xee, 0x84, 0x2d, 0xf1, 0x8b, 0x30, 0x82, 0x4d, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x54, 0x2b, 0xf, 0xe9, 0x80, 0x30, 0xee, 0x87, 0x33, 0xef, 0x88, 0x32, 0xef, 0x88, 0x30, 0xee, 0x85, 0x2f, 0xef, 0x83, 0x2e, 0xae, 0x5f, 0x20, 0x4, 0x2, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x24, 0x11, 0x5, 0xe0, 0x7e, 0x3d, 0xef, 0x8a, 0x3d, 0xef, 0x88, 0x2e, 0xf1, 0x8d, 0x31, 0x81, 0x4d, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0x29, 0x15, 0x7, 0xd2, 0x74, 0x2d, 0xf0, 0x8b, 0x36, 0xf0, 0x8d, 0x35, 0xef, 0x8d, 0x35, 0xef, 0x8b, 0x33, 0xef, 0x88, 0x30, 0xc4, 0x6d, 0x26, 0x18, 0xc, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x24, 0x11, 0x5, 0xe1, 0x80, 0x3f, 0xf0, 0x8d, 0x3f, 0xef, 0x8a, 0x2f, 0xf1, 0x8f, 0x32, 0x81, 0x4e, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0x3, 0x0, 0xb1, 0x61, 0x26, 0xf1, 0x8e, 0x3a, 0xf1, 0x90, 0x3a, 0xf0, 0x90, 0x38, 0xf0, 0x90, 0x36, 0xef, 0x8e, 0x35, 0xd3, 0x7a, 0x2c, 0x22, 0x11, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x24, 0x12, 0x5, 0xe1, 0x83, 0x42, 0xf0, 0x90, 0x42, 0xf0, 0x8d, 0x30, 0xf2, 0x92, 0x33, 0x80, 0x4e, 0x1b, 0x0, 0x0, 0x0, 0x3, 0x2, 0x0, 0x81, 0x45, 0x1b, 0xf1, 0x90, 0x3e, 0xf1, 0x94, 0x3d, 0xf1, 0x95, 0x3c, 0xf0, 0x94, 0x3b, 0xf0, 0x92, 0x39, 0xf0, 0x90, 0x35, 0xd0, 0x7b, 0x2b, 0xc2, 0x6e, 0x26, 0xbe, 0x6c, 0x25, 0x94, 0x54, 0x1c, 0x5b, 0x33, 0x11, 0x1a, 0xe, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x25, 0x14, 0x6, 0xe2, 0x86, 0x44, 0xf1, 0x94, 0x45, 0xf0, 0x90, 0x31, 0xf2, 0x94, 0x33, 0x80, 0x4e, 0x1b, 0x0, 0x0, 0x0, 0x60, 0x34, 0x14, 0xed, 0x8c, 0x3e, 0xf0, 0x96, 0x42, 0xf1, 0x97, 0x40, 0xf1, 0x95, 0x3f, 0xf0, 0x91, 0x39, 0xef, 0x8e, 0x33, 0xef, 0x8d, 0x31, 0xf0, 0x8d, 0x31, 0xef, 0x8c, 0x30, 0xef, 0x8c, 0x30, 0xf0, 0x8d, 0x31, 0xf1, 0x8e, 0x31, 0xe1, 0x85, 0x2e, 0x92, 0x55, 0x1d, 0x25, 0x14, 0x7, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe2, 0x89, 0x46, 0xf2, 0x97, 0x47, 0xf1, 0x92, 0x32, 0xf2, 0x96, 0x34, 0x80, 0x4e, 0x1a, 0x32, 0x1a, 0xa, 0xe3, 0x87, 0x3d, 0xf1, 0x97, 0x45, 0xf1, 0x98, 0x44, 0xf1, 0x95, 0x41, 0xf0, 0x90, 0x39, 0xef, 0x8d, 0x30, 0xef, 0x8f, 0x31, 0xf0, 0x90, 0x32, 0xf0, 0x92, 0x33, 0xf1, 0x93, 0x33, 0xf1, 0x94, 0x34, 0xf1, 0x94, 0x34, 0xf0, 0x93, 0x34, 0xf0, 0x91, 0x32, 0xf1, 0x91, 0x33, 0xe2, 0x8a, 0x30, 0x6b, 0x3f, 0x15, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe3, 0x8b, 0x49, 0xf2, 0x9a, 0x49, 0xf1, 0x93, 0x32, 0xf2, 0x98, 0x35, 0x8f, 0x57, 0x1d, 0xcf, 0x7c, 0x38, 0xf2, 0x99, 0x48, 0xf1, 0x98, 0x47, 0xf1, 0x96, 0x44, 0xf0, 0x90, 0x39, 0xef, 0x8d, 0x31, 0xf0, 0x90, 0x31, 0xf0, 0x92, 0x33, 0xf1, 0x94, 0x33, 0xf1, 0x96, 0x35, 0xf1, 0x98, 0x35, 0xf1, 0x9a, 0x36, 0xf1, 0x9c, 0x37, 0xf2, 0x9d, 0x37, 0xf2, 0x9c, 0x37, 0xf2, 0x99, 0x36, 0xf0, 0x94, 0x34, 0xf3, 0x97, 0x35, 0x9f, 0x60, 0x21, 0x13, 0xb, 0x3, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe3, 0x8d, 0x4b, 0xf2, 0x9b, 0x4c, 0xf1, 0x93, 0x32, 0xf1, 0x97, 0x35, 0xea, 0x98, 0x43, 0xf2, 0x9d, 0x4d, 0xf1, 0x9a, 0x4b, 0xf1, 0x99, 0x49, 0xf0, 0x93, 0x3d, 0xf0, 0x8d, 0x30, 0xf0, 0x90, 0x32, 0xf0, 0x92, 0x32, 0xf0, 0x94, 0x34, 0xf1, 0x96, 0x34, 0xf1, 0x98, 0x36, 0xf1, 0x9a, 0x36, 0xf2, 0x9c, 0x38, 0xf2, 0x9f, 0x38, 0xf2, 0xa2, 0x39, 0xf3, 0xa2, 0x39, 0xf3, 0xa2, 0x39, 0xf2, 0x9f, 0x38, 0xf1, 0x99, 0x35, 0xf2, 0x97, 0x35, 0xba, 0x74, 0x29, 0x13, 0xb, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe4, 0x8e, 0x4d, 0xf2, 0x9d, 0x4e, 0xf1, 0x93, 0x32, 0xf2, 0x9d, 0x3f, 0xf3, 0xa4, 0x54, 0xf2, 0x9d, 0x50, 0xf1, 0x9b, 0x4d, 0xf2, 0x98, 0x46, 0xef, 0x8d, 0x31, 0xf0, 0x8f, 0x31, 0xf0, 0x91, 0x32, 0xf0, 0x93, 0x32, 0xf1, 0x94, 0x32, 0xf1, 0x95, 0x32, 0xf1, 0x98, 0x34, 0xf1, 0x9b, 0x36, 0xf2, 0x9e, 0x38, 0xf2, 0xa1, 0x39, 0xf2, 0xa4, 0x3a, 0xf3, 0xa6, 0x3b, 0xf4, 0xa8, 0x3c, 0xf3, 0xa7, 0x3c, 0xf3, 0xa4, 0x3a, 0xf2, 0x9c, 0x37, 0xf2, 0x99, 0x36, 0xa9, 0x69, 0x25, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe4, 0x90, 0x50, 0xf2, 0x9e, 0x51, 0xf1, 0x95, 0x35, 0xf4, 0xa6, 0x54, 0xf3, 0xa2, 0x55, 0xf2, 0x9e, 0x51, 0xf2, 0x9c, 0x4e, 0xf0, 0x8f, 0x35, 0xf0, 0x8e, 0x31, 0xf0, 0x90, 0x32, 0xf3, 0xa5, 0x56, 0xf7, 0xc4, 0x8e, 0xfa, 0xd8, 0xb6, 0xfb, 0xdf, 0xc2, 0xfa, 0xd8, 0xb2, 0xf7, 0xc4, 0x89, 0xf4, 0xae, 0x59, 0xf2, 0xa1, 0x38, 0xf3, 0xa5, 0x3b, 0xf4, 0xa8, 0x3c, 0xf4, 0xab, 0x3d, 0xf4, 0xac, 0x3e, 0xf4, 0xab, 0x3d, 0xf3, 0xa7, 0x3b, 0xf2, 0x9e, 0x38, 0xf4, 0x9e, 0x38, 0x6f, 0x45, 0x17, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x19, 0xc, 0x5, 0x63, 0x36, 0x18, 0x3f, 0x20, 0x9, 0x2, 0x1, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe4, 0x91, 0x52, 0xf3, 0xa2, 0x55, 0xf2, 0x9d, 0x43, 0xf4, 0xa7, 0x5b, 0xf3, 0xa2, 0x57, 0xf3, 0xa0, 0x55, 0xf1, 0x97, 0x43, 0xf0, 0x8d, 0x30, 0xf2, 0x9d, 0x4c, 0xfa, 0xda, 0xbc, 0xfe, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xf6, 0xfa, 0xdc, 0xb5, 0xf4, 0xae, 0x4e, 0xf4, 0xa9, 0x3c, 0xf4, 0xac, 0x3d, 0xf4, 0xae, 0x3f, 0xf4, 0xaf, 0x3f, 0xf4, 0xad, 0x3f, 0xf3, 0xa8, 0x3d, 0xf2, 0x9d, 0x38, 0xe2, 0x94, 0x34, 0x23, 0x14, 0x6, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x11, 0x8, 0x3, 0x9e, 0x62, 0x39, 0xf2, 0x91, 0x4e, 0xe7, 0x79, 0x29, 0x48, 0x25, 0xc, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x27, 0x13, 0x6, 0xe5, 0x93, 0x54, 0xf3, 0xa7, 0x59, 0xf4, 0xa6, 0x56, 0xf4, 0xa7, 0x5d, 0xf3, 0xa4, 0x59, 0xf3, 0xa2, 0x57, 0xf1, 0x90, 0x36, 0xf4, 0xa7, 0x5d, 0xfe, 0xf4, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf2, 0xe3, 0xf6, 0xb8, 0x5f, 0xf4, 0xac, 0x3e, 0xf4, 0xaf, 0x3f, 0xf4, 0xb1, 0x40, 0xf4, 0xb2, 0x40, 0xf5, 0xaf, 0x3f, 0xf3, 0xa6, 0x3c, 0xf3, 0x9f, 0x38, 0x90, 0x5d, 0x21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x3d, 0x1f, 0xf, 0xed, 0x9c, 0x6a, 0xef, 0x8b, 0x4a, 0xec, 0x78, 0x29, 0xe4, 0x79, 0x2a, 0x29, 0x15, 0x7, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0x28, 0x14, 0x6, 0xe6, 0x97, 0x57, 0xf5, 0xad, 0x63, 0xf5, 0xac, 0x62, 0xf4, 0xa8, 0x5f, 0xf4, 0xa6, 0x5c, 0xf3, 0xa0, 0x53, 0xf4, 0xa9, 0x64, 0xfe, 0xf8, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xf2, 0xf7, 0xfa, 0xed, 0xf4, 0xf8, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xed, 0xf5, 0xb5, 0x53, 0xf5, 0xb0, 0x3f, 0xf5, 0xb3, 0x41, 0xf5, 0xb4, 0x42, 0xf5, 0xb3, 0x41, 0xf4, 0xad, 0x3f, 0xf3, 0xa1, 0x39, 0xe4, 0x98, 0x37, 0x1d, 0x11, 0x5, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x43, 0x23, 0x10, 0xf2, 0xa1, 0x70, 0xf1, 0x99, 0x61, 0xec, 0x78, 0x2a, 0xed, 0x7b, 0x2a, 0xc4, 0x69, 0x23, 0x15, 0xa, 0x3, 0x0, 0x0, 0x0, 0x1d, 0xf, 0x5, 0xe7, 0x9b, 0x5b, 0xf5, 0xb1, 0x68, 0xf5, 0xad, 0x65, 0xf4, 0xaa, 0x62, 0xf4, 0xa8, 0x5f, 0xf3, 0xa4, 0x59, 0xfd, 0xec, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfd, 0xfe, 0xc3, 0xda, 0xe9, 0x5c, 0x9a, 0xc5, 0x2a, 0x7b, 0xb4, 0x17, 0x6f, 0xae, 0x36, 0x81, 0xb8, 0x91, 0xbb, 0xd9, 0xf0, 0xf6, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe7, 0xc7, 0xf5, 0xb2, 0x43, 0xf6, 0xb3, 0x41, 0xf5, 0xb5, 0x43, 0xf5, 0xb6, 0x43, 0xf5, 0xb3, 0x42, 0xf4, 0xa8, 0x3c, 0xf4, 0xa2, 0x3a, 0x66, 0x41, 0x17, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x22, 0x10, 0x7, 0xd6, 0x88, 0x5b, 0xf2, 0xa5, 0x76, 0xee, 0x84, 0x3f, 0xed, 0x7a, 0x2a, 0xee, 0x80, 0x2c, 0xa5, 0x59, 0x1e, 0x7, 0x3, 0x1, 0x19, 0xd, 0x4, 0xe7, 0x9e, 0x5e, 0xf6, 0xb2, 0x6b, 0xf5, 0xae, 0x67, 0xf5, 0xac, 0x65, 0xf4, 0xa9, 0x61, 0xf8, 0xcc, 0xa1, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xfe, 0xfe, 0x97, 0xbf, 0xdb, 0x33, 0x83, 0xbb, 0x24, 0x7e, 0xb9, 0x3, 0x6a, 0xae, 0x0, 0x66, 0xab, 0x0, 0x64, 0xa9, 0x1, 0x63, 0xa9, 0x3c, 0x87, 0xbd, 0xee, 0xf5, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xf8, 0xc7, 0x76, 0xf6, 0xb4, 0x41, 0xf5, 0xb7, 0x43, 0xf6, 0xb8, 0x44, 0xf6, 0xb6, 0x43, 0xf5, 0xae, 0x3f, 0xf3, 0xa2, 0x3a, 0xac, 0x71, 0x29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x52, 0x2c, 0x16, 0xf0, 0xa1, 0x71, 0xf2, 0xa2, 0x6f, 0xed, 0x7e, 0x32, 0xed, 0x7e, 0x2b, 0xef, 0x82, 0x2d, 0x8a, 0x49, 0x18, 0x1b, 0xe, 0x4, 0xe7, 0xa2, 0x61, 0xf6, 0xb3, 0x6e, 0xf6, 0xb0, 0x6a, 0xf5, 0xae, 0x67, 0xf5, 0xab, 0x64, 0xfe, 0xf4, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb4, 0xd1, 0xe5, 0x3e, 0x8d, 0xc3, 0x37, 0x8e, 0xc5, 0x16, 0x7a, 0xb9, 0x0, 0x6b, 0xaf, 0x0, 0x68, 0xac, 0x0, 0x65, 0xaa, 0x0, 0x65, 0xab, 0x0, 0x66, 0xac, 0x4d, 0x93, 0xc4, 0xf8, 0xfb, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe7, 0xc5, 0xf6, 0xb3, 0x40, 0xf6, 0xb7, 0x43, 0xf6, 0xb9, 0x44, 0xf6, 0xb8, 0x45, 0xf5, 0xb2, 0x41, 0xf3, 0xa5, 0x3b, 0xe2, 0x98, 0x37, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x86, 0x4e, 0x2e, 0xf3, 0xa6, 0x77, 0xf1, 0x9e, 0x66, 0xed, 0x7e, 0x2d, 0xee, 0x82, 0x2c, 0xf0, 0x85, 0x2d, 0x7e, 0x47, 0x17, 0xe8, 0xa6, 0x64, 0xf6, 0xb5, 0x70, 0xf6, 0xb2, 0x6d, 0xf5, 0xb0, 0x6a, 0xf7, 0xbb, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xfb, 0xfd, 0x5b, 0x9c, 0xca, 0x42, 0x96, 0xcb, 0x3c, 0x93, 0xc9, 0x9, 0x73, 0xb6, 0x0, 0x6b, 0xb0, 0x0, 0x69, 0xad, 0x0, 0x66, 0xab, 0x0, 0x66, 0xab, 0x0, 0x67, 0xad, 0x4, 0x6a, 0xaf, 0xbb, 0xd7, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf8, 0xee, 0xf6, 0xb9, 0x4f, 0xf6, 0xb7, 0x44, 0xf6, 0xba, 0x45, 0xf6, 0xba, 0x45, 0xf5, 0xb5, 0x43, 0xf4, 0xa8, 0x3d, 0xf5, 0xa7, 0x3d, 0x1b, 0xf, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x11, 0x8, 0x3, 0xb0, 0x6d, 0x45, 0xf4, 0xaa, 0x7b, 0xf1, 0x9a, 0x5b, 0xee, 0x82, 0x2d, 0xef, 0x86, 0x2e, 0xee, 0x91, 0x36, 0xf5, 0xb5, 0x70, 0xf6, 0xb7, 0x73, 0xf6, 0xb4, 0x70, 0xf5, 0xb1, 0x6c, 0xf9, 0xcc, 0xa1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1, 0xe2, 0xef, 0x4b, 0x97, 0xca, 0x47, 0x9a, 0xce, 0x3f, 0x95, 0xcb, 0x3, 0x71, 0xb5, 0x0, 0x6c, 0xb0, 0x0, 0x69, 0xae, 0x0, 0x67, 0xac, 0x0, 0x66, 0xac, 0x0, 0x67, 0xad, 0x0, 0x69, 0xaf, 0x66, 0xa5, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfa, 0xf8, 0xc3, 0x67, 0xf6, 0xb8, 0x44, 0xf6, 0xba, 0x45, 0xf6, 0xbb, 0x46, 0xf6, 0xb7, 0x44, 0xf4, 0xab, 0x3e, 0xf8, 0xab, 0x3f, 0x2a, 0x19, 0x8, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x2b, 0x15, 0x9, 0xd4, 0x8a, 0x5c, 0xf4, 0xac, 0x7c, 0xf1, 0x98, 0x54, 0xee, 0x85, 0x2e, 0xf1, 0x93, 0x38, 0xf6, 0xba, 0x75, 0xf6, 0xb9, 0x75, 0xf6, 0xb6, 0x72, 0xf6, 0xb3, 0x6f, 0xfa, 0xd5, 0xb1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0xcf, 0xe5, 0x51, 0x9e, 0xcf, 0x4b, 0x9d, 0xd0, 0x43, 0x97, 0xcc, 0x3, 0x71, 0xb5, 0x0, 0x6d, 0xb1, 0x0, 0x6a, 0xae, 0x0, 0x67, 0xac, 0x0, 0x67, 0xad, 0x0, 0x68, 0xae, 0x0, 0x6a, 0xb0, 0x3b, 0x8c, 0xc2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf9, 0xc9, 0x77, 0xf6, 0xb8, 0x44, 0xf6, 0xba, 0x45, 0xf6, 0xbc, 0x46, 0xf6, 0xb8, 0x44, 0xf4, 0xad, 0x3f, 0xf8, 0xac, 0x3f, 0x2a, 0x1a, 0x8, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x47, 0x26, 0x12, 0xee, 0xa3, 0x72, 0xf4, 0xae, 0x7b, 0xf1, 0x97, 0x4e, 0xf1, 0x92, 0x38, 0xf6, 0xbb, 0x78, 0xf6, 0xbb, 0x78, 0xf6, 0xb7, 0x75, 0xf6, 0xb5, 0x71, 0xfa, 0xd6, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xad, 0xcd, 0xe4, 0x54, 0xa0, 0xd1, 0x4e, 0xa0, 0xd1, 0x48, 0x9b, 0xce, 0xb, 0x76, 0xb8, 0x0, 0x6d, 0xb2, 0x0, 0x6a, 0xaf, 0x0, 0x68, 0xad, 0x0, 0x68, 0xad, 0x0, 0x69, 0xae, 0x0, 0x6b, 0xb1, 0x36, 0x89, 0xc1, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xf9, 0xc9, 0x76, 0xf6, 0xb9, 0x44, 0xf6, 0xbb, 0x46, 0xf6, 0xbc, 0x47, 0xf6, 0xb9, 0x44, 0xf4, 0xad, 0x3f, 0xf8, 0xad, 0x40, 0x2a, 0x1a, 0x8, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x70, 0x42, 0x26, 0xf4, 0xad, 0x7b, 0xf5, 0xb1, 0x7d, 0xf3, 0x9f, 0x50, 0xf7, 0xbc, 0x7b, 0xf7, 0xbc, 0x7b, 0xf6, 0xb9, 0x78, 0xf6, 0xb7, 0x74, 0xf9, 0xd0, 0xa6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xda, 0xeb, 0x56, 0xa0, 0xd0, 0x51, 0xa1, 0xd2, 0x4a, 0x9c, 0xcf, 0x20, 0x82, 0xbf, 0x0, 0x6e, 0xb2, 0x0, 0x6b, 0xb0, 0x0, 0x68, 0xae, 0x0, 0x68, 0xae, 0x0, 0x69, 0xaf, 0x0, 0x6b, 0xb1, 0x50, 0x98, 0xc9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf9, 0xf8, 0xc3, 0x66, 0xf6, 0xb9, 0x45, 0xf7, 0xbb, 0x46, 0xf6, 0xbc, 0x47, 0xf6, 0xb8, 0x45, 0xf4, 0xad, 0x3f, 0xf8, 0xac, 0x3f, 0x2a, 0x19, 0x7, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xc, 0x5, 0x0, 0xa5, 0x67, 0x40, 0xf5, 0xb1, 0x7f, 0xf5, 0xb7, 0x7e, 0xf7, 0xbf, 0x80, 0xf7, 0xbe, 0x7d, 0xf7, 0xbb, 0x7b, 0xf6, 0xb9, 0x78, 0xf8, 0xc2, 0x8b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xee, 0xf5, 0xf9, 0x5b, 0xa0, 0xce, 0x53, 0xa2, 0xd2, 0x4c, 0x9e, 0xd0, 0x3c, 0x93, 0xc8, 0x6, 0x71, 0xb4, 0x0, 0x6c, 0xb0, 0x0, 0x69, 0xae, 0x0, 0x69, 0xae, 0x0, 0x6a, 0xaf, 0x0, 0x6b, 0xb1, 0x9b, 0xc5, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xec, 0xf6, 0xba, 0x4e, 0xf6, 0xb9, 0x45, 0xf7, 0xbb, 0x46, 0xf6, 0xbc, 0x47, 0xf5, 0xb7, 0x44, 0xf4, 0xab, 0x3e, 0xf5, 0xa8, 0x3e, 0x18, 0xd, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x1f, 0x10, 0x7, 0xc9, 0x84, 0x56, 0xf5, 0xb5, 0x81, 0xf7, 0xbf, 0x82, 0xf8, 0xc0, 0x80, 0xf7, 0xbd, 0x7d, 0xf7, 0xba, 0x7a, 0xf6, 0xb8, 0x77, 0xfe, 0xf5, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9a, 0xc2, 0xdf, 0x55, 0x9f, 0xd0, 0x4e, 0x9f, 0xd0, 0x47, 0x99, 0xcc, 0x2a, 0x87, 0xc1, 0x3, 0x6d, 0xb1, 0x0, 0x69, 0xaf, 0x0, 0x6a, 0xaf, 0x0, 0x6a, 0xb0, 0x27, 0x80, 0xbc, 0xec, 0xf4, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe5, 0xbf, 0xf6, 0xb6, 0x42, 0xf6, 0xba, 0x46, 0xf7, 0xbb, 0x46, 0xf7, 0xbb, 0x47, 0xf5, 0xb5, 0x43, 0xf3, 0xa8, 0x3d, 0xdd, 0x97, 0x37, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x32, 0x1a, 0xb, 0xe4, 0x9d, 0x6a, 0xf7, 0xbd, 0x84, 0xf8, 0xc1, 0x83, 0xf8, 0xbe, 0x80, 0xf7, 0xbd, 0x7d, 0xf7, 0xba, 0x79, 0xfa, 0xd9, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf6, 0xfa, 0x74, 0xac, 0xd4, 0x4f, 0x9b, 0xcd, 0x48, 0x99, 0xcc, 0x41, 0x94, 0xc8, 0x2c, 0x85, 0xbe, 0xb, 0x70, 0xb3, 0x1, 0x6a, 0xb0, 0xb, 0x6e, 0xb2, 0xbf, 0xd9, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xf8, 0xc8, 0x74, 0xf6, 0xb7, 0x44, 0xf6, 0xba, 0x46, 0xf7, 0xbb, 0x46, 0xf7, 0xb9, 0x46, 0xf6, 0xb2, 0x42, 0xf4, 0xa7, 0x3d, 0xa6, 0x70, 0x29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x4f, 0x2e, 0x18, 0xef, 0xaf, 0x78, 0xf8, 0xc1, 0x85, 0xf8, 0xc0, 0x82, 0xf7, 0xbe, 0x7f, 0xf7, 0xbc, 0x7d, 0xf7, 0xbe, 0x81, 0xfe, 0xf3, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0xf7, 0xfa, 0x91, 0xbd, 0xdb, 0x4f, 0x97, 0xc8, 0x40, 0x8e, 0xc3, 0x37, 0x8a, 0xc0, 0x34, 0x88, 0xbf, 0x57, 0x9c, 0xca, 0xcc, 0xe1, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe4, 0xbf, 0xf5, 0xb6, 0x45, 0xf6, 0xb8, 0x45, 0xf6, 0xba, 0x46, 0xf7, 0xba, 0x46, 0xf6, 0xb7, 0x45, 0xf5, 0xad, 0x3f, 0xf4, 0xa9, 0x40, 0x5c, 0x3d, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x85, 0x55, 0x31, 0xf7, 0xbd, 0x84, 0xf8, 0xc2, 0x85, 0xf8, 0xc0, 0x82, 0xf7, 0xbe, 0x80, 0xf7, 0xbc, 0x7d, 0xf9, 0xcb, 0x99, 0xfe, 0xf9, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfe, 0xfe, 0xe5, 0xef, 0xf6, 0xc1, 0xda, 0xeb, 0xba, 0xd5, 0xe9, 0xd8, 0xe8, 0xf2, 0xf9, 0xfb, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf3, 0xe4, 0xf6, 0xb9, 0x51, 0xf5, 0xb5, 0x43, 0xf6, 0xb8, 0x45, 0xf6, 0xb9, 0x46, 0xf6, 0xb8, 0x46, 0xf6, 0xb3, 0x43, 0xf4, 0xa7, 0x3e, 0xdf, 0x9d, 0x43, 0x17, 0xd, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x14, 0xa, 0x4, 0xb2, 0x7b, 0x4b, 0xf8, 0xc2, 0x88, 0xf8, 0xc1, 0x85, 0xf7, 0xbf, 0x82, 0xf7, 0xbe, 0x80, 0xf7, 0xbd, 0x7d, 0xf9, 0xca, 0x97, 0xfe, 0xf9, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf2, 0xe1, 0xf7, 0xbc, 0x5d, 0xf5, 0xb3, 0x42, 0xf5, 0xb6, 0x44, 0xf5, 0xb7, 0x45, 0xf6, 0xb8, 0x45, 0xf6, 0xb5, 0x44, 0xf5, 0xad, 0x40, 0xf6, 0xae, 0x4c, 0x88, 0x5d, 0x27, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x1d, 0x10, 0x6, 0xdb, 0xa0, 0x68, 0xf8, 0xc3, 0x88, 0xf7, 0xc1, 0x85, 0xf7, 0xc0, 0x82, 0xf7, 0xbf, 0x80, 0xf7, 0xbe, 0x7e, 0xf8, 0xc4, 0x88, 0xfc, 0xe6, 0xcc, 0xfe, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfa, 0xf3, 0xfa, 0xda, 0xa9, 0xf5, 0xb3, 0x4a, 0xf5, 0xb2, 0x42, 0xf5, 0xb3, 0x43, 0xf5, 0xb6, 0x44, 0xf5, 0xb7, 0x45, 0xf5, 0xb5, 0x44, 0xf5, 0xb0, 0x42, 0xf5, 0xad, 0x4d, 0xdd, 0x9e, 0x4a, 0x19, 0xf, 0x5, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x50, 0x33, 0x19, 0xec, 0xb4, 0x7a, 0xf8, 0xc2, 0x87, 0xf7, 0xc1, 0x85, 0xf7, 0xc1, 0x83, 0xf7, 0xc0, 0x80, 0xf7, 0xc0, 0x7f, 0xf7, 0xc0, 0x7c, 0xf7, 0xc2, 0x7e, 0xf8, 0xcc, 0x92, 0xfa, 0xda, 0xb0, 0xfb, 0xdf, 0xb9, 0xfa, 0xd9, 0xad, 0xf7, 0xc8, 0x84, 0xf5, 0xb4, 0x54, 0xf4, 0xad, 0x3f, 0xf4, 0xaf, 0x41, 0xf5, 0xb2, 0x42, 0xf5, 0xb4, 0x43, 0xf5, 0xb5, 0x44, 0xf5, 0xb4, 0x44, 0xf5, 0xb2, 0x46, 0xf5, 0xb2, 0x54, 0xf5, 0xb4, 0x5a, 0x5e, 0x3e, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x71, 0x4b, 0x29, 0xf8, 0xc0, 0x86, 0xf7, 0xc3, 0x87, 0xf7, 0xc2, 0x85, 0xf7, 0xc1, 0x83, 0xf7, 0xc2, 0x82, 0xf7, 0xc2, 0x7f, 0xf7, 0xc2, 0x7e, 0xf6, 0xc0, 0x76, 0xf4, 0xb4, 0x59, 0xf3, 0xa8, 0x3e, 0xf3, 0xa7, 0x39, 0xf3, 0xa9, 0x3d, 0xf4, 0xab, 0x3e, 0xf4, 0xad, 0x40, 0xf4, 0xb0, 0x41, 0xf4, 0xb2, 0x42, 0xf5, 0xb2, 0x42, 0xf5, 0xb3, 0x45, 0xf6, 0xb7, 0x54, 0xf6, 0xb7, 0x60, 0xf6, 0xb5, 0x5f, 0x9d, 0x6b, 0x31, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x8b, 0x5f, 0x36, 0xf9, 0xc1, 0x87, 0xf7, 0xc3, 0x88, 0xf8, 0xc3, 0x86, 0xf7, 0xc3, 0x84, 0xf8, 0xc3, 0x81, 0xf7, 0xc4, 0x80, 0xf7, 0xc4, 0x7e, 0xf7, 0xc4, 0x7d, 0xf7, 0xc3, 0x7a, 0xf6, 0xbd, 0x6c, 0xf5, 0xb7, 0x5c, 0xf5, 0xb5, 0x54, 0xf5, 0xb4, 0x50, 0xf5, 0xb6, 0x52, 0xf6, 0xb9, 0x58, 0xf6, 0xbd, 0x62, 0xf7, 0xbf, 0x6a, 0xf6, 0xba, 0x66, 0xf6, 0xb6, 0x63, 0xab, 0x78, 0x39, 0xa, 0x6, 0x2, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x83, 0x58, 0x32, 0xf0, 0xb9, 0x7f, 0xf7, 0xc3, 0x88, 0xf7, 0xc3, 0x86, 0xf8, 0xc4, 0x84, 0xf7, 0xc5, 0x82, 0xf7, 0xc5, 0x80, 0xf7, 0xc5, 0x7f, 0xf8, 0xc5, 0x7d, 0xf7, 0xc4, 0x7b, 0xf7, 0xc4, 0x79, 0xf7, 0xc4, 0x78, 0xf7, 0xc3, 0x76, 0xf7, 0xc3, 0x74, 0xf7, 0xc2, 0x71, 0xf6, 0xbe, 0x6d, 0xf6, 0xba, 0x6a, 0xf4, 0xb6, 0x65, 0x8a, 0x5e, 0x2c, 0xc, 0x7, 0x3, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x4f, 0x33, 0x1a, 0xd2, 0x99, 0x60, 0xf8, 0xc4, 0x89, 0xf8, 0xc3, 0x86, 0xf8, 0xc4, 0x84, 0xf7, 0xc5, 0x82, 0xf7, 0xc5, 0x80, 0xf7, 0xc5, 0x7f, 0xf7, 0xc4, 0x7e, 0xf7, 0xc4, 0x7b, 0xf7, 0xc3, 0x79, 0xf7, 0xc2, 0x77, 0xf6, 0xc0, 0x74, 0xf6, 0xbd, 0x71, 0xf6, 0xbb, 0x6e, 0xe1, 0xa4, 0x59, 0x5c, 0x3d, 0x1b, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xe, 0x6, 0x0, 0x72, 0x4b, 0x28, 0xd0, 0x9a, 0x62, 0xf7, 0xbf, 0x80, 0xf8, 0xc4, 0x85, 0xf7, 0xc3, 0x82, 0xf7, 0xc3, 0x80, 0xf7, 0xc3, 0x7e, 0xf7, 0xc1, 0x7c, 0xf6, 0xc0, 0x7a, 0xf7, 0xbf, 0x78, 0xf8, 0xbc, 0x72, 0xde, 0xa2, 0x5d, 0x80, 0x57, 0x2b, 0x13, 0xb, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x19, 0xe, 0x5, 0x44, 0x2c, 0x15, 0x81, 0x59, 0x32, 0xb2, 0x80, 0x4c, 0xcb, 0x95, 0x5b, 0xd2, 0x9c, 0x5f, 0xcd, 0x97, 0x5a, 0xb9, 0x86, 0x4d, 0x8b, 0x61, 0x34, 0x4a, 0x30, 0x17, 0x15, 0xc, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, + 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x3, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, }; @@ -154,25 +154,25 @@ GLXContext GHOST_WindowX11::s_firstContext = NULL; GHOST_WindowX11:: GHOST_WindowX11( - GHOST_SystemX11 *system, - Display * display, - const STR_String& title, - GHOST_TInt32 left, - GHOST_TInt32 top, - GHOST_TUns32 width, - GHOST_TUns32 height, - GHOST_TWindowState state, - const GHOST_TEmbedderWindowID parentWindow, - GHOST_TDrawingContextType type, - const bool stereoVisual, - const GHOST_TUns16 numOfAASamples -) : - GHOST_Window(width,height,state,type,stereoVisual,numOfAASamples), + GHOST_SystemX11 *system, + Display *display, + const STR_String& title, + GHOST_TInt32 left, + GHOST_TInt32 top, + GHOST_TUns32 width, + GHOST_TUns32 height, + GHOST_TWindowState state, + const GHOST_TEmbedderWindowID parentWindow, + GHOST_TDrawingContextType type, + const bool stereoVisual, + const GHOST_TUns16 numOfAASamples + ) : + GHOST_Window(width, height, state, type, stereoVisual, numOfAASamples), m_context(NULL), m_display(display), m_normal_state(GHOST_kWindowStateNormal), - m_system (system), - m_valid_setup (false), + m_system(system), + m_valid_setup(false), m_invalid_window(false), m_empty_cursor(None), m_custom_cursor(None) @@ -191,13 +191,13 @@ GHOST_WindowX11( memset(&m_xtablet, 0, sizeof(m_xtablet)); #endif - m_visual= NULL; + m_visual = NULL; if (!glXQueryVersion(m_display, &glxVersionMajor, &glxVersionMinor)) { printf("%s:%d: X11 glXQueryVersion() failed, verify working openGL system!\n", __FILE__, __LINE__); /* exit if this is the first window */ - if(s_firstContext==NULL) { + if (s_firstContext == NULL) { printf("initial window could not find the GLX extension, exit!\n"); exit(1); } @@ -209,7 +209,7 @@ GHOST_WindowX11( for (samples = m_numOfAASamples; samples >= 0; samples--) { i = 0; /* Reusing attributes array, so reset counter */ - if(m_stereoVisual) + if (m_stereoVisual) attributes[i++] = GLX_STEREO; attributes[i++] = GLX_RGBA; @@ -219,7 +219,7 @@ GHOST_WindowX11( attributes[i++] = GLX_GREEN_SIZE; attributes[i++] = 1; attributes[i++] = GLX_DEPTH_SIZE; attributes[i++] = 1; /* GLX >= 1.4 required for multi-sample */ - if(samples && (glxVersionMajor >= 1) && (glxVersionMinor >= 4)) { + if (samples && (glxVersionMajor >= 1) && (glxVersionMinor >= 4)) { attributes[i++] = GLX_SAMPLE_BUFFERS; attributes[i++] = 1; attributes[i++] = GLX_SAMPLES; attributes[i++] = samples; } @@ -234,14 +234,15 @@ GHOST_WindowX11( /* All options exhausted, cannot continue */ printf("%s:%d: X11 glXChooseVisual() failed, verify working openGL system!\n", __FILE__, __LINE__); - if(s_firstContext==NULL) { + if (s_firstContext == NULL) { printf("initial window could not find the GLX extension, exit!\n"); exit(1); } return; } - } else { + } + else { if (m_numOfAASamples && (m_numOfAASamples > samples)) { printf("%s:%d: oversampling requested %i but using %i samples\n", __FILE__, __LINE__, m_numOfAASamples, samples); @@ -259,51 +260,49 @@ GHOST_WindowX11( XSetWindowAttributes xattributes; memset(&xattributes, 0, sizeof(xattributes)); - xattributes.colormap= XCreateColormap( - m_display, - RootWindow(m_display, m_visual->screen), - m_visual->visual, - AllocNone - ); + xattributes.colormap = XCreateColormap(m_display, + RootWindow(m_display, m_visual->screen), + m_visual->visual, + AllocNone + ); - xattributes.border_pixel= 0; + xattributes.border_pixel = 0; // Specify which events we are interested in hearing. - xattributes.event_mask= - ExposureMask | StructureNotifyMask | - KeyPressMask | KeyReleaseMask | - EnterWindowMask | LeaveWindowMask | - ButtonPressMask | ButtonReleaseMask | - PointerMotionMask | FocusChangeMask | PropertyChangeMask; + xattributes.event_mask = + ExposureMask | StructureNotifyMask | + KeyPressMask | KeyReleaseMask | + EnterWindowMask | LeaveWindowMask | + ButtonPressMask | ButtonReleaseMask | + PointerMotionMask | FocusChangeMask | PropertyChangeMask; // create the window! ; if (parentWindow == 0) { - m_window = - XCreateWindow( - m_display, - RootWindow(m_display, m_visual->screen), - left, - top, - width, - height, - 0, // no border. - m_visual->depth, - InputOutput, - m_visual->visual, - CWBorderPixel|CWColormap|CWEventMask, - &xattributes - ); - } else { + m_window = XCreateWindow(m_display, + RootWindow(m_display, m_visual->screen), + left, + top, + width, + height, + 0, // no border. + m_visual->depth, + InputOutput, + m_visual->visual, + CWBorderPixel | CWColormap | CWEventMask, + &xattributes + ); + } + else { Window root_return; - int x_return,y_return; - unsigned int w_return,h_return,border_w_return,depth_return; + int x_return, y_return; + unsigned int w_return, h_return, border_w_return, depth_return; XGetGeometry(m_display, parentWindow, &root_return, &x_return, &y_return, - &w_return, &h_return, &border_w_return, &depth_return ); + &w_return, &h_return, &border_w_return, &depth_return); left = 0; top = 0; @@ -311,22 +310,21 @@ GHOST_WindowX11( height = h_return; - m_window = XCreateWindow( - m_display, - parentWindow, // reparent against embedder - left, - top, - width, - height, - 0, // no border. - m_visual->depth, - InputOutput, - m_visual->visual, - CWBorderPixel|CWColormap|CWEventMask, - &xattributes - ); - - XSelectInput(m_display , parentWindow, SubstructureNotifyMask); + m_window = XCreateWindow(m_display, + parentWindow, // reparent against embedder + left, + top, + width, + height, + 0, // no border. + m_visual->depth, + InputOutput, + m_visual->visual, + CWBorderPixel | CWColormap | CWEventMask, + &xattributes + ); + + XSelectInput(m_display, parentWindow, SubstructureNotifyMask); } @@ -359,23 +357,23 @@ GHOST_WindowX11( // Create some hints for the window manager on how // we want this window treated. - XSizeHints * xsizehints = XAllocSizeHints(); + XSizeHints *xsizehints = XAllocSizeHints(); xsizehints->flags = PPosition | PSize | PMinSize | PMaxSize; xsizehints->x = left; xsizehints->y = top; xsizehints->width = width; xsizehints->height = height; - xsizehints->min_width= 320; // size hints, could be made apart of the ghost api - xsizehints->min_height= 240; // limits are also arbitrary, but should not allow 1x1 window - xsizehints->max_width= 65535; - xsizehints->max_height= 65535; + xsizehints->min_width = 320; // size hints, could be made apart of the ghost api + xsizehints->min_height = 240; // limits are also arbitrary, but should not allow 1x1 window + xsizehints->max_width = 65535; + xsizehints->max_height = 65535; XSetWMNormalHints(m_display, m_window, xsizehints); XFree(xsizehints); - XClassHint * xclasshint = XAllocClassHint(); + XClassHint *xclasshint = XAllocClassHint(); const int len = title.Length() + 1; char *wmclass = (char *)malloc(sizeof(char) * len); - strncpy(wmclass, (const char*)title, sizeof(char) * len); + strncpy(wmclass, (const char *)title, sizeof(char) * len); xclasshint->res_name = wmclass; xclasshint->res_class = wmclass; XSetClassHint(m_display, m_window, xclasshint); @@ -384,15 +382,15 @@ GHOST_WindowX11( /* The basic for a good ICCCM "work" */ if (m_system->m_wm_protocols) { - natom= 0; + natom = 0; if (m_system->m_delete_window_atom) { - atoms[natom]= m_system->m_delete_window_atom; + atoms[natom] = m_system->m_delete_window_atom; natom++; } if (m_system->m_wm_take_focus) { - atoms[natom]= m_system->m_wm_take_focus; + atoms[natom] = m_system->m_wm_take_focus; natom++; } @@ -418,23 +416,24 @@ GHOST_WindowX11( GC gc_icon = XCreateGC(display, icon_pixmap, 0, NULL); GC gc_mask = XCreateGC(display, mask_pixmap, 0, NULL); - x_image = XCreateImage( display, m_visual->visual, 24, ZPixmap, 0, NULL, BLENDER_ICON_WIDTH, BLENDER_ICON_HEIGHT, 32, 0 ); - mask_image = XCreateImage( display, m_visual->visual, 1, ZPixmap, 0, NULL, BLENDER_ICON_WIDTH, BLENDER_ICON_HEIGHT, 8, 0); + x_image = XCreateImage(display, m_visual->visual, 24, ZPixmap, 0, NULL, BLENDER_ICON_WIDTH, BLENDER_ICON_HEIGHT, 32, 0); + mask_image = XCreateImage(display, m_visual->visual, 1, ZPixmap, 0, NULL, BLENDER_ICON_WIDTH, BLENDER_ICON_HEIGHT, 8, 0); x_image->data = (char *)malloc(x_image->bytes_per_line * BLENDER_ICON_HEIGHT); - mask_image->data = (char *)malloc( mask_image->bytes_per_line * BLENDER_ICON_HEIGHT); + mask_image->data = (char *)malloc(mask_image->bytes_per_line * BLENDER_ICON_HEIGHT); /* copy the BLENDER_ICON_48x48x24 into the XImage */ unsigned char *col = BLENDER_ICON_48x48x24; int px, py; - for (px=0; pxicon_pixmap = icon_pixmap; xwmhints->icon_mask = mask_pixmap; - XFreeGC (display, gc_icon); - XFreeGC (display, gc_mask); - XDestroyImage( x_image ); /* frees x_image->data too */ - XDestroyImage( mask_image ); + XFreeGC(display, gc_icon); + XFreeGC(display, gc_mask); + XDestroyImage(x_image); /* frees x_image->data too */ + XDestroyImage(mask_image); xwmhints->initial_state = NormalState; - xwmhints->input= True; - xwmhints->flags= InputHint|IconPixmapHint|IconMaskHint|StateHint; - XSetWMHints(display, m_window, xwmhints ); + xwmhints->input = True; + xwmhints->flags = InputHint | IconPixmapHint | IconMaskHint | StateHint; + XSetWMHints(display, m_window, xwmhints); XFree(xwmhints); // done setting the icon @@ -477,15 +476,14 @@ GHOST_WindowX11( #ifdef WITH_X11_XINPUT /* - Dummy function to get around IO Handler exiting if device invalid - Basically it will not crash blender now if you have a X device that - is configured but not plugged in. - -*/ + * Dummy function to get around IO Handler exiting if device invalid + * Basically it will not crash blender now if you have a X device that + * is configured but not plugged in. + */ static int ApplicationErrorHandler(Display *display, XErrorEvent *theEvent) { fprintf(stderr, "Ignoring Xlib error: error code %d request code %d\n", - theEvent->error_code, theEvent->request_code); + theEvent->error_code, theEvent->request_code); /* No exit! - but keep lint happy */ return 0; @@ -503,31 +501,31 @@ static bool match_token(const char *haystack, const char *needle) { while (*p && isspace(*p)) p++; - if (! *p) + if (!*p) break; for (q = needle; *q && *p && tolower(*p) == tolower(*q); q++) p++; - if (! *q && (isspace(*p) || !*p)) + if (!*q && (isspace(*p) || !*p)) return TRUE; - while (*p && ! isspace(*p)) + while (*p && !isspace(*p)) p++; } return FALSE; } -/* Determining if an X device is a Tablet style device is an imperfect science. -** We rely on common conventions around device names as well as the type reported -** by Wacom tablets. This code will likely need to be expanded for alternate tablet types -** -** Wintab refers to any device that interacts with the tablet as a cursor, -** (stylus, eraser, tablet mouse, airbrush, etc) -** this is not to be confused with wacom x11 configuration "cursor" device. -** Wacoms x11 config "cursor" refers to its device slot (which we mirror with -** our gSysCursors) for puck like devices (tablet mice essentially). -*/ +/* Determining if an X device is a Tablet style device is an imperfect science. + * We rely on common conventions around device names as well as the type reported + * by Wacom tablets. This code will likely need to be expanded for alternate tablet types + * + * Wintab refers to any device that interacts with the tablet as a cursor, + * (stylus, eraser, tablet mouse, airbrush, etc) + * this is not to be confused with wacom x11 configuration "cursor" device. + * Wacoms x11 config "cursor" refers to its device slot (which we mirror with + * our gSysCursors) for puck like devices (tablet mice essentially). + */ #if 0 // unused static BOOL is_tablet_cursor(const char *name, const char *type) { @@ -544,7 +542,7 @@ static BOOL is_tablet_cursor(const char *name, const char *type) NULL }; - for (i=0; tablet_cursor_whitelist[i] != NULL; i++) { + for (i = 0; tablet_cursor_whitelist[i] != NULL; i++) { if (name && match_token(name, tablet_cursor_whitelist[i])) return TRUE; if (type && match_token(type, tablet_cursor_whitelist[i])) @@ -556,14 +554,14 @@ static BOOL is_tablet_cursor(const char *name, const char *type) static BOOL is_stylus(const char *name, const char *type) { int i; - static const char* tablet_stylus_whitelist[] = { + static const char *tablet_stylus_whitelist[] = { "stylus", "wizardpen", "acecad", NULL }; - for (i=0; tablet_stylus_whitelist[i] != NULL; i++) { + for (i = 0; tablet_stylus_whitelist[i] != NULL; i++) { if (name && match_token(name, tablet_stylus_whitelist[i])) return TRUE; if (type && match_token(type, tablet_stylus_whitelist[i])) @@ -591,35 +589,35 @@ void GHOST_WindowX11::initXInputDevices() static XErrorHandler old_handler = (XErrorHandler) 0; XExtensionVersion *version = XGetExtensionVersion(m_display, INAME); - if(version && (version != (XExtensionVersion*)NoSuchExtension)) { - if(version->present) { + if (version && (version != (XExtensionVersion *)NoSuchExtension)) { + if (version->present) { int device_count; - XDeviceInfo* device_info = XListInputDevices(m_display, &device_count); + XDeviceInfo *device_info = XListInputDevices(m_display, &device_count); m_xtablet.StylusDevice = NULL; m_xtablet.EraserDevice = NULL; - m_xtablet.CommonData.Active= GHOST_kTabletModeNone; + m_xtablet.CommonData.Active = GHOST_kTabletModeNone; /* Install our error handler to override Xlib's termination behavior */ old_handler = XSetErrorHandler(ApplicationErrorHandler); - for(int i=0; inum_classes; ++j) { - if(ici->c_class==ValuatorClass) { + for (int j = 0; j < m_xtablet.StylusDevice->num_classes; ++j) { + if (ici->c_class == ValuatorClass) { // printf("\t\tfound ValuatorClass\n"); - XValuatorInfo* xvi = (XValuatorInfo*)ici; + XValuatorInfo *xvi = (XValuatorInfo *)ici; m_xtablet.PressureLevels = xvi->axes[2].max_value; /* this is assuming that the tablet has the same tilt resolution in both @@ -631,19 +629,20 @@ void GHOST_WindowX11::initXInputDevices() ici = (XAnyClassPtr)(((char *)ici) + ici->length); } - } else { - m_xtablet.StylusID= 0; + } + else { + m_xtablet.StylusID = 0; } } - else if(m_xtablet.EraserDevice==NULL && is_eraser(device_info[i].name, device_type)) { + else if (m_xtablet.EraserDevice == NULL && is_eraser(device_info[i].name, device_type)) { // printf("\tfound eraser\n"); - m_xtablet.EraserID= device_info[i].id; + m_xtablet.EraserID = device_info[i].id; m_xtablet.EraserDevice = XOpenDevice(m_display, m_xtablet.EraserID); - if (m_xtablet.EraserDevice == NULL) m_xtablet.EraserID= 0; + if (m_xtablet.EraserDevice == NULL) m_xtablet.EraserID = 0; } - if(device_type) { - XFree((void*)device_type); + if (device_type) { + XFree((void *)device_type); } } @@ -656,21 +655,21 @@ void GHOST_WindowX11::initXInputDevices() XEventClass xevents[10], ev; int dcount = 0; - if(m_xtablet.StylusDevice) { + if (m_xtablet.StylusDevice) { DeviceMotionNotify(m_xtablet.StylusDevice, m_xtablet.MotionEvent, ev); - if(ev) xevents[dcount++] = ev; + if (ev) xevents[dcount++] = ev; ProximityIn(m_xtablet.StylusDevice, m_xtablet.ProxInEvent, ev); - if(ev) xevents[dcount++] = ev; + if (ev) xevents[dcount++] = ev; ProximityOut(m_xtablet.StylusDevice, m_xtablet.ProxOutEvent, ev); - if(ev) xevents[dcount++] = ev; + if (ev) xevents[dcount++] = ev; } - if(m_xtablet.EraserDevice) { + if (m_xtablet.EraserDevice) { DeviceMotionNotify(m_xtablet.EraserDevice, m_xtablet.MotionEvent, ev); - if(ev) xevents[dcount++] = ev; + if (ev) xevents[dcount++] = ev; ProximityIn(m_xtablet.EraserDevice, m_xtablet.ProxInEvent, ev); - if(ev) xevents[dcount++] = ev; + if (ev) xevents[dcount++] = ev; ProximityOut(m_xtablet.EraserDevice, m_xtablet.ProxOutEvent, ev); - if(ev) xevents[dcount++] = ev; + if (ev) xevents[dcount++] = ev; } XSelectExtensionEvent(m_display, m_window, xevents, dcount); @@ -681,73 +680,73 @@ void GHOST_WindowX11::initXInputDevices() #endif /* WITH_X11_XINPUT */ - Window +Window GHOST_WindowX11:: -getXWindow( -){ +getXWindow() +{ return m_window; } - bool +bool GHOST_WindowX11:: -getValid( -) const { +getValid() const +{ return m_valid_setup; } - void +void GHOST_WindowX11:: setTitle( - const STR_String& title -){ + const STR_String& title) +{ Atom name = XInternAtom(m_display, "_NET_WM_NAME", 0); Atom utf8str = XInternAtom(m_display, "UTF8_STRING", 0); XChangeProperty(m_display, m_window, name, utf8str, 8, PropModeReplace, - (const unsigned char*) title.ReadPtr(), + (const unsigned char *) title.ReadPtr(), title.Length()); // This should convert to valid x11 string // and getTitle would need matching change - XStoreName(m_display,m_window,title); + XStoreName(m_display, m_window, title); XFlush(m_display); } - void +void GHOST_WindowX11:: getTitle( - STR_String& title -) const { + STR_String& title) const +{ char *name = NULL; - XFetchName(m_display,m_window,&name); - title= name?name:"untitled"; + XFetchName(m_display, m_window, &name); + title = name ? name : "untitled"; XFree(name); } - void +void GHOST_WindowX11:: getWindowBounds( - GHOST_Rect& bounds -) const { - // Getting the window bounds under X11 is not - // really supported (nor should it be desired). + GHOST_Rect& bounds) const +{ + // Getting the window bounds under X11 is not + // really supported (nor should it be desired). getClientBounds(bounds); } - void +void GHOST_WindowX11:: getClientBounds( - GHOST_Rect& bounds -) const { + GHOST_Rect& bounds) const +{ Window root_return; - int x_return,y_return; - unsigned int w_return,h_return,border_w_return,depth_return; + int x_return, y_return; + unsigned int w_return, h_return, border_w_return, depth_return; GHOST_TInt32 screen_x, screen_y; - XGetGeometry(m_display,m_window,&root_return,&x_return,&y_return, - &w_return,&h_return,&border_w_return,&depth_return); + XGetGeometry(m_display, m_window, &root_return, &x_return, &y_return, + &w_return, &h_return, &border_w_return, &depth_return); clientToScreen(0, 0, screen_x, screen_y); @@ -758,95 +757,88 @@ getClientBounds( } - GHOST_TSuccess +GHOST_TSuccess GHOST_WindowX11:: setClientWidth( - GHOST_TUns32 width -){ + GHOST_TUns32 width) +{ XWindowChanges values; - unsigned int value_mask= CWWidth; + unsigned int value_mask = CWWidth; values.width = width; - XConfigureWindow(m_display,m_window,value_mask,&values); + XConfigureWindow(m_display, m_window, value_mask, &values); return GHOST_kSuccess; } - GHOST_TSuccess +GHOST_TSuccess GHOST_WindowX11:: setClientHeight( - GHOST_TUns32 height -){ + GHOST_TUns32 height) +{ XWindowChanges values; - unsigned int value_mask= CWHeight; + unsigned int value_mask = CWHeight; values.height = height; - XConfigureWindow(m_display,m_window,value_mask,&values); + XConfigureWindow(m_display, m_window, value_mask, &values); return GHOST_kSuccess; } - GHOST_TSuccess +GHOST_TSuccess GHOST_WindowX11:: setClientSize( - GHOST_TUns32 width, - GHOST_TUns32 height -){ + GHOST_TUns32 width, + GHOST_TUns32 height) +{ XWindowChanges values; - unsigned int value_mask= CWWidth | CWHeight; + unsigned int value_mask = CWWidth | CWHeight; values.width = width; values.height = height; - XConfigureWindow(m_display,m_window,value_mask,&values); + XConfigureWindow(m_display, m_window, value_mask, &values); return GHOST_kSuccess; } - void +void GHOST_WindowX11:: screenToClient( - GHOST_TInt32 inX, - GHOST_TInt32 inY, - GHOST_TInt32& outX, - GHOST_TInt32& outY -) const { + GHOST_TInt32 inX, + GHOST_TInt32 inY, + GHOST_TInt32& outX, + GHOST_TInt32& outY) const +{ // This is correct! - int ax,ay; + int ax, ay; Window temp; - XTranslateCoordinates( - m_display, - RootWindow(m_display, m_visual->screen), - m_window, - inX, - inY, - &ax, - &ay, - &temp - ); + XTranslateCoordinates(m_display, + RootWindow(m_display, m_visual->screen), + m_window, + inX, inY, + &ax, &ay, + &temp); outX = ax; outY = ay; } - void +void GHOST_WindowX11:: clientToScreen( - GHOST_TInt32 inX, - GHOST_TInt32 inY, - GHOST_TInt32& outX, - GHOST_TInt32& outY -) const { - int ax,ay; + GHOST_TInt32 inX, + GHOST_TInt32 inY, + GHOST_TInt32& outX, + GHOST_TInt32& outY) const +{ + int ax, ay; Window temp; XTranslateCoordinates( - m_display, - m_window, - RootWindow(m_display, m_visual->screen), - inX, - inY, - &ax, - &ay, - &temp - ); + m_display, + m_window, + RootWindow(m_display, m_visual->screen), + inX, inY, + &ax, &ay, + &temp); outX = ax; outY = ay; } @@ -866,8 +858,8 @@ void GHOST_WindowX11::icccmSetState(int state) xev.xclient.format = 32; xev.xclient.message_type = m_system->m_wm_change_state; xev.xclient.data.l[0] = state; - XSendEvent (m_display, RootWindow(m_display, DefaultScreen(m_display)), - False, SubstructureNotifyMask | SubstructureRedirectMask, &xev); + XSendEvent(m_display, RootWindow(m_display, DefaultScreen(m_display)), + False, SubstructureNotifyMask | SubstructureRedirectMask, &xev); } int GHOST_WindowX11::icccmGetState(void) const @@ -879,8 +871,8 @@ int GHOST_WindowX11::icccmGetState(void) const prop_ret = NULL; st = XGetWindowProperty(m_display, m_window, m_system->m_wm_state, 0, - 0x7fffffff, False, m_system->m_wm_state, &type_ret, - &format_ret, &num_ret, &bytes_after, &prop_ret); + 0x7fffffff, False, m_system->m_wm_state, &type_ret, + &format_ret, &num_ret, &bytes_after, &prop_ret); if ((st == Success) && (prop_ret) && (num_ret == 2)) st = prop_ret[0]; @@ -913,7 +905,7 @@ void GHOST_WindowX11::netwmMaximized(bool set) xev.xclient.data.l[3] = 0; xev.xclient.data.l[4] = 0; XSendEvent(m_display, RootWindow(m_display, DefaultScreen(m_display)), - False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); + False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); } bool GHOST_WindowX11::netwmIsMaximized(void) const @@ -927,8 +919,8 @@ bool GHOST_WindowX11::netwmIsMaximized(void) const prop_ret = NULL; st = False; ret = XGetWindowProperty(m_display, m_window, m_system->m_net_state, 0, - 0x7fffffff, False, XA_ATOM, &type_ret, &format_ret, - &num_ret, &bytes_after, &prop_ret); + 0x7fffffff, False, XA_ATOM, &type_ret, &format_ret, + &num_ret, &bytes_after, &prop_ret); if ((ret == Success) && (prop_ret) && (format_ret == 32)) { count = 0; for (i = 0; i < num_ret; i++) { @@ -969,7 +961,7 @@ void GHOST_WindowX11::netwmFullScreen(bool set) xev.xclient.data.l[3] = 0; xev.xclient.data.l[4] = 0; XSendEvent(m_display, RootWindow(m_display, DefaultScreen(m_display)), - False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); + False, SubstructureRedirectMask | SubstructureNotifyMask, &xev); } bool GHOST_WindowX11::netwmIsFullScreen(void) const @@ -983,8 +975,8 @@ bool GHOST_WindowX11::netwmIsFullScreen(void) const prop_ret = NULL; st = False; ret = XGetWindowProperty(m_display, m_window, m_system->m_net_state, 0, - 0x7fffffff, False, XA_ATOM, &type_ret, &format_ret, - &num_ret, &bytes_after, &prop_ret); + 0x7fffffff, False, XA_ATOM, &type_ret, &format_ret, + &num_ret, &bytes_after, &prop_ret); if ((ret == Success) && (prop_ret) && (format_ret == 32)) { for (i = 0; i < num_ret; i++) { if (((unsigned long *) prop_ret)[i] == m_system->m_net_fullscreen) { @@ -1010,8 +1002,8 @@ void GHOST_WindowX11::motifFullScreen(bool set) hints.decorations = 1; XChangeProperty(m_display, m_window, m_system->m_motif, - m_system->m_motif, 32, PropModeReplace, - (unsigned char *) &hints, 4); + m_system->m_motif, 32, PropModeReplace, + (unsigned char *) &hints, 4); } bool GHOST_WindowX11::motifIsFullScreen(void) const @@ -1026,9 +1018,9 @@ bool GHOST_WindowX11::motifIsFullScreen(void) const prop_ret = NULL; state = False; st = XGetWindowProperty(m_display, m_window, m_system->m_motif, 0, - 0x7fffffff, False, m_system->m_motif, - &type_ret, &format_ret, &num_ret, - &bytes_after, &prop_ret); + 0x7fffffff, False, m_system->m_motif, + &type_ret, &format_ret, &num_ret, + &bytes_after, &prop_ret); if ((st == Success) && (prop_ret)) { hints = (MotifWmHints *) prop_ret; if (hints->flags & MWM_HINTS_DECORATIONS) { @@ -1070,7 +1062,7 @@ GHOST_TSuccess GHOST_WindowX11::setState(GHOST_TWindowState state) bool is_max, is_full, is_motif_full; cur_state = getState(); - if (state == (int)cur_state) + if (state == (int)cur_state) return GHOST_kSuccess; if (cur_state != GHOST_kWindowStateMinimized) { @@ -1153,11 +1145,11 @@ GHOST_TSuccess GHOST_WindowX11::setState(GHOST_TWindowState state) #include using namespace std; - GHOST_TSuccess +GHOST_TSuccess GHOST_WindowX11:: setOrder( - GHOST_TWindowOrder order -){ + GHOST_TWindowOrder order) +{ if (order == GHOST_kWindowOrderTop) { XWindowAttributes attr; Atom atom; @@ -1199,46 +1191,48 @@ setOrder( /* iconized windows give bad match error */ if (attr.map_state == IsViewable) XSetInputFocus(m_display, m_window, RevertToPointerRoot, - CurrentTime); + CurrentTime); XFlush(m_display); - } else if (order == GHOST_kWindowOrderBottom) { - XLowerWindow(m_display,m_window); + } + else if (order == GHOST_kWindowOrderBottom) { + XLowerWindow(m_display, m_window); XFlush(m_display); - } else { + } + else { return GHOST_kFailure; } return GHOST_kSuccess; } - GHOST_TSuccess +GHOST_TSuccess GHOST_WindowX11:: -swapBuffers( -){ +swapBuffers() +{ if (getDrawingContextType() == GHOST_kDrawingContextTypeOpenGL) { - glXSwapBuffers(m_display,m_window); + glXSwapBuffers(m_display, m_window); return GHOST_kSuccess; - } else { + } + else { return GHOST_kFailure; } } - GHOST_TSuccess +GHOST_TSuccess GHOST_WindowX11:: -activateDrawingContext( -){ - if (m_context !=NULL) { - glXMakeCurrent(m_display, m_window,m_context); +activateDrawingContext() +{ + if (m_context != NULL) { + glXMakeCurrent(m_display, m_window, m_context); return GHOST_kSuccess; } return GHOST_kFailure; } - GHOST_TSuccess +GHOST_TSuccess GHOST_WindowX11:: -invalidate( -){ - +invalidate() +{ // So the idea of this function is to generate an expose event // for the window. // Unfortunately X does not handle expose events for you and @@ -1265,10 +1259,10 @@ invalidate( * for the window have been pushed onto the GHOST queue */ - void +void GHOST_WindowX11:: -validate( -){ +validate() +{ m_invalid_window = false; } @@ -1280,7 +1274,7 @@ validate( GHOST_WindowX11:: ~GHOST_WindowX11( -){ + ){ static Atom Primary_atom, Clipboard_atom; Window p_owner, c_owner; /*Change the owner of the Atoms to None if we are the owner*/ @@ -1304,10 +1298,10 @@ GHOST_WindowX11:: #ifdef WITH_X11_XINPUT /* close tablet devices */ - if(m_xtablet.StylusDevice) + if (m_xtablet.StylusDevice) XCloseDevice(m_display, m_xtablet.StylusDevice); - if(m_xtablet.EraserDevice) + if (m_xtablet.EraserDevice) XCloseDevice(m_display, m_xtablet.EraserDevice); #endif /* WITH_X11_XINPUT */ @@ -1344,36 +1338,37 @@ GHOST_WindowX11:: * @param type The type of rendering context installed. * @return Indication as to whether installation has succeeded. */ - GHOST_TSuccess +GHOST_TSuccess GHOST_WindowX11:: installDrawingContext( - GHOST_TDrawingContextType type -){ + GHOST_TDrawingContextType type) +{ // only support openGL for now. GHOST_TSuccess success; switch (type) { - case GHOST_kDrawingContextTypeOpenGL: - m_context = glXCreateContext(m_display, m_visual, s_firstContext, True); - if (m_context !=NULL) { - if (!s_firstContext) { - s_firstContext = m_context; + case GHOST_kDrawingContextTypeOpenGL: + m_context = glXCreateContext(m_display, m_visual, s_firstContext, True); + if (m_context != NULL) { + if (!s_firstContext) { + s_firstContext = m_context; + } + glXMakeCurrent(m_display, m_window, m_context); + glClearColor(0.447, 0.447, 0.447, 0); + glClear(GL_COLOR_BUFFER_BIT); + success = GHOST_kSuccess; + } + else { + success = GHOST_kFailure; } - glXMakeCurrent(m_display, m_window,m_context); - glClearColor(0.447, 0.447, 0.447, 0); - glClear(GL_COLOR_BUFFER_BIT); - success = GHOST_kSuccess; - } else { - success = GHOST_kFailure; - } - break; + break; - case GHOST_kDrawingContextTypeNone: - success = GHOST_kSuccess; - break; + case GHOST_kDrawingContextTypeNone: + success = GHOST_kSuccess; + break; - default: - success = GHOST_kFailure; + default: + success = GHOST_kFailure; } return success; } @@ -1384,55 +1379,56 @@ installDrawingContext( * Removes the current drawing context. * @return Indication as to whether removal has succeeded. */ - GHOST_TSuccess +GHOST_TSuccess GHOST_WindowX11:: -removeDrawingContext( -){ +removeDrawingContext() +{ GHOST_TSuccess success; if (m_context != NULL) { glXDestroyContext(m_display, m_context); success = GHOST_kSuccess; - } else { + } + else { success = GHOST_kFailure; } return success; } - Cursor +Cursor GHOST_WindowX11:: getStandardCursor( - GHOST_TStandardCursor g_cursor -){ + GHOST_TStandardCursor g_cursor) +{ unsigned int xcursor_id; -#define GtoX(gcurs, xcurs) case gcurs: xcursor_id = xcurs +#define GtoX(gcurs, xcurs) case gcurs: xcursor_id = xcurs switch (g_cursor) { - GtoX(GHOST_kStandardCursorRightArrow, XC_arrow); break; - GtoX(GHOST_kStandardCursorLeftArrow, XC_top_left_arrow); break; - GtoX(GHOST_kStandardCursorInfo, XC_hand1); break; - GtoX(GHOST_kStandardCursorDestroy, XC_pirate); break; - GtoX(GHOST_kStandardCursorHelp, XC_question_arrow); break; - GtoX(GHOST_kStandardCursorCycle, XC_exchange); break; - GtoX(GHOST_kStandardCursorSpray, XC_spraycan); break; - GtoX(GHOST_kStandardCursorWait, XC_watch); break; - GtoX(GHOST_kStandardCursorText, XC_xterm); break; - GtoX(GHOST_kStandardCursorCrosshair, XC_crosshair); break; - GtoX(GHOST_kStandardCursorUpDown, XC_sb_v_double_arrow); break; - GtoX(GHOST_kStandardCursorLeftRight, XC_sb_h_double_arrow); break; - GtoX(GHOST_kStandardCursorTopSide, XC_top_side); break; - GtoX(GHOST_kStandardCursorBottomSide, XC_bottom_side); break; - GtoX(GHOST_kStandardCursorLeftSide, XC_left_side); break; - GtoX(GHOST_kStandardCursorRightSide, XC_right_side); break; - GtoX(GHOST_kStandardCursorTopLeftCorner, XC_top_left_corner); break; - GtoX(GHOST_kStandardCursorTopRightCorner, XC_top_right_corner); break; - GtoX(GHOST_kStandardCursorBottomRightCorner, XC_bottom_right_corner); break; - GtoX(GHOST_kStandardCursorBottomLeftCorner, XC_bottom_left_corner); break; - GtoX(GHOST_kStandardCursorPencil, XC_pencil); break; - GtoX(GHOST_kStandardCursorCopy, XC_arrow); break; - default: - xcursor_id = 0; + GtoX(GHOST_kStandardCursorRightArrow, XC_arrow); break; + GtoX(GHOST_kStandardCursorLeftArrow, XC_top_left_arrow); break; + GtoX(GHOST_kStandardCursorInfo, XC_hand1); break; + GtoX(GHOST_kStandardCursorDestroy, XC_pirate); break; + GtoX(GHOST_kStandardCursorHelp, XC_question_arrow); break; + GtoX(GHOST_kStandardCursorCycle, XC_exchange); break; + GtoX(GHOST_kStandardCursorSpray, XC_spraycan); break; + GtoX(GHOST_kStandardCursorWait, XC_watch); break; + GtoX(GHOST_kStandardCursorText, XC_xterm); break; + GtoX(GHOST_kStandardCursorCrosshair, XC_crosshair); break; + GtoX(GHOST_kStandardCursorUpDown, XC_sb_v_double_arrow); break; + GtoX(GHOST_kStandardCursorLeftRight, XC_sb_h_double_arrow); break; + GtoX(GHOST_kStandardCursorTopSide, XC_top_side); break; + GtoX(GHOST_kStandardCursorBottomSide, XC_bottom_side); break; + GtoX(GHOST_kStandardCursorLeftSide, XC_left_side); break; + GtoX(GHOST_kStandardCursorRightSide, XC_right_side); break; + GtoX(GHOST_kStandardCursorTopLeftCorner, XC_top_left_corner); break; + GtoX(GHOST_kStandardCursorTopRightCorner, XC_top_right_corner); break; + GtoX(GHOST_kStandardCursorBottomRightCorner, XC_bottom_right_corner); break; + GtoX(GHOST_kStandardCursorBottomLeftCorner, XC_bottom_left_corner); break; + GtoX(GHOST_kStandardCursorPencil, XC_pencil); break; + GtoX(GHOST_kStandardCursorCopy, XC_arrow); break; + default: + xcursor_id = 0; } #undef GtoX @@ -1446,26 +1442,27 @@ getStandardCursor( } return xcursor; - } else { + } + else { return None; } } - Cursor +Cursor GHOST_WindowX11:: getEmptyCursor( -) { + ) { if (!m_empty_cursor) { Pixmap blank; XColor dummy; char data[1] = {0}; /* make a blank cursor */ - blank = XCreateBitmapFromData ( - m_display, - RootWindow(m_display,DefaultScreen(m_display)), - data, 1, 1 - ); + blank = XCreateBitmapFromData( + m_display, + RootWindow(m_display, DefaultScreen(m_display)), + data, 1, 1 + ); m_empty_cursor = XCreatePixmapCursor(m_display, blank, blank, &dummy, &dummy, 0, 0); XFreePixmap(m_display, blank); @@ -1474,16 +1471,17 @@ getEmptyCursor( return m_empty_cursor; } - GHOST_TSuccess +GHOST_TSuccess GHOST_WindowX11:: setWindowCursorVisibility( - bool visible -){ + bool visible) +{ Cursor xcursor; if (visible) { - xcursor = getStandardCursor( getCursorShape() ); - } else { + xcursor = getStandardCursor(getCursorShape() ); + } + else { xcursor = getEmptyCursor(); } @@ -1493,17 +1491,17 @@ setWindowCursorVisibility( return GHOST_kSuccess; } - GHOST_TSuccess +GHOST_TSuccess GHOST_WindowX11:: setWindowCursorGrab( - GHOST_TGrabCursorMode mode -){ - if(mode != GHOST_kGrabDisable) { - if(mode != GHOST_kGrabNormal) { + GHOST_TGrabCursorMode mode) +{ + if (mode != GHOST_kGrabDisable) { + if (mode != GHOST_kGrabNormal) { m_system->getCursorPosition(m_cursorGrabInitPos[0], m_cursorGrabInitPos[1]); setCursorGrabAccum(0, 0); - if(mode == GHOST_kGrabHide) + if (mode == GHOST_kGrabHide) setWindowCursorVisibility(false); } @@ -1513,21 +1511,21 @@ setWindowCursorGrab( #endif } else { - if (m_cursorGrab==GHOST_kGrabHide) { + if (m_cursorGrab == GHOST_kGrabHide) { m_system->setCursorPosition(m_cursorGrabInitPos[0], m_cursorGrabInitPos[1]); setWindowCursorVisibility(true); } - if(m_cursorGrab != GHOST_kGrabNormal) { + if (m_cursorGrab != GHOST_kGrabNormal) { /* use to generate a mouse move event, otherwise the last event * blender gets can be outside the screen causing menus not to show * properly unless the user moves the mouse */ - XWarpPointer(m_display,None,None,0,0,0,0,0,0); + XWarpPointer(m_display, None, None, 0, 0, 0, 0, 0, 0); } /* Almost works without but important otherwise the mouse GHOST location can be incorrect on exit */ setCursorGrabAccum(0, 0); - m_cursorGrabBounds.m_l= m_cursorGrabBounds.m_r= -1; /* disable */ + m_cursorGrabBounds.m_l = m_cursorGrabBounds.m_r = -1; /* disable */ #ifdef GHOST_X11_GRAB XUngrabPointer(m_display, CurrentTime); #endif @@ -1538,12 +1536,12 @@ setWindowCursorGrab( return GHOST_kSuccess; } - GHOST_TSuccess +GHOST_TSuccess GHOST_WindowX11:: setWindowCursorShape( - GHOST_TStandardCursor shape -){ - Cursor xcursor = getStandardCursor( shape ); + GHOST_TStandardCursor shape) +{ + Cursor xcursor = getStandardCursor(shape); XDefineCursor(m_display, m_window, xcursor); XFlush(m_display); @@ -1551,45 +1549,44 @@ setWindowCursorShape( return GHOST_kSuccess; } - GHOST_TSuccess +GHOST_TSuccess GHOST_WindowX11:: setWindowCustomCursorShape( - GHOST_TUns8 bitmap[16][2], - GHOST_TUns8 mask[16][2], - int hotX, - int hotY -){ - -setWindowCustomCursorShape((GHOST_TUns8*)bitmap, (GHOST_TUns8*)mask, - 16, 16, hotX, hotY, 0, 1); + GHOST_TUns8 bitmap[16][2], + GHOST_TUns8 mask[16][2], + int hotX, + int hotY) +{ + setWindowCustomCursorShape((GHOST_TUns8 *)bitmap, (GHOST_TUns8 *)mask, + 16, 16, hotX, hotY, 0, 1); return GHOST_kSuccess; } - GHOST_TSuccess +GHOST_TSuccess GHOST_WindowX11:: setWindowCustomCursorShape( - GHOST_TUns8 *bitmap, - GHOST_TUns8 *mask, - int sizex, - int sizey, - int hotX, - int hotY, - int fg_color, - int bg_color -){ - Colormap colormap= DefaultColormap(m_display, DefaultScreen(m_display)); + GHOST_TUns8 *bitmap, + GHOST_TUns8 *mask, + int sizex, + int sizey, + int hotX, + int hotY, + int fg_color, + int bg_color) +{ + Colormap colormap = DefaultColormap(m_display, DefaultScreen(m_display)); Pixmap bitmap_pix, mask_pix; XColor fg, bg; - if(XAllocNamedColor(m_display, colormap, "White", &fg, &fg) == 0) return GHOST_kFailure; - if(XAllocNamedColor(m_display, colormap, "Black", &bg, &bg) == 0) return GHOST_kFailure; + if (XAllocNamedColor(m_display, colormap, "White", &fg, &fg) == 0) return GHOST_kFailure; + if (XAllocNamedColor(m_display, colormap, "Black", &bg, &bg) == 0) return GHOST_kFailure; if (m_custom_cursor) { XFreeCursor(m_display, m_custom_cursor); } - bitmap_pix = XCreateBitmapFromData(m_display, m_window, (char*) bitmap, sizex, sizey); - mask_pix = XCreateBitmapFromData(m_display, m_window, (char*) mask, sizex, sizey); + bitmap_pix = XCreateBitmapFromData(m_display, m_window, (char *) bitmap, sizex, sizey); + mask_pix = XCreateBitmapFromData(m_display, m_window, (char *) mask, sizex, sizey); m_custom_cursor = XCreatePixmapCursor(m_display, bitmap_pix, mask_pix, &fg, &bg, hotX, hotY); XDefineCursor(m_display, m_window, m_custom_cursor); @@ -1598,8 +1595,8 @@ setWindowCustomCursorShape( XFreePixmap(m_display, bitmap_pix); XFreePixmap(m_display, mask_pix); - XFreeColors(m_display, colormap, &fg.pixel, 1, 0L); - XFreeColors(m_display, colormap, &bg.pixel, 1, 0L); + XFreeColors(m_display, colormap, &fg.pixel, 1, 0L); + XFreeColors(m_display, colormap, &bg.pixel, 1, 0L); return GHOST_kSuccess; } diff --git a/intern/ghost/intern/GHOST_WindowX11.h b/intern/ghost/intern/GHOST_WindowX11.h index cb3c1415a28..a04a43bc33a 100644 --- a/intern/ghost/intern/GHOST_WindowX11.h +++ b/intern/ghost/intern/GHOST_WindowX11.h @@ -70,110 +70,110 @@ public: * @param width The width the window. * @param height The height the window. * @param state The state the window is initially opened with. - * @param parentWindow Parent (embedder) window + * @param parentWindow Parent (embedder) window * @param type The type of drawing context installed in this window. * @param stereoVisual Stereo visual for quad buffered stereo. * @param numOfAASamples Number of samples used for AA (zero if no AA) */ GHOST_WindowX11( - GHOST_SystemX11 *system, - Display * display, - const STR_String& title, - GHOST_TInt32 left, - GHOST_TInt32 top, - GHOST_TUns32 width, - GHOST_TUns32 height, - GHOST_TWindowState state, - const GHOST_TEmbedderWindowID parentWindow, - GHOST_TDrawingContextType type = GHOST_kDrawingContextTypeNone, - const bool stereoVisual = false, - const GHOST_TUns16 numOfAASamples = 0 - ); - - bool + GHOST_SystemX11 *system, + Display *display, + const STR_String& title, + GHOST_TInt32 left, + GHOST_TInt32 top, + GHOST_TUns32 width, + GHOST_TUns32 height, + GHOST_TWindowState state, + const GHOST_TEmbedderWindowID parentWindow, + GHOST_TDrawingContextType type = GHOST_kDrawingContextTypeNone, + const bool stereoVisual = false, + const GHOST_TUns16 numOfAASamples = 0 + ); + + bool getValid( - ) const; + ) const; - void + void setTitle(const STR_String& title); - void + void getTitle( - STR_String& title - ) const; + STR_String& title + ) const; - void + void getWindowBounds( - GHOST_Rect& bounds - ) const; + GHOST_Rect& bounds + ) const; - void + void getClientBounds( - GHOST_Rect& bounds - ) const; + GHOST_Rect& bounds + ) const; - GHOST_TSuccess + GHOST_TSuccess setClientWidth( - GHOST_TUns32 width - ); + GHOST_TUns32 width + ); - GHOST_TSuccess + GHOST_TSuccess setClientHeight( - GHOST_TUns32 height - ); + GHOST_TUns32 height + ); - GHOST_TSuccess + GHOST_TSuccess setClientSize( - GHOST_TUns32 width, - GHOST_TUns32 height - ); + GHOST_TUns32 width, + GHOST_TUns32 height + ); - void + void screenToClient( - GHOST_TInt32 inX, - GHOST_TInt32 inY, - GHOST_TInt32& outX, - GHOST_TInt32& outY - ) const; + GHOST_TInt32 inX, + GHOST_TInt32 inY, + GHOST_TInt32& outX, + GHOST_TInt32& outY + ) const; - void + void clientToScreen( - GHOST_TInt32 inX, - GHOST_TInt32 inY, - GHOST_TInt32& outX, - GHOST_TInt32& outY - ) const; + GHOST_TInt32 inX, + GHOST_TInt32 inY, + GHOST_TInt32& outX, + GHOST_TInt32& outY + ) const; - GHOST_TWindowState + GHOST_TWindowState getState( - ) const; + ) const; - GHOST_TSuccess + GHOST_TSuccess setState( - GHOST_TWindowState state - ); + GHOST_TWindowState state + ); - GHOST_TSuccess + GHOST_TSuccess setOrder( - GHOST_TWindowOrder order - ); + GHOST_TWindowOrder order + ); - GHOST_TSuccess + GHOST_TSuccess swapBuffers( - ); + ); - GHOST_TSuccess + GHOST_TSuccess activateDrawingContext( - ); - GHOST_TSuccess + ); + GHOST_TSuccess invalidate( - ); + ); /** * Destructor. * Closes the window and disposes resources allocated. */ - ~GHOST_WindowX11(); + ~GHOST_WindowX11(); /** * @section x11specific X11 system specific calls @@ -185,24 +185,24 @@ public: * the GHOST event queue. */ - void + void validate( - ); + ); /** * Return a handle to the x11 window type. */ - Window + Window getXWindow( - ); + ); #ifdef WITH_X11_XINPUT class XTablet { - public: +public: GHOST_TabletData CommonData; - XDevice* StylusDevice; - XDevice* EraserDevice; + XDevice *StylusDevice; + XDevice *EraserDevice; XID StylusID, EraserID; @@ -215,22 +215,32 @@ public: }; XTablet& GetXTablet() - { return m_xtablet; } + { + return m_xtablet; + } - const GHOST_TabletData* GetTabletData() - { return &m_xtablet.CommonData; } + const GHOST_TabletData *GetTabletData() + { + return &m_xtablet.CommonData; + } #else // WITH_X11_XINPUT - const GHOST_TabletData* GetTabletData() - { return NULL; } + const GHOST_TabletData *GetTabletData() + { + return NULL; + } #endif // WITH_X11_XINPUT #if defined(WITH_X11_XINPUT) && defined(X_HAVE_UTF8_STRING) - XIC getX11_XIC() { return m_xic; } + XIC getX11_XIC() { + return m_xic; + } #endif #ifdef WITH_XDND - GHOST_DropTargetX11* getDropTarget() - { return m_dropTarget; } + GHOST_DropTargetX11 *getDropTarget() + { + return m_dropTarget; + } #endif /* @@ -247,106 +257,106 @@ protected: * @param type The type of rendering context installed. * @return Indication as to whether installation has succeeded. */ - GHOST_TSuccess + GHOST_TSuccess installDrawingContext( - GHOST_TDrawingContextType type - ); + GHOST_TDrawingContextType type + ); /** * Removes the current drawing context. * @return Indication as to whether removal has succeeded. */ - GHOST_TSuccess + GHOST_TSuccess removeDrawingContext( - ); + ); /** * Sets the cursor visibility on the window using * native window system calls. */ - GHOST_TSuccess + GHOST_TSuccess setWindowCursorVisibility( - bool visible - ); + bool visible + ); /** * Sets the cursor grab on the window using * native window system calls. * @param warp Only used when grab is enabled, hides the mouse and allows gragging outside the screen. */ - GHOST_TSuccess + GHOST_TSuccess setWindowCursorGrab( - GHOST_TGrabCursorMode mode - ); + GHOST_TGrabCursorMode mode + ); - GHOST_TGrabCursorMode + GHOST_TGrabCursorMode getWindowCursorGrab() const; /** * Sets the cursor shape on the window using * native window system calls. */ - GHOST_TSuccess + GHOST_TSuccess setWindowCursorShape( - GHOST_TStandardCursor shape - ); + GHOST_TStandardCursor shape + ); /** * Sets the cursor shape on the window using * native window system calls. */ - GHOST_TSuccess + GHOST_TSuccess setWindowCustomCursorShape( - GHOST_TUns8 bitmap[16][2], - GHOST_TUns8 mask[16][2], - int hotX, - int hotY - ); + GHOST_TUns8 bitmap[16][2], + GHOST_TUns8 mask[16][2], + int hotX, + int hotY + ); /** * Sets the cursor shape on the window using * native window system calls (Arbitrary size/color). */ - GHOST_TSuccess + GHOST_TSuccess setWindowCustomCursorShape( - GHOST_TUns8 *bitmap, - GHOST_TUns8 *mask, - int sizex, - int sizey, - int hotX, - int hotY, - int fg_color, - int bg_color - ); - -private : + GHOST_TUns8 *bitmap, + GHOST_TUns8 *mask, + int sizex, + int sizey, + int hotX, + int hotY, + int fg_color, + int bg_color + ); + +private: /// Force use of public constructor. GHOST_WindowX11( - ); + ); GHOST_WindowX11( - const GHOST_WindowX11 & - ); + const GHOST_WindowX11 & + ); - Cursor + Cursor getStandardCursor( - GHOST_TStandardCursor g_cursor - ); + GHOST_TStandardCursor g_cursor + ); - Cursor + Cursor getEmptyCursor( - ); + ); #ifdef WITH_X11_XINPUT void initXInputDevices(); #endif - GLXContext m_context; - Window m_window; - Display *m_display; - XVisualInfo *m_visual; + GLXContext m_context; + Window m_window; + Display *m_display; + XVisualInfo *m_visual; GHOST_TWindowState m_normal_state; /** The first created OpenGL context (for sharing display lists) */ @@ -354,7 +364,7 @@ private : /// A pointer to the typed system class. - GHOST_SystemX11 * m_system; + GHOST_SystemX11 *m_system; bool m_valid_setup; @@ -371,7 +381,7 @@ private : std::map m_standard_cursors; #ifdef WITH_XDND - GHOST_DropTargetX11 * m_dropTarget; + GHOST_DropTargetX11 *m_dropTarget; #endif #ifdef WITH_X11_XINPUT -- cgit v1.2.3