From 7d0f7518c2235a9dc783029971259ddaada2db20 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Thu, 23 Apr 2009 08:42:38 -0700 Subject: [PATCH 01/89] Fix byte swapping of XF86VidMode{Get,Set}GammaRamp Fixes OpenSolaris Bug 8315: Xorg segfaults when screensaver fades in cross-endian xdmcp session Signed-off-by: Alan Coopersmith --- hw/xfree86/dixmods/extmod/xf86vmode.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/hw/xfree86/dixmods/extmod/xf86vmode.c b/hw/xfree86/dixmods/extmod/xf86vmode.c index ea8089e94..10b9ed370 100644 --- a/hw/xfree86/dixmods/extmod/xf86vmode.c +++ b/hw/xfree86/dixmods/extmod/xf86vmode.c @@ -1541,6 +1541,7 @@ ProcXF86VidModeGetGammaRamp(ClientPtr client) { CARD16 *ramp = NULL; int n, length, i; + size_t ramplen; xXF86VidModeGetGammaRampReply rep; REQUEST(xXF86VidModeGetGammaRampReq); @@ -1555,7 +1556,8 @@ ProcXF86VidModeGetGammaRamp(ClientPtr client) length = (stuff->size + 1) & ~1; if(stuff->size) { - if(!(ramp = xalloc(length * 3 * sizeof(CARD16)))) + ramplen = length * 3 * sizeof(CARD16); + if (!(ramp = xalloc(ramplen))) return BadAlloc; if (!VidModeGetGammaRamp(stuff->screen, stuff->size, @@ -1573,13 +1575,12 @@ ProcXF86VidModeGetGammaRamp(ClientPtr client) swaps(&rep.sequenceNumber, n); swapl(&rep.length, n); swaps(&rep.size, n); - for(i = 0; i < length * 3; i++) - swaps(&ramp[i],n); + SwapShorts(ramp, length * 3); } WriteToClient(client, sizeof(xXF86VidModeGetGammaRampReply), (char *)&rep); if(stuff->size) { - WriteToClient(client, rep.length << 2, (char*)ramp); + WriteToClient(client, ramplen, (char*)ramp); xfree(ramp); } @@ -2060,7 +2061,6 @@ SProcXF86VidModeGetGamma(ClientPtr client) static int SProcXF86VidModeSetGammaRamp(ClientPtr client) { - CARD16 *ramp; int length, n; REQUEST(xXF86VidModeSetGammaRampReq); swaps(&stuff->length, n); @@ -2069,11 +2069,7 @@ SProcXF86VidModeSetGammaRamp(ClientPtr client) swaps(&stuff->screen, n); length = ((stuff->size + 1) & ~1) * 6; REQUEST_FIXED_SIZE(xXF86VidModeSetGammaRampReq, length); - ramp = (CARD16*)&stuff[1]; - while(length--) { - swaps(ramp, n); - ramp++; - } + SwapRestS(stuff); return ProcXF86VidModeSetGammaRamp(client); } From 0c467b1f990f156a34d5ef117bd825df6b633114 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Fri, 24 Apr 2009 00:05:28 -0700 Subject: [PATCH 02/89] Add casts to generated entries in sdksyms.c to silence type mismatch warnings Signed-off-by: Alan Coopersmith --- hw/xfree86/loader/sdksyms.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xfree86/loader/sdksyms.sh b/hw/xfree86/loader/sdksyms.sh index be0b0ee6f..b320661c7 100755 --- a/hw/xfree86/loader/sdksyms.sh +++ b/hw/xfree86/loader/sdksyms.sh @@ -399,7 +399,7 @@ BEGIN { sub(/[^a-zA-Z0-9_].*/, "", symbol); #print; - printf(" &%s,\n", symbol); + printf(" (void *) &%s,\n", symbol); } } From 64b7f96dca23d2b33e0b8a8785d628d9a2f50e7b Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Fri, 24 Apr 2009 00:14:12 -0700 Subject: [PATCH 03/89] Add SIGIO/SIGPOLL support for Solaris Signed-off-by: Alan Coopersmith --- configure.ac | 2 +- hw/xfree86/os-support/shared/sigio.c | 42 +++++++++++++++++++---- hw/xfree86/os-support/solaris/Makefile.am | 3 +- include/xorg-config.h.in | 3 ++ 4 files changed, 42 insertions(+), 8 deletions(-) diff --git a/configure.ac b/configure.ac index ef5062705..f0317bd76 100644 --- a/configure.ac +++ b/configure.ac @@ -113,7 +113,7 @@ AM_CONDITIONAL(XSERVER_DTRACE, [test "x$WDTRACE" != "xno"]) AC_HEADER_DIRENT AC_HEADER_STDC -AC_CHECK_HEADERS([fcntl.h stdlib.h string.h unistd.h dlfcn.h]) +AC_CHECK_HEADERS([fcntl.h stdlib.h string.h unistd.h dlfcn.h stropts.h]) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST diff --git a/hw/xfree86/os-support/shared/sigio.c b/hw/xfree86/os-support/shared/sigio.c index 54c02cc8e..256578289 100644 --- a/hw/xfree86/os-support/shared/sigio.c +++ b/hw/xfree86/os-support/shared/sigio.c @@ -63,6 +63,10 @@ # include "xf86_OSlib.h" # include "inputstr.h" +#ifdef HAVE_STROPTS_H +# include +#endif + /* * Linux libc5 defines FASYNC, but not O_ASYNC. Don't know if it is * functional or not. @@ -139,6 +143,7 @@ xf86InstallSIGIOHandler(int fd, void (*f)(int, void *), void *closure) struct sigaction osa; int i; int blocked; + int installed = FALSE; for (i = 0; i < MAX_FUNCS; i++) { @@ -147,15 +152,30 @@ xf86InstallSIGIOHandler(int fd, void (*f)(int, void *), void *closure) if (xf86IsPipe (fd)) return 0; blocked = xf86BlockSIGIO(); +#ifdef O_ASYNC if (fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_ASYNC) == -1) { - xf86Msg(X_WARNING, "fcntl(%d, O_ASYNC): %s\n", + xf86Msg(X_WARNING, "fcntl(%d, O_ASYNC): %s\n", fd, strerror(errno)); - xf86UnblockSIGIO(blocked); - return 0; + } else { + if (fcntl(fd, F_SETOWN, getpid()) != -1) { + xf86Msg(X_WARNING, "fcntl(%d, F_SETOWN): %s\n", + fd, strerror(errno)); + } else { + installed = TRUE; + } } - if (fcntl(fd, F_SETOWN, getpid()) == -1) { - xf86Msg(X_WARNING, "fcntl(%d, F_SETOWN): %s\n", - fd, strerror(errno)); +#endif +#ifdef I_SETSIG /* System V Streams - used on Solaris for input devices */ + if (!installed && isastream(fd)) { + if (ioctl(fd, I_SETSIG, S_INPUT | S_ERROR | S_HANGUP) == -1) { + xf86Msg(X_WARNING, "fcntl(%d, I_SETSIG): %s\n", + fd, strerror(errno)); + } else { + installed = TRUE; + } + } +#endif + if (!installed) { xf86UnblockSIGIO(blocked); return 0; } @@ -221,7 +241,17 @@ xf86RemoveSIGIOHandler(int fd) } if (ret) { +#ifdef O_ASYNC fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) & ~O_ASYNC); +#endif +#ifdef I_SETSIG + if (isastream(fd)) { + if (ioctl(fd, I_SETSIG, 0) == -1) { + xf86Msg(X_WARNING, "fcntl(%d, I_SETSIG, 0): %s\n", + fd, strerror(errno)); + } + } +#endif xf86SigIOMax = max; xf86SigIOMaxFd = maxfd; if (!max) diff --git a/hw/xfree86/os-support/solaris/Makefile.am b/hw/xfree86/os-support/solaris/Makefile.am index a4ef67b91..bcb987490 100644 --- a/hw/xfree86/os-support/solaris/Makefile.am +++ b/hw/xfree86/os-support/solaris/Makefile.am @@ -21,7 +21,8 @@ noinst_LTLIBRARIES = libsolaris.la libsolaris_la_SOURCES = sun_init.c \ sun_vid.c sun_bell.c $(AGP_SRC) sun_apm.c \ $(srcdir)/../shared/kmod_noop.c \ - $(srcdir)/../shared/posix_tty.c $(srcdir)/../shared/sigiostubs.c \ + $(srcdir)/../shared/posix_tty.c \ + $(srcdir)/../shared/sigio.c \ $(srcdir)/../shared/stdResource.c \ $(srcdir)/../shared/vidmem.c \ $(VTSW_SRC) diff --git a/include/xorg-config.h.in b/include/xorg-config.h.in index f9b77d03d..ebeb44a37 100644 --- a/include/xorg-config.h.in +++ b/include/xorg-config.h.in @@ -54,6 +54,9 @@ /* Solaris 8 or later? */ #undef __SOL8__ +/* Define to 1 if you have the header file. */ +#undef HAVE_STROPTS_H + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_KD_H From a1c98f7fa9aa0cd5075ef2054c5d2be4d1e740f0 Mon Sep 17 00:00:00 2001 From: Joel Bosveld Date: Fri, 24 Apr 2009 10:12:26 -0700 Subject: [PATCH 04/89] Correct fcntl(F_SETOWN) error check in non-Solaris sigio code commit 64b7f96dca accidentally inverted the comparison, could result in crashes on some systems later on. Signed-off-by: Alan Coopersmith --- hw/xfree86/os-support/shared/sigio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xfree86/os-support/shared/sigio.c b/hw/xfree86/os-support/shared/sigio.c index 256578289..5ba0b7e1c 100644 --- a/hw/xfree86/os-support/shared/sigio.c +++ b/hw/xfree86/os-support/shared/sigio.c @@ -157,7 +157,7 @@ xf86InstallSIGIOHandler(int fd, void (*f)(int, void *), void *closure) xf86Msg(X_WARNING, "fcntl(%d, O_ASYNC): %s\n", fd, strerror(errno)); } else { - if (fcntl(fd, F_SETOWN, getpid()) != -1) { + if (fcntl(fd, F_SETOWN, getpid()) == -1) { xf86Msg(X_WARNING, "fcntl(%d, F_SETOWN): %s\n", fd, strerror(errno)); } else { From 28ddfc88d8d547941c7f4713db527a3c2f9ec35a Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Fri, 24 Apr 2009 12:09:21 -0700 Subject: [PATCH 05/89] DRI2: Add interface for drivers to query DRI2 extension version Signed-off-by: Ian Romanick --- hw/xfree86/dri2/dri2.c | 9 +++++++++ hw/xfree86/dri2/dri2.h | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index 0b52a0f8c..80de18f86 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -380,3 +380,12 @@ static XF86ModuleVersionInfo DRI2VersRec = _X_EXPORT XF86ModuleData dri2ModuleData = { &DRI2VersRec, DRI2Setup, NULL }; +void +DRI2Version(int *major, int *minor) +{ + if (major != NULL) + *major = DRI2VersRec.majorversion; + + if (minor != NULL) + *minor = DRI2VersRec.minorversion; +} diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h index 847e57c68..9d7d6dc80 100644 --- a/hw/xfree86/dri2/dri2.h +++ b/hw/xfree86/dri2/dri2.h @@ -100,4 +100,22 @@ extern _X_EXPORT int DRI2CopyRegion(DrawablePtr pDraw, unsigned int dest, unsigned int src); +/** + * Determine the major and minor version of the DRI2 extension. + * + * Provides a mechanism to other modules (e.g., 2D drivers) to determine the + * version of the DRI2 extension. While it is possible to peek directly at + * the \c XF86ModuleData from a layered module, such a module will fail to + * load (due to an unresolved symbol) if the DRI2 extension is not loaded. + * + * \param major Location to store the major verion of the DRI2 extension + * \param minor Location to store the minor verion of the DRI2 extension + * + * \note + * This interface was added some time after the initial release of the DRI2 + * module. Layered modules that wish to use this interface must first test + * its existance by calling \c xf86LoaderCheckSymbol. + */ +extern _X_EXPORT void DRI2Version(int *major, int *minor); + #endif From ff6c7764c2909e4126403b7211faa6c58556b341 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Fri, 24 Apr 2009 12:49:19 -0700 Subject: [PATCH 06/89] DRI2: Implement protocol for DRI2GetBuffersWithFormat MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change implements the protocol for DRI2GetBuffersWithFormat, but the bulk of the differences are the changes to the extension / driver interface to make this function work. The old CreateBuffers and DeleteBuffers routines are replaced with CreateBuffer and DeleteBuffer (both singular). This allows drivers to allocate buffers for a drawable one at a time. As a result, 3D drivers can now allocate the (fake) front-buffer for a window only when it is needed. Since 3D drivers only ask for the front-buffer on demand, the real front-buffer is always created. This allows CopyRegion impelemenations of SwapBuffers to continue working. As with previous version of this code, if the client asks for the front-buffer for a window, we instead give it the fake front-buffer. Signed-off-by: Ian Romanick Reviewed-by: Kristian Høgsberg --- configure.ac | 2 +- glx/glxdri2.c | 59 +++++++++-- hw/xfree86/dri2/dri2.c | 199 +++++++++++++++++++++++++++----------- hw/xfree86/dri2/dri2.h | 28 +++++- hw/xfree86/dri2/dri2ext.c | 88 ++++++++++++----- 5 files changed, 286 insertions(+), 90 deletions(-) diff --git a/configure.ac b/configure.ac index f0317bd76..9eadabced 100644 --- a/configure.ac +++ b/configure.ac @@ -886,7 +886,7 @@ if test "x$DRI" = xyes; then AC_SUBST(DRIPROTO_CFLAGS) fi -PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= 1.99.3], +PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= 2.1], [HAVE_DRI2PROTO=yes], [HAVE_DRI2PROTO=no]) case "$DRI2,$HAVE_DRI2PROTO" in yes,no) diff --git a/glx/glxdri2.c b/glx/glxdri2.c index 612defb3f..529b2df10 100644 --- a/glx/glxdri2.c +++ b/glx/glxdri2.c @@ -406,7 +406,7 @@ dri2GetBuffers(__DRIdrawable *driDrawable, int *out_count, void *loaderPrivate) { __GLXDRIdrawable *private = loaderPrivate; - DRI2BufferPtr buffers; + DRI2BufferPtr *buffers; int i; int j; @@ -427,15 +427,59 @@ dri2GetBuffers(__DRIdrawable *driDrawable, /* Do not send the real front buffer of a window to the client. */ if ((private->base.pDraw->type == DRAWABLE_WINDOW) - && (buffers[i].attachment == DRI2BufferFrontLeft)) { + && (buffers[i]->attachment == DRI2BufferFrontLeft)) { continue; } - private->buffers[j].attachment = buffers[i].attachment; - private->buffers[j].name = buffers[i].name; - private->buffers[j].pitch = buffers[i].pitch; - private->buffers[j].cpp = buffers[i].cpp; - private->buffers[j].flags = buffers[i].flags; + private->buffers[j].attachment = buffers[i]->attachment; + private->buffers[j].name = buffers[i]->name; + private->buffers[j].pitch = buffers[i]->pitch; + private->buffers[j].cpp = buffers[i]->cpp; + private->buffers[j].flags = buffers[i]->flags; + j++; + } + + *out_count = j; + return private->buffers; +} + +static __DRIbuffer * +dri2GetBuffersWithFormat(__DRIdrawable *driDrawable, + int *width, int *height, + unsigned int *attachments, int count, + int *out_count, void *loaderPrivate) +{ + __GLXDRIdrawable *private = loaderPrivate; + DRI2BufferPtr *buffers; + int i; + int j = 0; + + buffers = DRI2GetBuffersWithFormat(private->base.pDraw, + width, height, attachments, count, + out_count); + if (*out_count > MAX_DRAWABLE_BUFFERS) { + *out_count = 0; + return NULL; + } + + private->width = *width; + private->height = *height; + + /* This assumes the DRI2 buffer attachment tokens matches the + * __DRIbuffer tokens. */ + for (i = 0; i < *out_count; i++) { + /* Do not send the real front buffer of a window to the client. + */ + if ((private->base.pDraw->type == DRAWABLE_WINDOW) + && (buffers[i]->attachment == DRI2BufferFrontLeft)) { + continue; + } + + private->buffers[j].attachment = buffers[i]->attachment; + private->buffers[j].name = buffers[i]->name; + private->buffers[j].pitch = buffers[i]->pitch; + private->buffers[j].cpp = buffers[i]->cpp; + private->buffers[j].flags = buffers[i]->flags; j++; } @@ -454,6 +498,7 @@ static const __DRIdri2LoaderExtension loaderExtension = { { __DRI_DRI2_LOADER, __DRI_DRI2_LOADER_VERSION }, dri2GetBuffers, dri2FlushFrontBuffer, + dri2GetBuffersWithFormat, }; static const __DRIextension *loader_extensions[] = { diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index 80de18f86..9ded048eb 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -53,7 +53,7 @@ typedef struct _DRI2Drawable { unsigned int refCount; int width; int height; - DRI2BufferPtr buffers; + DRI2BufferPtr *buffers; int bufferCount; unsigned int pendingSequence; } DRI2DrawableRec, *DRI2DrawablePtr; @@ -63,8 +63,8 @@ typedef struct _DRI2Screen { const char *deviceName; int fd; unsigned int lastSequence; - DRI2CreateBuffersProcPtr CreateBuffers; - DRI2DestroyBuffersProcPtr DestroyBuffers; + DRI2CreateBufferProcPtr CreateBuffer; + DRI2DestroyBufferProcPtr DestroyBuffer; DRI2CopyRegionProcPtr CopyRegion; HandleExposuresProcPtr HandleExposures; @@ -132,71 +132,130 @@ DRI2CreateDrawable(DrawablePtr pDraw) return Success; } -DRI2BufferPtr -DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height, - unsigned int *attachments, int count, int *out_count) +static int +find_attachment(DRI2BufferPtr *buffer_list, int count, unsigned attachment) +{ + int i; + + if (buffer_list == NULL) { + return -1; + } + + for (i = 0; i < count; i++) { + if ((buffer_list[i] != NULL) + && (buffer_list[i]->attachment == attachment)) { + return i; + } + } + + return -1; +} + +static DRI2BufferPtr +allocate_or_reuse_buffer(DrawablePtr pDraw, DRI2ScreenPtr ds, + DRI2DrawablePtr pPriv, + unsigned int attachment, unsigned int format, + int dimensions_match) +{ + DRI2BufferPtr buffer; + int old_buf; + + old_buf = find_attachment(pPriv->buffers, pPriv->bufferCount, attachment); + + if ((old_buf < 0) + || !dimensions_match + || (pPriv->buffers[old_buf]->format != format)) { + buffer = (*ds->CreateBuffer)(pDraw, attachment, format); + } else { + buffer = pPriv->buffers[old_buf]; + pPriv->buffers[old_buf] = NULL; + } + + return buffer; +} + +static DRI2BufferPtr * +do_get_buffers(DrawablePtr pDraw, int *width, int *height, + unsigned int *attachments, int count, int *out_count, + int has_format) { DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen); DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw); - DRI2BufferPtr buffers; - unsigned int temp_buf[32]; - unsigned int *temp = temp_buf; + DRI2BufferPtr *buffers; + int need_real_front = 0; + int need_fake_front = 0; int have_fake_front = 0; + int front_format = 0; + const int dimensions_match = (pDraw->width == pPriv->width) + && (pDraw->height == pPriv->height); + int i; - /* If the drawable is a window and the front-buffer is requested, silently - * add the fake front-buffer to the list of requested attachments. The - * counting logic in the loop accounts for the case where the client - * requests both the fake and real front-buffer. - */ - if (pDraw->type == DRAWABLE_WINDOW) { - int need_fake_front = 0; - int i; + buffers = xalloc((count + 1) * sizeof(buffers[0])); - if ((count + 1) > 32) { - temp = xalloc((count + 1) * sizeof(temp[0])); - } + for (i = 0; i < count; i++) { + const unsigned attachment = *(attachments++); + const unsigned format = (has_format) ? *(attachments++) : 0; - for (i = 0; i < count; i++) { - if (attachments[i] == DRI2BufferFrontLeft) { - need_fake_front++; + buffers[i] = allocate_or_reuse_buffer(pDraw, ds, pPriv, attachment, + format, dimensions_match); + + + /* If the drawable is a window and the front-buffer is requested, + * silently add the fake front-buffer to the list of requested + * attachments. The counting logic in the loop accounts for the case + * where the client requests both the fake and real front-buffer. + */ + if (pDraw->type == DRAWABLE_WINDOW) { + if (attachment == DRI2BufferBackLeft) { + need_real_front++; + front_format = format; } - if (attachments[i] == DRI2BufferFakeFrontLeft) { + if (attachment == DRI2BufferFrontLeft) { + need_real_front--; + need_fake_front++; + front_format = format; + } + + if (attachment == DRI2BufferFakeFrontLeft) { need_fake_front--; have_fake_front = 1; } - - temp[i] = attachments[i]; - } - - if (need_fake_front > 0) { - temp[i] = DRI2BufferFakeFrontLeft; - count++; - have_fake_front = 1; - attachments = temp; } } - - if (pPriv->buffers == NULL || - pDraw->width != pPriv->width || pDraw->height != pPriv->height) - { - buffers = (*ds->CreateBuffers)(pDraw, attachments, count); - (*ds->DestroyBuffers)(pDraw, pPriv->buffers, pPriv->bufferCount); - pPriv->buffers = buffers; - pPriv->bufferCount = count; - pPriv->width = pDraw->width; - pPriv->height = pDraw->height; + if (need_real_front > 0) { + buffers[i++] = allocate_or_reuse_buffer(pDraw, ds, pPriv, + DRI2BufferFrontLeft, + front_format, dimensions_match); } - if (temp != temp_buf) { - xfree(temp); + if (need_fake_front > 0) { + buffers[i++] = allocate_or_reuse_buffer(pDraw, ds, pPriv, + DRI2BufferFakeFrontLeft, + front_format, dimensions_match); + have_fake_front = 1; } + *out_count = i; + + + if (pPriv->buffers != NULL) { + for (i = 0; i < pPriv->bufferCount; i++) { + if (pPriv->buffers[i] != NULL) { + (*ds->DestroyBuffer)(pDraw, pPriv->buffers[i]); + } + } + + xfree(pPriv->buffers); + } + + + pPriv->buffers = buffers; + pPriv->bufferCount = *out_count; *width = pPriv->width; *height = pPriv->height; - *out_count = pPriv->bufferCount; /* If the client is getting a fake front-buffer, pre-fill it with the @@ -220,6 +279,22 @@ DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height, return pPriv->buffers; } +DRI2BufferPtr * +DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height, + unsigned int *attachments, int count, int *out_count) +{ + return do_get_buffers(pDraw, width, height, attachments, count, + out_count, FALSE); +} + +DRI2BufferPtr * +DRI2GetBuffersWithFormat(DrawablePtr pDraw, int *width, int *height, + unsigned int *attachments, int count, int *out_count) +{ + return do_get_buffers(pDraw, width, height, attachments, count, + out_count, TRUE); +} + int DRI2CopyRegion(DrawablePtr pDraw, RegionPtr pRegion, unsigned int dest, unsigned int src) @@ -237,10 +312,10 @@ DRI2CopyRegion(DrawablePtr pDraw, RegionPtr pRegion, pSrcBuffer = NULL; for (i = 0; i < pPriv->bufferCount; i++) { - if (pPriv->buffers[i].attachment == dest) - pDestBuffer = &pPriv->buffers[i]; - if (pPriv->buffers[i].attachment == src) - pSrcBuffer = &pPriv->buffers[i]; + if (pPriv->buffers[i]->attachment == dest) + pDestBuffer = pPriv->buffers[i]; + if (pPriv->buffers[i]->attachment == src) + pSrcBuffer = pPriv->buffers[i]; } if (pSrcBuffer == NULL || pDestBuffer == NULL) return BadValue; @@ -266,7 +341,16 @@ DRI2DestroyDrawable(DrawablePtr pDraw) if (pPriv->refCount > 0) return; - (*ds->DestroyBuffers)(pDraw, pPriv->buffers, pPriv->bufferCount); + if (pPriv->buffers != NULL) { + int i; + + for (i = 0; i < pPriv->bufferCount; i++) { + (*ds->DestroyBuffer)(pDraw, pPriv->buffers[i]); + } + + xfree(pPriv->buffers); + } + xfree(pPriv); if (pDraw->type == DRAWABLE_WINDOW) @@ -320,11 +404,18 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info) if (!ds) return FALSE; + if ((info->version < 2) + || (info->CreateBuffer == NULL) + || (info->DestroyBuffer == NULL)) { + return FALSE; + } + + ds->fd = info->fd; ds->driverName = info->driverName; ds->deviceName = info->deviceName; - ds->CreateBuffers = info->CreateBuffers; - ds->DestroyBuffers = info->DestroyBuffers; + ds->CreateBuffer = info->CreateBuffer; + ds->DestroyBuffer = info->DestroyBuffer; ds->CopyRegion = info->CopyRegion; dixSetPrivate(&pScreen->devPrivates, dri2ScreenPrivateKey, ds); @@ -371,7 +462,7 @@ static XF86ModuleVersionInfo DRI2VersRec = MODINFOSTRING1, MODINFOSTRING2, XORG_VERSION_CURRENT, - 1, 0, 0, + 1, 1, 0, ABI_CLASS_EXTENSION, ABI_EXTENSION_VERSION, MOD_CLASS_NONE, diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h index 9d7d6dc80..b3d02a99e 100644 --- a/hw/xfree86/dri2/dri2.h +++ b/hw/xfree86/dri2/dri2.h @@ -41,6 +41,7 @@ typedef struct { unsigned int pitch; unsigned int cpp; unsigned int flags; + unsigned int format; void *driverPrivate; } DRI2BufferRec, *DRI2BufferPtr; @@ -58,8 +59,19 @@ typedef void (*DRI2CopyRegionProcPtr)(DrawablePtr pDraw, typedef void (*DRI2WaitProcPtr)(WindowPtr pWin, unsigned int sequence); +typedef DRI2BufferPtr (*DRI2CreateBufferProcPtr)(DrawablePtr pDraw, + unsigned int attachment, + unsigned int format); +typedef void (*DRI2DestroyBufferProcPtr)(DrawablePtr pDraw, + DRI2BufferPtr buffer); + +/** + * Version of the DRI2InfoRec structure defined in this header + */ +#define DRI2INFOREC_VERSION 2 + typedef struct { - unsigned int version; /* Version of this struct */ + unsigned int version; /**< Version of this struct */ int fd; const char *driverName; const char *deviceName; @@ -69,6 +81,14 @@ typedef struct { DRI2CopyRegionProcPtr CopyRegion; DRI2WaitProcPtr Wait; + /** + * \name Fields added in version 2 of the structure. + */ + /*@{*/ + DRI2CreateBufferProcPtr CreateBuffer; + DRI2DestroyBufferProcPtr DestroyBuffer; + /*@}*/ + } DRI2InfoRec, *DRI2InfoPtr; extern _X_EXPORT Bool DRI2ScreenInit(ScreenPtr pScreen, @@ -88,7 +108,7 @@ extern _X_EXPORT int DRI2CreateDrawable(DrawablePtr pDraw); extern _X_EXPORT void DRI2DestroyDrawable(DrawablePtr pDraw); -extern _X_EXPORT DRI2BufferPtr DRI2GetBuffers(DrawablePtr pDraw, +extern _X_EXPORT DRI2BufferPtr *DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height, unsigned int *attachments, @@ -118,4 +138,8 @@ extern _X_EXPORT int DRI2CopyRegion(DrawablePtr pDraw, */ extern _X_EXPORT void DRI2Version(int *major, int *minor); +extern _X_EXPORT DRI2BufferPtr *DRI2GetBuffersWithFormat(DrawablePtr pDraw, + int *width, int *height, unsigned int *attachments, int count, + int *out_count); + #endif diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c index 23f312149..029dce84e 100644 --- a/hw/xfree86/dri2/dri2ext.c +++ b/hw/xfree86/dri2/dri2ext.c @@ -80,7 +80,7 @@ ProcDRI2QueryVersion(ClientPtr client) rep.length = 0; rep.sequenceNumber = client->sequence; rep.majorVersion = 1; - rep.minorVersion = 0; + rep.minorVersion = 1; if (client->swapped) { swaps(&rep.sequenceNumber, n); @@ -192,32 +192,20 @@ ProcDRI2DestroyDrawable(ClientPtr client) return client->noClientException; } -static int -ProcDRI2GetBuffers(ClientPtr client) + +static void +send_buffers_reply(ClientPtr client, DrawablePtr pDrawable, + DRI2BufferPtr *buffers, int count, int width, int height) { - REQUEST(xDRI2GetBuffersReq); xDRI2GetBuffersReply rep; - DrawablePtr pDrawable; - DRI2BufferPtr buffers; - int i, status, width, height, count; - unsigned int *attachments; - xDRI2Buffer buffer; - int skip; + int skip = 0; + int i; - REQUEST_FIXED_SIZE(xDRI2GetBuffersReq, stuff->count * 4); - if (!validDrawable(client, stuff->drawable, &pDrawable, &status)) - return status; - - attachments = (unsigned int *) &stuff[1]; - buffers = DRI2GetBuffers(pDrawable, &width, &height, - attachments, stuff->count, &count); - - skip = 0; if (pDrawable->type == DRAWABLE_WINDOW) { for (i = 0; i < count; i++) { /* Do not send the real front buffer of a window to the client. */ - if (buffers[i].attachment == DRI2BufferFrontLeft) { + if (buffers[i]->attachment == DRI2BufferFrontLeft) { skip++; continue; } @@ -233,20 +221,66 @@ ProcDRI2GetBuffers(ClientPtr client) WriteToClient(client, sizeof(xDRI2GetBuffersReply), &rep); for (i = 0; i < count; i++) { + xDRI2Buffer buffer; + /* Do not send the real front buffer of a window to the client. */ if ((pDrawable->type == DRAWABLE_WINDOW) - && (buffers[i].attachment == DRI2BufferFrontLeft)) { + && (buffers[i]->attachment == DRI2BufferFrontLeft)) { continue; } - buffer.attachment = buffers[i].attachment; - buffer.name = buffers[i].name; - buffer.pitch = buffers[i].pitch; - buffer.cpp = buffers[i].cpp; - buffer.flags = buffers[i].flags; + buffer.attachment = buffers[i]->attachment; + buffer.name = buffers[i]->name; + buffer.pitch = buffers[i]->pitch; + buffer.cpp = buffers[i]->cpp; + buffer.flags = buffers[i]->flags; WriteToClient(client, sizeof(xDRI2Buffer), &buffer); } +} + + +static int +ProcDRI2GetBuffers(ClientPtr client) +{ + REQUEST(xDRI2GetBuffersReq); + DrawablePtr pDrawable; + DRI2BufferPtr *buffers; + int status, width, height, count; + unsigned int *attachments; + + REQUEST_FIXED_SIZE(xDRI2GetBuffersReq, stuff->count * 4); + if (!validDrawable(client, stuff->drawable, &pDrawable, &status)) + return status; + + attachments = (unsigned int *) &stuff[1]; + buffers = DRI2GetBuffers(pDrawable, &width, &height, + attachments, stuff->count, &count); + + + send_buffers_reply(client, pDrawable, buffers, count, width, height); + + return client->noClientException; +} + +static int +ProcDRI2GetBuffersWithFormat(ClientPtr client) +{ + REQUEST(xDRI2GetBuffersReq); + DrawablePtr pDrawable; + DRI2BufferPtr *buffers; + int status, width, height, count; + unsigned int *attachments; + + REQUEST_FIXED_SIZE(xDRI2GetBuffersReq, stuff->count * (2 * 4)); + if (!validDrawable(client, stuff->drawable, &pDrawable, &status)) + return status; + + attachments = (unsigned int *) &stuff[1]; + buffers = DRI2GetBuffersWithFormat(pDrawable, &width, &height, + attachments, stuff->count, &count); + + send_buffers_reply(client, pDrawable, buffers, count, width, height); return client->noClientException; } @@ -313,6 +347,8 @@ ProcDRI2Dispatch (ClientPtr client) return ProcDRI2GetBuffers(client); case X_DRI2CopyRegion: return ProcDRI2CopyRegion(client); + case X_DRI2GetBuffersWithFormat: + return ProcDRI2GetBuffersWithFormat(client); default: return BadRequest; } From a8cf63fd18b0ddadbadf7b47d620159854920050 Mon Sep 17 00:00:00 2001 From: Aaron Plattner Date: Thu, 23 Apr 2009 14:57:04 -0700 Subject: [PATCH 07/89] Export CompositeRegisterAlternateVisuals. Drivers need this if they add visuals that require implicit redirection. Add a new SDK header, compositeext.h, to contain the prototype for this function. --- composite/Makefile.am | 4 ++++ composite/compinit.c | 1 + composite/compint.h | 4 ---- composite/compositeext.h | 38 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 composite/compositeext.h diff --git a/composite/Makefile.am b/composite/Makefile.am index d7bead137..c2f5123f2 100644 --- a/composite/Makefile.am +++ b/composite/Makefile.am @@ -2,6 +2,10 @@ noinst_LTLIBRARIES = libcomposite.la AM_CFLAGS = $(DIX_CFLAGS) +if XORG +sdk_HEADERS = compositeext.h +endif + libcomposite_la_SOURCES = \ compalloc.c \ compext.c \ diff --git a/composite/compinit.c b/composite/compinit.c index a844017c1..ee269afa0 100644 --- a/composite/compinit.c +++ b/composite/compinit.c @@ -45,6 +45,7 @@ #endif #include "compint.h" +#include "compositeext.h" static int CompScreenPrivateKeyIndex; DevPrivateKey CompScreenPrivateKey = &CompScreenPrivateKeyIndex; diff --git a/composite/compint.h b/composite/compint.h index 1c19ccd39..fd2fea153 100644 --- a/composite/compint.h +++ b/composite/compint.h @@ -224,10 +224,6 @@ CompositeExtensionInit (void); * compinit.c */ -Bool -CompositeRegisterAlternateVisuals (ScreenPtr pScreen, - VisualID *vids, int nVisuals); - Bool compScreenInit (ScreenPtr pScreen); diff --git a/composite/compositeext.h b/composite/compositeext.h new file mode 100644 index 000000000..b20bab158 --- /dev/null +++ b/composite/compositeext.h @@ -0,0 +1,38 @@ +/* + * Copyright © 2009 NVIDIA Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifdef HAVE_DIX_CONFIG_H +#include +#endif + +#ifndef _COMPOSITEEXT_H_ +#define _COMPOSITEEXT_H_ + +#include "misc.h" +#include "scrnintstr.h" + +extern _X_EXPORT Bool CompositeRegisterAlternateVisuals(ScreenPtr pScreen, + VisualID *vids, + int nVisuals); + +#endif /* _COMPOSITEEXT_H_ */ From 40a8f2f4088aa353de733a11327b628ef13a52e6 Mon Sep 17 00:00:00 2001 From: Pierre Willenbrock Date: Sun, 19 Apr 2009 21:15:22 +0200 Subject: [PATCH 08/89] Fix obvious copypasta Reviewed-by: Ian Romanick --- glx/glxcmds.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/glx/glxcmds.c b/glx/glxcmds.c index 86e8dd8a5..1ae31515d 100644 --- a/glx/glxcmds.c +++ b/glx/glxcmds.c @@ -799,8 +799,8 @@ int __glXDisp_WaitX(__GLXclientState *cl, GLbyte *pc) return error; } - if (glxc && glxc->drawPriv->waitGL) - (*glxc->drawPriv->waitGL)(glxc->drawPriv); + if (glxc && glxc->drawPriv->waitX) + (*glxc->drawPriv->waitX)(glxc->drawPriv); return Success; } From 707af5f8c5fae3b6c4c5125a91917667bb0ab908 Mon Sep 17 00:00:00 2001 From: Simon Farnsworth Date: Thu, 23 Apr 2009 16:15:01 +0100 Subject: [PATCH 09/89] Make the cursor completely optional For embedded use, it's convenient to be able to disable the cursor completely, without having to audit and fix up all your third-party code (e.g. Mozilla Firefox). Add -nocursor and -cursor server options to enable and disable the cursor. The default is still -cursor, but embedded users can run the server with -nocursor to hide the cursor regardless of what application developers do. Signed-off-by: Peter Hutterer --- include/input.h | 4 ++++ os/utils.c | 12 +++++++++++- xfixes/cursor.c | 6 ++++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/include/input.h b/include/input.h index 56c3d2981..30e30bb9e 100644 --- a/include/input.h +++ b/include/input.h @@ -498,4 +498,8 @@ extern _X_EXPORT void DDXRingBell( int pitch, int duration); +/* Set to TRUE by default - os/utils.c sets it to FALSE on user request, + xfixes/cursor.c uses it to determine if the cursor is enabled */ +extern Bool EnableCursor; + #endif /* INPUT_H */ diff --git a/os/utils.c b/os/utils.c index 78a50b254..00abd6396 100644 --- a/os/utils.c +++ b/os/utils.c @@ -482,6 +482,8 @@ void UseMsg(void) ErrorF("-c turns off key-click\n"); ErrorF("c # key-click volume (0-100)\n"); ErrorF("-cc int default color visual class\n"); + ErrorF("-cursor enable the cursor (default)\n"); + ErrorF("-nocursor disable the cursor\n"); ErrorF("-core generate core dump on fatal error\n"); ErrorF("-dpi int screen resolution in dots per inch\n"); #ifdef DPMSExtension @@ -660,7 +662,15 @@ ProcessCommandLine(int argc, char *argv[]) #endif CoreDump = TRUE; } - else if ( strcmp( argv[i], "-dpi") == 0) + else if ( strcmp( argv[i], "-nocursor") == 0) + { + EnableCursor = FALSE; + } + else if ( strcmp( argv[i], "-cursor") == 0) + { + EnableCursor = TRUE; + } + else if ( strcmp( argv[i], "-dpi") == 0) { if(++i < argc) monitorResolution = atoi(argv[i]); diff --git a/xfixes/cursor.c b/xfixes/cursor.c index 33ab4265c..eb83cfeb7 100644 --- a/xfixes/cursor.c +++ b/xfixes/cursor.c @@ -129,6 +129,8 @@ typedef struct _CursorScreen { /* The cursor doesn't show up until the first XDefineCursor() */ static Bool CursorVisible = FALSE; +Bool EnableCursor = TRUE; + static Bool CursorDisplayCursor (DeviceIntPtr pDev, ScreenPtr pScreen, @@ -144,7 +146,7 @@ CursorDisplayCursor (DeviceIntPtr pDev, * initial root window setup. Not a great way to do it, I admit. */ if (ConnectionInfo) - CursorVisible = TRUE; + CursorVisible = EnableCursor; if (cs->pCursorHideCounts != NULL || !CursorVisible) { ret = ((*pScreen->RealizeCursor)(pDev, pScreen, pInvisibleCursor) && @@ -1052,7 +1054,7 @@ XFixesCursorInit (void) int i; if (party_like_its_1989) - CursorVisible = TRUE; + CursorVisible = EnableCursor; for (i = 0; i < screenInfo.numScreens; i++) { From 2a2a7fa6856b2e1954e904577535118f20cd9133 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Mon, 27 Apr 2009 20:23:53 -0700 Subject: [PATCH 10/89] Solaris: use instead of stale copy in Xorg sources Signed-off-by: Alan Coopersmith --- configure.ac | 2 +- hw/xfree86/os-support/solaris/Makefile.am | 11 +-- hw/xfree86/os-support/solaris/agpgart.h | 108 ---------------------- hw/xfree86/os-support/solaris/sun_agp.c | 7 +- 4 files changed, 7 insertions(+), 121 deletions(-) delete mode 100644 hw/xfree86/os-support/solaris/agpgart.h diff --git a/configure.ac b/configure.ac index 9eadabced..438ee0899 100644 --- a/configure.ac +++ b/configure.ac @@ -222,7 +222,7 @@ AC_CHECK_LIB(m, cbrt, AC_DEFINE(HAVE_CBRT, 1, [Have the 'cbrt' function])) AC_CHECK_HEADERS([ndbm.h dbm.h rpcsvc/dbm.h]) dnl AGPGART headers -AC_CHECK_HEADERS([linux/agpgart.h sys/agpio.h], AGP=yes) +AC_CHECK_HEADERS([linux/agpgart.h sys/agpio.h sys/agpgart.h], AGP=yes) AM_CONDITIONAL(AGP, [test "x$AGP" = xyes]) dnl APM header diff --git a/hw/xfree86/os-support/solaris/Makefile.am b/hw/xfree86/os-support/solaris/Makefile.am index bcb987490..4496ee122 100644 --- a/hw/xfree86/os-support/solaris/Makefile.am +++ b/hw/xfree86/os-support/solaris/Makefile.am @@ -4,12 +4,11 @@ else VTSW_SRC = $(srcdir)/../shared/VTsw_noop.c endif -# TODO: Don't build agpgart on SPARC -#if defined(i386Architecture) || defined(AMD64Architecture) +if AGP AGP_SRC = sun_agp.c -#else -#AGP_SRC = $(srcdir)/../shared/agp_noop.c -#endif +else +AGP_SRC = $(srcdir)/../shared/agp_noop.c +endif SOLARIS_INOUT_SRC = solaris-@SOLARIS_INOUT_ARCH@.S DISTCLEANFILES = solaris-@SOLARIS_INOUT_ARCH@.il @@ -28,7 +27,7 @@ libsolaris_la_SOURCES = sun_init.c \ $(VTSW_SRC) nodist_libsolaris_la_SOURCES = $(SOLARIS_INOUT_SRC) -sdk_HEADERS = agpgart.h +sdk_HEADERS = nodist_sdk_HEADERS = solaris-@SOLARIS_INOUT_ARCH@.il AM_CFLAGS = -DUSESTDRES -DHAVE_SYSV_IPC $(XORG_CFLAGS) $(DIX_CFLAGS) diff --git a/hw/xfree86/os-support/solaris/agpgart.h b/hw/xfree86/os-support/solaris/agpgart.h deleted file mode 100644 index 566de8046..000000000 --- a/hw/xfree86/os-support/solaris/agpgart.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * AGPGART module version 0.99 - * Copyright (C) 1999 Jeff Hartmann - * Copyright (C) 1999 Precision Insight, Inc. - * Copyright (C) 1999 Xi Graphics, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE - * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -/* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons - * to whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT - * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL - * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING - * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Except as contained in this notice, the name of a copyright holder - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * of the copyright holder. - */ - -#ifndef _AGPGART_H -#define _AGPGART_H - -#pragma ident "@(#)agpgart.h 1.1 05/04/04 SMI" - -typedef struct _agp_version { - uint16_t agpv_major; - uint16_t agpv_minor; -} agp_version_t; - -typedef struct _agp_info { - agp_version_t agpi_version; - uint32_t agpi_devid; /* bridge vendor + device */ - uint32_t agpi_mode; /* mode of bridge */ - ulong_t agpi_aperbase; /* base of aperture */ - size_t agpi_apersize; /* aperture range size */ - uint32_t agpi_pgtotal; /* max number of pages in aperture */ - uint32_t agpi_pgsystem; /* same as pg_total */ - uint32_t agpi_pgused; /* NUMBER of currently used pages */ -} agp_info_t; - -typedef struct _agp_setup { - uint32_t agps_mode; -} agp_setup_t; - -typedef struct _agp_allocate { - int32_t agpa_key; - uint32_t agpa_pgcount; - uint32_t agpa_type; - uint32_t agpa_physical; /* for i810/830 driver */ -} agp_allocate_t; - -typedef struct _agp_bind { - int32_t agpb_key; - uint32_t agpb_pgstart; -} agp_bind_t; - -typedef struct _agp_unbind { - int32_t agpu_key; - uint32_t agpu_pri; /* no use in solaris */ -} agp_unbind_t; - -#define AGPIOC_BASE 'G' -#define AGPIOC_INFO _IOR(AGPIOC_BASE, 0, 100) -#define AGPIOC_ACQUIRE _IO(AGPIOC_BASE, 1) -#define AGPIOC_RELEASE _IO(AGPIOC_BASE, 2) -#define AGPIOC_SETUP _IOW(AGPIOC_BASE, 3, agp_setup_t) -#define AGPIOC_ALLOCATE _IOWR(AGPIOC_BASE, 4, agp_allocate_t) -#define AGPIOC_DEALLOCATE _IOW(AGPIOC_BASE, 5, int) -#define AGPIOC_BIND _IOW(AGPIOC_BASE, 6, agp_bind_t) -#define AGPIOC_UNBIND _IOW(AGPIOC_BASE, 7, agp_unbind_t) - -#define AGP_DEVICE "/dev/agpgart" - -#endif /* _AGPGART_H */ diff --git a/hw/xfree86/os-support/solaris/sun_agp.c b/hw/xfree86/os-support/solaris/sun_agp.c index d151bf611..376f98edd 100644 --- a/hw/xfree86/os-support/solaris/sun_agp.c +++ b/hw/xfree86/os-support/solaris/sun_agp.c @@ -34,8 +34,6 @@ * of the copyright holder. */ -#pragma ident "@(#)sun_agp.c 1.1 05/04/04 SMI" - #ifdef HAVE_XORG_CONFIG_H #include #endif @@ -49,11 +47,8 @@ #include #include #include -#include "agpgart.h" +#include -#ifndef AGP_DEVICE -#define AGP_DEVICE "/dev/agpgart" -#endif /* AGP page size is independent of the host page size. */ #ifndef AGP_PAGE_SIZE #define AGP_PAGE_SIZE 4096 From 987579c930bda803427a28cb82773c389f5110d6 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 22 Apr 2009 13:26:40 +1000 Subject: [PATCH 11/89] dix: remove all but main() from main.c All other functions are pushed into where they seemed to fit. main.c is now linked separately into libmain.a and linked in by the various DDXs. Signed-off-by: Peter Hutterer --- configure.ac | 10 +- dix/Makefile.am | 6 +- dix/dispatch.c | 341 +++++++++++++++++++++++++- dix/events.c | 6 + dix/main.c | 368 ---------------------------- dix/swaprep.c | 15 ++ hw/dmx/Makefile.am | 1 + hw/vfb/Makefile.am | 1 + hw/xfree86/Makefile.am | 2 +- hw/xquartz/mach-startup/Makefile.am | 2 +- include/dix.h | 1 + 11 files changed, 376 insertions(+), 377 deletions(-) diff --git a/configure.ac b/configure.ac index 438ee0899..6628a4462 100644 --- a/configure.ac +++ b/configure.ac @@ -1153,6 +1153,10 @@ else DIX_LIB='$(top_builddir)/dix/libdix.la' OS_LIB='$(top_builddir)/os/libos.la' fi + +MAIN_LIB='$(top_builddir)/dix/libmain.la' +AC_SUBST([MAIN_LIB]) + MI_LIB='$(top_builddir)/mi/libmi.la' MI_EXT_LIB='$(top_builddir)/mi/libmiext.la' MI_INC='-I$(top_srcdir)/mi' @@ -1271,7 +1275,7 @@ AC_MSG_RESULT([$XNEST]) AM_CONDITIONAL(XNEST, [test "x$XNEST" = xyes]) if test "x$XNEST" = xyes; then - XNEST_LIBS="$FB_LIB $FIXES_LIB $MI_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $DIX_LIB $OS_LIB $CONFIG_LIB" + XNEST_LIBS="$FB_LIB $FIXES_LIB $MI_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $DIX_LIB $MAIN_LIB $OS_LIB $CONFIG_LIB" XNEST_SYS_LIBS="$XNESTMODULES_LIBS $GLX_SYS_LIBS" AC_SUBST([XNEST_LIBS]) AC_SUBST([XNEST_SYS_LIBS]) @@ -1643,7 +1647,7 @@ if test "x$XQUARTZ" = xyes; then AC_DEFINE(XQUARTZ,1,[Have Quartz]) AC_DEFINE(ROOTLESS,1,[Build Rootless code]) - DARWIN_LIBS="$MI_LIB $OS_LIB $DIX_LIB $FB_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $RECORD_LIB $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $XPSTUBS_LIB" + DARWIN_LIBS="$MI_LIB $OS_LIB $DIX_LIB $MAIN_LIB $FB_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $RECORD_LIB $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $XPSTUBS_LIB" AC_SUBST([DARWIN_LIBS]) AC_CHECK_LIB([Xplugin],[xp_init],[:]) @@ -1828,7 +1832,7 @@ if test "$KDRIVE" = yes; then ;; esac KDRIVE_STUB_LIB='$(top_builddir)/hw/kdrive/src/libkdrivestubs.la' - KDRIVE_LOCAL_LIBS="$DIX_LIB $KDRIVE_LIB $KDRIVE_STUB_LIB $CONFIG_LIB" + KDRIVE_LOCAL_LIBS="$DIX_LIB $MAIN_LIB $KDRIVE_LIB $KDRIVE_STUB_LIB $CONFIG_LIB" KDRIVE_LOCAL_LIBS="$KDRIVE_LOCAL_LIBS $FB_LIB $MI_LIB $KDRIVE_PURE_LIBS" KDRIVE_LOCAL_LIBS="$KDRIVE_LOCAL_LIBS $KDRIVE_OS_LIB $OS_LIB" KDRIVE_LIBS="$TSLIB_LIBS $KDRIVE_LOCAL_LIBS $XSERVER_SYS_LIBS $GLX_SYS_LIBS" diff --git a/dix/Makefile.am b/dix/Makefile.am index 83b8c62c2..ab702f790 100644 --- a/dix/Makefile.am +++ b/dix/Makefile.am @@ -1,7 +1,10 @@ -noinst_LTLIBRARIES = libdix.la +noinst_LTLIBRARIES = libdix.la libmain.la AM_CFLAGS = $(DIX_CFLAGS) +libmain_la_SOURCES = \ + main.c + libdix_la_SOURCES = \ atom.c \ colormap.c \ @@ -26,7 +29,6 @@ libdix_la_SOURCES = \ grabs.c \ initatoms.c \ inpututils.c \ - main.c \ pixmap.c \ privates.c \ property.c \ diff --git a/dix/dispatch.c b/dix/dispatch.c index a9f936707..16a51bdc5 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -107,6 +107,7 @@ Equipment Corporation. #ifdef HAVE_DIX_CONFIG_H #include +#include #endif #ifdef PANORAMIX_DEBUG @@ -134,6 +135,7 @@ int ProcInitialConnection(); #include "xace.h" #include "inputstr.h" #include "xkbsrv.h" +#include "site.h" #ifdef XSERVER_DTRACE #include "registry.h" @@ -150,7 +152,9 @@ typedef const char *string; #define BITCLEAR(buf, i) MASKWORD(buf, i) &= ~BITMASK(i) #define GETBIT(buf, i) (MASKWORD(buf, i) & BITMASK(i)) -extern xConnSetupPrefix connSetupPrefix; +xConnSetupPrefix connSetupPrefix; + +PaddingInfo PixmapWidthPaddingInfo[33]; static ClientPtr grabClient; #define GrabNone 0 @@ -160,7 +164,7 @@ static int grabState = GrabNone; static long grabWaiters[mskcnt]; CallbackListPtr ServerGrabCallback = NULL; HWEventQueuePtr checkForInput[2]; -extern int connBlockScreenStart; +int connBlockScreenStart; static void KillAllClients(void); @@ -461,6 +465,166 @@ Dispatch(void) #undef MAJOROP +static int VendorRelease = VENDOR_RELEASE; +static char *VendorString = VENDOR_NAME; + +static const int padlength[4] = {0, 3, 2, 1}; + +void +SetVendorRelease(int release) +{ + VendorRelease = release; +} + +void +SetVendorString(char *string) +{ + VendorString = string; +} + +Bool +CreateConnectionBlock(void) +{ + xConnSetup setup; + xWindowRoot root; + xDepth depth; + xVisualType visual; + xPixmapFormat format; + unsigned long vid; + int i, j, k, + lenofblock, + sizesofar = 0; + char *pBuf; + + + memset(&setup, 0, sizeof(xConnSetup)); + /* Leave off the ridBase and ridMask, these must be sent with + connection */ + + setup.release = VendorRelease; + /* + * per-server image and bitmap parameters are defined in Xmd.h + */ + setup.imageByteOrder = screenInfo.imageByteOrder; + + setup.bitmapScanlineUnit = screenInfo.bitmapScanlineUnit; + setup.bitmapScanlinePad = screenInfo.bitmapScanlinePad; + + setup.bitmapBitOrder = screenInfo.bitmapBitOrder; + setup.motionBufferSize = NumMotionEvents(); + setup.numRoots = screenInfo.numScreens; + setup.nbytesVendor = strlen(VendorString); + setup.numFormats = screenInfo.numPixmapFormats; + setup.maxRequestSize = MAX_REQUEST_SIZE; + QueryMinMaxKeyCodes(&setup.minKeyCode, &setup.maxKeyCode); + + lenofblock = sizeof(xConnSetup) + + ((setup.nbytesVendor + 3) & ~3) + + (setup.numFormats * sizeof(xPixmapFormat)) + + (setup.numRoots * sizeof(xWindowRoot)); + ConnectionInfo = xalloc(lenofblock); + if (!ConnectionInfo) + return FALSE; + + memmove(ConnectionInfo, (char *)&setup, sizeof(xConnSetup)); + sizesofar = sizeof(xConnSetup); + pBuf = ConnectionInfo + sizeof(xConnSetup); + + memmove(pBuf, VendorString, (int)setup.nbytesVendor); + sizesofar += setup.nbytesVendor; + pBuf += setup.nbytesVendor; + i = padlength[setup.nbytesVendor & 3]; + sizesofar += i; + while (--i >= 0) + *pBuf++ = 0; + + memset(&format, 0, sizeof(xPixmapFormat)); + for (i=0; idrawable.id; + root.defaultColormap = pScreen->defColormap; + root.whitePixel = pScreen->whitePixel; + root.blackPixel = pScreen->blackPixel; + root.currentInputMask = 0; /* filled in when sent */ + root.pixWidth = pScreen->width; + root.pixHeight = pScreen->height; + root.mmWidth = pScreen->mmWidth; + root.mmHeight = pScreen->mmHeight; + root.minInstalledMaps = pScreen->minInstalledCmaps; + root.maxInstalledMaps = pScreen->maxInstalledCmaps; + root.rootVisualID = pScreen->rootVisual; + root.backingStore = pScreen->backingStoreSupport; + root.saveUnders = FALSE; + root.rootDepth = pScreen->rootDepth; + root.nDepths = pScreen->numDepths; + memmove(pBuf, (char *)&root, sizeof(xWindowRoot)); + sizesofar += sizeof(xWindowRoot); + pBuf += sizeof(xWindowRoot); + + pDepth = pScreen->allowedDepths; + for(j = 0; j < pScreen->numDepths; j++, pDepth++) + { + lenofblock += sizeof(xDepth) + + (pDepth->numVids * sizeof(xVisualType)); + pBuf = (char *)xrealloc(ConnectionInfo, lenofblock); + if (!pBuf) + { + xfree(ConnectionInfo); + return FALSE; + } + ConnectionInfo = pBuf; + pBuf += sizesofar; + depth.depth = pDepth->depth; + depth.nVisuals = pDepth->numVids; + memmove(pBuf, (char *)&depth, sizeof(xDepth)); + pBuf += sizeof(xDepth); + sizesofar += sizeof(xDepth); + for(k = 0; k < pDepth->numVids; k++) + { + vid = pDepth->vids[k]; + for (pVisual = pScreen->visuals; + pVisual->vid != vid; + pVisual++) + ; + visual.visualID = vid; + visual.class = pVisual->class; + visual.bitsPerRGB = pVisual->bitsPerRGBValue; + visual.colormapEntries = pVisual->ColormapEntries; + visual.redMask = pVisual->redMask; + visual.greenMask = pVisual->greenMask; + visual.blueMask = pVisual->blueMask; + memmove(pBuf, (char *)&visual, sizeof(xVisualType)); + pBuf += sizeof(xVisualType); + sizesofar += sizeof(xVisualType); + } + } + } + connSetupPrefix.success = xTrue; + connSetupPrefix.length = lenofblock/4; + connSetupPrefix.majorVersion = X_PROTOCOL; + connSetupPrefix.minorVersion = X_PROTOCOL_REVISION; + return TRUE; +} + + int ProcBadRequest(ClientPtr client) { @@ -3700,3 +3864,176 @@ MarkClientException(ClientPtr client) { client->noClientException = -1; } + +/* + * This array encodes the answer to the question "what is the log base 2 + * of the number of pixels that fit in a scanline pad unit?" + * Note that ~0 is an invalid entry (mostly for the benefit of the reader). + */ +static int answer[6][4] = { + /* pad pad pad pad*/ + /* 8 16 32 64 */ + + { 3, 4, 5 , 6 }, /* 1 bit per pixel */ + { 1, 2, 3 , 4 }, /* 4 bits per pixel */ + { 0, 1, 2 , 3 }, /* 8 bits per pixel */ + { ~0, 0, 1 , 2 }, /* 16 bits per pixel */ + { ~0, ~0, 0 , 1 }, /* 24 bits per pixel */ + { ~0, ~0, 0 , 1 } /* 32 bits per pixel */ +}; + +/* + * This array gives the answer to the question "what is the first index for + * the answer array above given the number of bits per pixel?" + * Note that ~0 is an invalid entry (mostly for the benefit of the reader). + */ +static int indexForBitsPerPixel[ 33 ] = { + ~0, 0, ~0, ~0, /* 1 bit per pixel */ + 1, ~0, ~0, ~0, /* 4 bits per pixel */ + 2, ~0, ~0, ~0, /* 8 bits per pixel */ + ~0,~0, ~0, ~0, + 3, ~0, ~0, ~0, /* 16 bits per pixel */ + ~0,~0, ~0, ~0, + 4, ~0, ~0, ~0, /* 24 bits per pixel */ + ~0,~0, ~0, ~0, + 5 /* 32 bits per pixel */ +}; + +/* + * This array gives the bytesperPixel value for cases where the number + * of bits per pixel is a multiple of 8 but not a power of 2. + */ +static int answerBytesPerPixel[ 33 ] = { + ~0, 0, ~0, ~0, /* 1 bit per pixel */ + 0, ~0, ~0, ~0, /* 4 bits per pixel */ + 0, ~0, ~0, ~0, /* 8 bits per pixel */ + ~0,~0, ~0, ~0, + 0, ~0, ~0, ~0, /* 16 bits per pixel */ + ~0,~0, ~0, ~0, + 3, ~0, ~0, ~0, /* 24 bits per pixel */ + ~0,~0, ~0, ~0, + 0 /* 32 bits per pixel */ +}; + +/* + * This array gives the answer to the question "what is the second index for + * the answer array above given the number of bits per scanline pad unit?" + * Note that ~0 is an invalid entry (mostly for the benefit of the reader). + */ +static int indexForScanlinePad[ 65 ] = { + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + 0, ~0, ~0, ~0, /* 8 bits per scanline pad unit */ + ~0, ~0, ~0, ~0, + 1, ~0, ~0, ~0, /* 16 bits per scanline pad unit */ + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + 2, ~0, ~0, ~0, /* 32 bits per scanline pad unit */ + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + 3 /* 64 bits per scanline pad unit */ +}; + +#ifndef MIN +#define MIN(a,b) (((a) < (b)) ? (a) : (b)) +#endif + +/* + grow the array of screenRecs if necessary. + call the device-supplied initialization procedure +with its screen number, a pointer to its ScreenRec, argc, and argv. + return the number of successfully installed screens. + +*/ + +int +AddScreen( + Bool (* pfnInit)( + int /*index*/, + ScreenPtr /*pScreen*/, + int /*argc*/, + char ** /*argv*/ + ), + int argc, + char **argv) +{ + + int i; + int scanlinepad, format, depth, bitsPerPixel, j, k; + ScreenPtr pScreen; + + i = screenInfo.numScreens; + if (i == MAXSCREENS) + return -1; + + pScreen = (ScreenPtr) xcalloc(1, sizeof(ScreenRec)); + if (!pScreen) + return -1; + + pScreen->devPrivates = NULL; + pScreen->myNum = i; + pScreen->totalPixmapSize = BitmapBytePad(sizeof(PixmapRec)*8); + pScreen->ClipNotify = 0; /* for R4 ddx compatibility */ + pScreen->CreateScreenResources = 0; + + /* + * This loop gets run once for every Screen that gets added, + * but thats ok. If the ddx layer initializes the formats + * one at a time calling AddScreen() after each, then each + * iteration will make it a little more accurate. Worst case + * we do this loop N * numPixmapFormats where N is # of screens. + * Anyway, this must be called after InitOutput and before the + * screen init routine is called. + */ + for (format=0; formatrgf = ~0L; /* there are no scratch GCs yet*/ + WindowTable[i] = NullWindow; + screenInfo.screens[i] = pScreen; + screenInfo.numScreens++; + if (!(*pfnInit)(i, pScreen, argc, argv)) + { + dixFreePrivates(pScreen->devPrivates); + xfree(pScreen); + screenInfo.numScreens--; + return -1; + } + return i; +} diff --git a/dix/events.c b/dix/events.c index faa84259c..8af71b645 100644 --- a/dix/events.c +++ b/dix/events.c @@ -273,6 +273,12 @@ static struct { static xEvent* swapEvent = NULL; static int swapEventLen = 0; +void +NotImplemented(xEvent *from, xEvent *to) +{ + FatalError("Not implemented"); +} + /** * Convert the given event type from an XI event to a core event. * @param[in] The XI 1.x event type. diff --git a/dix/main.c b/dix/main.c index 9d5d83944..25b085e88 100644 --- a/dix/main.c +++ b/dix/main.c @@ -118,120 +118,7 @@ Equipment Corporation. extern void Dispatch(void); -xConnSetupPrefix connSetupPrefix; - -extern FontPtr defaultFont; - extern void InitProcVectors(void); -extern Bool CreateGCperDepthArray(void); - -#ifndef PANORAMIX -static -#endif -Bool CreateConnectionBlock(void); - -PaddingInfo PixmapWidthPaddingInfo[33]; - -int connBlockScreenStart; - -void -NotImplemented(xEvent *from, xEvent *to) -{ - FatalError("Not implemented"); -} - -/* - * Dummy entry for ReplySwapVector[] - */ - -void -ReplyNotSwappd( - ClientPtr pClient , - int size , - void * pbuf - ) -{ - FatalError("Not implemented"); -} - -/* - * This array encodes the answer to the question "what is the log base 2 - * of the number of pixels that fit in a scanline pad unit?" - * Note that ~0 is an invalid entry (mostly for the benefit of the reader). - */ -static int answer[6][4] = { - /* pad pad pad pad*/ - /* 8 16 32 64 */ - - { 3, 4, 5 , 6 }, /* 1 bit per pixel */ - { 1, 2, 3 , 4 }, /* 4 bits per pixel */ - { 0, 1, 2 , 3 }, /* 8 bits per pixel */ - { ~0, 0, 1 , 2 }, /* 16 bits per pixel */ - { ~0, ~0, 0 , 1 }, /* 24 bits per pixel */ - { ~0, ~0, 0 , 1 } /* 32 bits per pixel */ -}; - -/* - * This array gives the answer to the question "what is the first index for - * the answer array above given the number of bits per pixel?" - * Note that ~0 is an invalid entry (mostly for the benefit of the reader). - */ -static int indexForBitsPerPixel[ 33 ] = { - ~0, 0, ~0, ~0, /* 1 bit per pixel */ - 1, ~0, ~0, ~0, /* 4 bits per pixel */ - 2, ~0, ~0, ~0, /* 8 bits per pixel */ - ~0,~0, ~0, ~0, - 3, ~0, ~0, ~0, /* 16 bits per pixel */ - ~0,~0, ~0, ~0, - 4, ~0, ~0, ~0, /* 24 bits per pixel */ - ~0,~0, ~0, ~0, - 5 /* 32 bits per pixel */ -}; - -/* - * This array gives the bytesperPixel value for cases where the number - * of bits per pixel is a multiple of 8 but not a power of 2. - */ -static int answerBytesPerPixel[ 33 ] = { - ~0, 0, ~0, ~0, /* 1 bit per pixel */ - 0, ~0, ~0, ~0, /* 4 bits per pixel */ - 0, ~0, ~0, ~0, /* 8 bits per pixel */ - ~0,~0, ~0, ~0, - 0, ~0, ~0, ~0, /* 16 bits per pixel */ - ~0,~0, ~0, ~0, - 3, ~0, ~0, ~0, /* 24 bits per pixel */ - ~0,~0, ~0, ~0, - 0 /* 32 bits per pixel */ -}; - -/* - * This array gives the answer to the question "what is the second index for - * the answer array above given the number of bits per scanline pad unit?" - * Note that ~0 is an invalid entry (mostly for the benefit of the reader). - */ -static int indexForScanlinePad[ 65 ] = { - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - 0, ~0, ~0, ~0, /* 8 bits per scanline pad unit */ - ~0, ~0, ~0, ~0, - 1, ~0, ~0, ~0, /* 16 bits per scanline pad unit */ - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - 2, ~0, ~0, ~0, /* 32 bits per scanline pad unit */ - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - 3 /* 64 bits per scanline pad unit */ -}; - -#ifndef MIN -#define MIN(a,b) (((a) < (b)) ? (a) : (b)) -#endif #ifdef XQUARTZ #include @@ -456,258 +343,3 @@ int main(int argc, char *argv[], char *envp[]) return(0); } -static int VendorRelease = VENDOR_RELEASE; -static char *VendorString = VENDOR_NAME; - -void -SetVendorRelease(int release) -{ - VendorRelease = release; -} - -void -SetVendorString(char *string) -{ - VendorString = string; -} - -static const int padlength[4] = {0, 3, 2, 1}; - -#ifndef PANORAMIX -static -#endif -Bool -CreateConnectionBlock(void) -{ - xConnSetup setup; - xWindowRoot root; - xDepth depth; - xVisualType visual; - xPixmapFormat format; - unsigned long vid; - int i, j, k, - lenofblock, - sizesofar = 0; - char *pBuf; - - - memset(&setup, 0, sizeof(xConnSetup)); - /* Leave off the ridBase and ridMask, these must be sent with - connection */ - - setup.release = VendorRelease; - /* - * per-server image and bitmap parameters are defined in Xmd.h - */ - setup.imageByteOrder = screenInfo.imageByteOrder; - - setup.bitmapScanlineUnit = screenInfo.bitmapScanlineUnit; - setup.bitmapScanlinePad = screenInfo.bitmapScanlinePad; - - setup.bitmapBitOrder = screenInfo.bitmapBitOrder; - setup.motionBufferSize = NumMotionEvents(); - setup.numRoots = screenInfo.numScreens; - setup.nbytesVendor = strlen(VendorString); - setup.numFormats = screenInfo.numPixmapFormats; - setup.maxRequestSize = MAX_REQUEST_SIZE; - QueryMinMaxKeyCodes(&setup.minKeyCode, &setup.maxKeyCode); - - lenofblock = sizeof(xConnSetup) + - ((setup.nbytesVendor + 3) & ~3) + - (setup.numFormats * sizeof(xPixmapFormat)) + - (setup.numRoots * sizeof(xWindowRoot)); - ConnectionInfo = xalloc(lenofblock); - if (!ConnectionInfo) - return FALSE; - - memmove(ConnectionInfo, (char *)&setup, sizeof(xConnSetup)); - sizesofar = sizeof(xConnSetup); - pBuf = ConnectionInfo + sizeof(xConnSetup); - - memmove(pBuf, VendorString, (int)setup.nbytesVendor); - sizesofar += setup.nbytesVendor; - pBuf += setup.nbytesVendor; - i = padlength[setup.nbytesVendor & 3]; - sizesofar += i; - while (--i >= 0) - *pBuf++ = 0; - - memset(&format, 0, sizeof(xPixmapFormat)); - for (i=0; idrawable.id; - root.defaultColormap = pScreen->defColormap; - root.whitePixel = pScreen->whitePixel; - root.blackPixel = pScreen->blackPixel; - root.currentInputMask = 0; /* filled in when sent */ - root.pixWidth = pScreen->width; - root.pixHeight = pScreen->height; - root.mmWidth = pScreen->mmWidth; - root.mmHeight = pScreen->mmHeight; - root.minInstalledMaps = pScreen->minInstalledCmaps; - root.maxInstalledMaps = pScreen->maxInstalledCmaps; - root.rootVisualID = pScreen->rootVisual; - root.backingStore = pScreen->backingStoreSupport; - root.saveUnders = FALSE; - root.rootDepth = pScreen->rootDepth; - root.nDepths = pScreen->numDepths; - memmove(pBuf, (char *)&root, sizeof(xWindowRoot)); - sizesofar += sizeof(xWindowRoot); - pBuf += sizeof(xWindowRoot); - - pDepth = pScreen->allowedDepths; - for(j = 0; j < pScreen->numDepths; j++, pDepth++) - { - lenofblock += sizeof(xDepth) + - (pDepth->numVids * sizeof(xVisualType)); - pBuf = (char *)xrealloc(ConnectionInfo, lenofblock); - if (!pBuf) - { - xfree(ConnectionInfo); - return FALSE; - } - ConnectionInfo = pBuf; - pBuf += sizesofar; - depth.depth = pDepth->depth; - depth.nVisuals = pDepth->numVids; - memmove(pBuf, (char *)&depth, sizeof(xDepth)); - pBuf += sizeof(xDepth); - sizesofar += sizeof(xDepth); - for(k = 0; k < pDepth->numVids; k++) - { - vid = pDepth->vids[k]; - for (pVisual = pScreen->visuals; - pVisual->vid != vid; - pVisual++) - ; - visual.visualID = vid; - visual.class = pVisual->class; - visual.bitsPerRGB = pVisual->bitsPerRGBValue; - visual.colormapEntries = pVisual->ColormapEntries; - visual.redMask = pVisual->redMask; - visual.greenMask = pVisual->greenMask; - visual.blueMask = pVisual->blueMask; - memmove(pBuf, (char *)&visual, sizeof(xVisualType)); - pBuf += sizeof(xVisualType); - sizesofar += sizeof(xVisualType); - } - } - } - connSetupPrefix.success = xTrue; - connSetupPrefix.length = lenofblock/4; - connSetupPrefix.majorVersion = X_PROTOCOL; - connSetupPrefix.minorVersion = X_PROTOCOL_REVISION; - return TRUE; -} - -/* - grow the array of screenRecs if necessary. - call the device-supplied initialization procedure -with its screen number, a pointer to its ScreenRec, argc, and argv. - return the number of successfully installed screens. - -*/ - -int -AddScreen( - Bool (* pfnInit)( - int /*index*/, - ScreenPtr /*pScreen*/, - int /*argc*/, - char ** /*argv*/ - ), - int argc, - char **argv) -{ - - int i; - int scanlinepad, format, depth, bitsPerPixel, j, k; - ScreenPtr pScreen; - - i = screenInfo.numScreens; - if (i == MAXSCREENS) - return -1; - - pScreen = (ScreenPtr) xcalloc(1, sizeof(ScreenRec)); - if (!pScreen) - return -1; - - pScreen->devPrivates = NULL; - pScreen->myNum = i; - pScreen->totalPixmapSize = BitmapBytePad(sizeof(PixmapRec)*8); - pScreen->ClipNotify = 0; /* for R4 ddx compatibility */ - pScreen->CreateScreenResources = 0; - - /* - * This loop gets run once for every Screen that gets added, - * but thats ok. If the ddx layer initializes the formats - * one at a time calling AddScreen() after each, then each - * iteration will make it a little more accurate. Worst case - * we do this loop N * numPixmapFormats where N is # of screens. - * Anyway, this must be called after InitOutput and before the - * screen init routine is called. - */ - for (format=0; formatrgf = ~0L; /* there are no scratch GCs yet*/ - WindowTable[i] = NullWindow; - screenInfo.screens[i] = pScreen; - screenInfo.numScreens++; - if (!(*pfnInit)(i, pScreen, argc, argv)) - { - dixFreePrivates(pScreen->devPrivates); - xfree(pScreen); - screenInfo.numScreens--; - return -1; - } - return i; -} diff --git a/dix/swaprep.c b/dix/swaprep.c index 9eb67654a..86242168f 100644 --- a/dix/swaprep.c +++ b/dix/swaprep.c @@ -1291,3 +1291,18 @@ WriteSConnSetupPrefix(ClientPtr pClient, xConnSetupPrefix *pcsp) SwapConnSetupPrefix(pcsp, &cspT); (void)WriteToClient(pClient, sizeof(cspT), (char *) &cspT); } + +/* + * Dummy entry for ReplySwapVector[] + */ + +void +ReplyNotSwappd( + ClientPtr pClient , + int size , + void * pbuf + ) +{ + FatalError("Not implemented"); +} + diff --git a/hw/dmx/Makefile.am b/hw/dmx/Makefile.am index 9d2778ae4..9e9b39a19 100644 --- a/hw/dmx/Makefile.am +++ b/hw/dmx/Makefile.am @@ -85,6 +85,7 @@ XDMX_LIBS = \ $(GLX_LIBS) \ input/libdmxinput.a \ config/libdmxconfig.a \ + $(MAIN_LIB) \ $(XSERVER_LIBS) Xdmx_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) diff --git a/hw/vfb/Makefile.am b/hw/vfb/Makefile.am index a4a120a05..c5b49a37d 100644 --- a/hw/vfb/Makefile.am +++ b/hw/vfb/Makefile.am @@ -22,6 +22,7 @@ Xvfb_SOURCES = $(SRCS) XVFB_LIBS = \ @XVFB_LIBS@ \ libfbcmap.a \ + $(MAIN_LIB) \ $(XSERVER_LIBS) Xvfb_LDADD = $(XVFB_LIBS) $(XVFB_SYS_LIBS) $(XSERVER_SYS_LIBS) diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am index b6a534b2f..3b9ff9c3e 100644 --- a/hw/xfree86/Makefile.am +++ b/hw/xfree86/Makefile.am @@ -56,7 +56,7 @@ libxorg.c xorg.c: DISTCLEANFILES = libxorg.c xorg.c Xorg_DEPENDENCIES = libxorg.la -Xorg_LDADD = libxorg.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) +Xorg_LDADD = $(MAIN_LIB) libxorg.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) Xorg_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) diff --git a/hw/xquartz/mach-startup/Makefile.am b/hw/xquartz/mach-startup/Makefile.am index b0112949d..0c609e384 100644 --- a/hw/xquartz/mach-startup/Makefile.am +++ b/hw/xquartz/mach-startup/Makefile.am @@ -19,7 +19,7 @@ X11_bin_LDADD = \ $(top_builddir)/dix/dixfonts.lo \ $(top_builddir)/miext/rootless/librootless.la \ $(top_builddir)/hw/xquartz/pbproxy/libxpbproxy.la \ - $(DARWIN_LIBS) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) -lXplugin + $(DARWIN_LIBS) $(MAIN_LIB) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) -lXplugin X11_bin_LDFLAGS = \ -XCClinker -Objc \ diff --git a/include/dix.h b/include/dix.h index b1333dc5c..896553a60 100644 --- a/include/dix.h +++ b/include/dix.h @@ -170,6 +170,7 @@ extern _X_EXPORT void SendErrorToClient( extern _X_EXPORT void MarkClientException( ClientPtr /*client*/); +extern _X_HIDDEN Bool CreateConnectionBlock(void); /* dixutils.c */ extern _X_EXPORT void CopyISOLatin1Lowered( From 4124c465a85713fe44843a16c5e2b13ece17e9d2 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 15 Apr 2009 17:21:08 +1000 Subject: [PATCH 12/89] Add a test-suite for in-server unit-testing. This patch adds a test/ directory that contains the setup for a unit-testing suite designed for in-server unit-testing. All functions available to the X server are available to the test binaries through static linking. This test suite uses the glib testing framework. Do not use glib calls outside of the test/ directory. Signed-off-by: Peter Hutterer --- configure.ac | 12 ++++ test/Makefile.am | 39 +++++++++++ test/README | 36 ++++++++++ test/xkb.c | 173 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 260 insertions(+) create mode 100644 test/Makefile.am create mode 100644 test/README create mode 100644 test/xkb.c diff --git a/configure.ac b/configure.ac index 6628a4462..2151ed120 100644 --- a/configure.ac +++ b/configure.ac @@ -439,6 +439,9 @@ AC_ARG_ENABLE(werror, AS_HELP_STRING([--enable-werror], AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [Enable debugging (default: disabled)]), [DEBUGGING=$enableval], [DEBUGGING=no]) +AC_ARG_ENABLE(unit-tests, AS_HELP_STRING([--enable-unit-tests], + [Enable unit-tests (default: enabled)]), + [UNITTESTS=$enableval], [UNITTESTS=yes]) AC_ARG_WITH(int10, AS_HELP_STRING([--with-int10=BACKEND], [int10 backend: vm86, x86emu or stub]), [INT10="$withval"], [INT10="$DEFAULT_INT10"]) @@ -1141,6 +1144,14 @@ if test "x$DEBUGGING" = xyes; then fi AM_CONDITIONAL(DEBUG, [test "x$DEBUGGING" = xyes]) +if test "x$UNITTESTS" = xyes; then + AC_DEFINE(UNITTESTS, 1, [Enable unit tests]) + PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16]) + AC_SUBST([GLIB_LIBS]) + AC_SUBST([GLIB_CFLAGS]) +fi +AM_CONDITIONAL(UNITTESTS, [test "x$UNITTESTS" = xyes]) + AC_DEFINE(XTEST, 1, [Support XTest extension]) AC_DEFINE(XSYNC, 1, [Support XSync extension]) AC_DEFINE(XCMISC, 1, [Support XCMisc extension]) @@ -1980,5 +1991,6 @@ hw/kdrive/fbdev/Makefile hw/kdrive/linux/Makefile hw/kdrive/sdl/Makefile hw/kdrive/src/Makefile +test/Makefile xorg-server.pc ]) diff --git a/test/Makefile.am b/test/Makefile.am new file mode 100644 index 000000000..5b1daac20 --- /dev/null +++ b/test/Makefile.am @@ -0,0 +1,39 @@ +if UNITTESTS +check_PROGRAMS = xkb +check_LTLIBRARIES = libxservertest.la + +TESTS=$(check_PROGRAMS) + +AM_CFLAGS = $(DIX_CFLAGS) $(GLIB_CFLAGS) @XORG_CFLAGS@ +INCLUDES = @XORG_INCS@ +TEST_LDADD=libxservertest.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) $(GLIB_LIBS) + +xkb_LDADD=$(TEST_LDADD) + + +libxservertest_la_LIBADD = \ + $(XSERVER_LIBS) \ + $(top_builddir)/hw/xfree86/loader/libloader.la \ + $(top_builddir)/hw/xfree86/os-support/libxorgos.la \ + $(top_builddir)/hw/xfree86/common/libcommon.la \ + $(top_builddir)/hw/xfree86/parser/libxf86config.la \ + $(top_builddir)/hw/xfree86/dixmods/libdixmods.la \ + $(top_builddir)/hw/xfree86/modes/libxf86modes.la \ + $(top_builddir)/hw/xfree86/ramdac/libramdac.la \ + $(top_builddir)/hw/xfree86/ddc/libddc.la \ + $(top_builddir)/hw/xfree86/i2c/libi2c.la \ + $(top_builddir)/hw/xfree86/dixmods/libxorgxkb.la \ + $(top_builddir)/hw/xfree86/libxorg.la \ + $(top_builddir)/mi/libmi.la \ + $(top_builddir)/os/libos.la \ + @XORG_LIBS@ + +CLEANFILES=libxservertest.c + +libxservertest.c: + touch $@ + +all: + @echo "Run 'make check' to run the test suite" + +endif diff --git a/test/README b/test/README new file mode 100644 index 000000000..5759a72fd --- /dev/null +++ b/test/README @@ -0,0 +1,36 @@ + X server test suite + +This suite contains a set of tests to verify the behaviour of functions used +internally to the server. This test suite is based on glib's testing +framework [1]. + += How it works = +Through some automake abuse, we link the test programs with the same static +libraries as the Xorg binary. The test suites can then call various functions +and verify their behaviour - without the need to start the server or connect +clients. + +This testing only works for functions that do not rely on a particular state +of the X server. Unless the test suite replicates the expected state, which +may be difficult. + += How to run the tests = +Run "make check" the test directory. This will compile the tests and execute +them in the order specified in the TESTS variable in test/Makefile.am. + +Each set of tests related to a subsystem are available as a binary that can be +executed directly. For example, run "xkb" to perform some xkb-related tests. + +== Adding a new test == +When adding a new test, ensure that you add a short description of what the +test does and what the expected outcome is. If the test reproduces a +particular bug, using g_test_bug(). + +== Misc == + +The programs "gtester" and "gtester-report" may be used to generate XML/HTML +log files of tests succeeded and failed. + +--------- + +[1] http://library.gnome.org/devel/glib/stable/glib-Testing.html diff --git a/test/xkb.c b/test/xkb.c new file mode 100644 index 000000000..6fbb26a01 --- /dev/null +++ b/test/xkb.c @@ -0,0 +1,173 @@ +/** + * Copyright © 2009 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_DIX_CONFIG_H +#include +#endif + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "misc.h" +#include "inputstr.h" +#include "opaque.h" +#include "property.h" +#define XKBSRV_NEED_FILE_FUNCS +#include +#include "../xkb/xkbgeom.h" +#include +#include "xkbfile.h" +#include "../xkb/xkb.h" + +#include + +/** + * Initialize an empty XkbRMLVOSet. + * Call XkbGetRulesDflts to obtain the default ruleset. + * Compare obtained ruleset with the built-in defaults. + * + * Result: RMLVO defaults are the same as obtained. + */ +static void xkb_get_rules_test(void) +{ + XkbRMLVOSet rmlvo = { NULL}; + XkbGetRulesDflts(&rmlvo); + + + g_assert(rmlvo.rules); + g_assert(rmlvo.model); + g_assert(rmlvo.layout); + g_assert(rmlvo.variant); + g_assert(rmlvo.options); + g_assert(strcmp(rmlvo.rules, XKB_DFLT_RULES) == 0); + g_assert(strcmp(rmlvo.model, XKB_DFLT_MODEL) == 0); + g_assert(strcmp(rmlvo.layout, XKB_DFLT_LAYOUT) == 0); + g_assert(strcmp(rmlvo.variant, XKB_DFLT_VARIANT) == 0); + g_assert(strcmp(rmlvo.options, XKB_DFLT_OPTIONS) == 0); +} + +/** + * Initialize an random XkbRMLVOSet. + * Call XkbGetRulesDflts to obtain the default ruleset. + * Compare obtained ruleset with the built-in defaults. + * Result: RMLVO defaults are the same as obtained. + */ +static void xkb_set_rules_test(void) +{ + XkbRMLVOSet rmlvo = { + .rules = "test-rules", + .model = "test-model", + .layout = "test-layout", + .variant = "test-variant", + .options = "test-options" + }; + XkbRMLVOSet rmlvo_new = { NULL }; + + XkbSetRulesDflts(&rmlvo); + XkbGetRulesDflts(&rmlvo_new); + + /* XkbGetRulesDflts strdups the values */ + g_assert(rmlvo.rules != rmlvo_new.rules); + g_assert(rmlvo.model != rmlvo_new.model); + g_assert(rmlvo.layout != rmlvo_new.layout); + g_assert(rmlvo.variant != rmlvo_new.variant); + g_assert(rmlvo.options != rmlvo_new.options); + + g_assert(strcmp(rmlvo.rules, rmlvo_new.rules) == 0); + g_assert(strcmp(rmlvo.model, rmlvo_new.model) == 0); + g_assert(strcmp(rmlvo.layout, rmlvo_new.layout) == 0); + g_assert(strcmp(rmlvo.variant, rmlvo_new.variant) == 0); + g_assert(strcmp(rmlvo.options, rmlvo_new.options) == 0); +} + + +/** + * Get the default RMLVO set. + * Set the default RMLVO set. + * Get the default RMLVO set. + * Repeat the last two steps. + * + * Result: RMLVO set obtained is the same as previously set. + */ +static void xkb_set_get_rules_test(void) +{ +/* This test failed before XkbGetRulesDftlts changed to strdup. + We test this twice because the first time using XkbGetRulesDflts we obtain + the built-in defaults. The unexpected free isn't triggered until the second + XkbSetRulesDefaults. + */ + XkbRMLVOSet rmlvo = { NULL }; + XkbRMLVOSet rmlvo_backup; + + XkbGetRulesDflts(&rmlvo); + + /* pass 1 */ + XkbSetRulesDflts(&rmlvo); + XkbGetRulesDflts(&rmlvo); + + /* Make a backup copy */ + rmlvo_backup.rules = strdup(rmlvo.rules); + rmlvo_backup.layout = strdup(rmlvo.layout); + rmlvo_backup.model = strdup(rmlvo.model); + rmlvo_backup.variant = strdup(rmlvo.variant); + rmlvo_backup.options = strdup(rmlvo.options); + + /* pass 2 */ + XkbSetRulesDflts(&rmlvo); + + /* This test is iffy, because strictly we may be comparing against already + * freed memory */ + g_assert(strcmp(rmlvo.rules, rmlvo_backup.rules) == 0); + g_assert(strcmp(rmlvo.model, rmlvo_backup.model) == 0); + g_assert(strcmp(rmlvo.layout, rmlvo_backup.layout) == 0); + g_assert(strcmp(rmlvo.variant, rmlvo_backup.variant) == 0); + g_assert(strcmp(rmlvo.options, rmlvo_backup.options) == 0); + + XkbGetRulesDflts(&rmlvo); + g_assert(strcmp(rmlvo.rules, rmlvo_backup.rules) == 0); + g_assert(strcmp(rmlvo.model, rmlvo_backup.model) == 0); + g_assert(strcmp(rmlvo.layout, rmlvo_backup.layout) == 0); + g_assert(strcmp(rmlvo.variant, rmlvo_backup.variant) == 0); + g_assert(strcmp(rmlvo.options, rmlvo_backup.options) == 0); +} + + +int main(int argc, char** argv) +{ + g_test_init(&argc, &argv,NULL); + g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id="); + + g_test_add_func("/xkb/set-get-rules", xkb_set_get_rules_test); + g_test_add_func("/xkb/get-rules", xkb_get_rules_test); + g_test_add_func("/xkb/set-rules", xkb_set_rules_test); + + return g_test_run(); +} From 1127ca097cb75450bcccfc5f5d82e435de2fb5b7 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 16 Apr 2009 11:41:58 +1000 Subject: [PATCH 13/89] test: add a simple test to verify device axis intialization. Signed-off-by: Peter Hutterer --- test/Makefile.am | 4 +-- test/input.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 test/input.c diff --git a/test/Makefile.am b/test/Makefile.am index 5b1daac20..dbad93bb1 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1,5 +1,5 @@ if UNITTESTS -check_PROGRAMS = xkb +check_PROGRAMS = xkb input check_LTLIBRARIES = libxservertest.la TESTS=$(check_PROGRAMS) @@ -9,7 +9,7 @@ INCLUDES = @XORG_INCS@ TEST_LDADD=libxservertest.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) $(GLIB_LIBS) xkb_LDADD=$(TEST_LDADD) - +input_LDADD=$(TEST_LDADD) libxservertest_la_LIBADD = \ $(XSERVER_LIBS) \ diff --git a/test/input.c b/test/input.c new file mode 100644 index 000000000..bcb4c5786 --- /dev/null +++ b/test/input.c @@ -0,0 +1,83 @@ +/** + * Copyright © 2009 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_DIX_CONFIG_H +#include +#endif + +#include +#include "misc.h" +#include "resource.h" +#include +#include +#include "windowstr.h" +#include "inputstr.h" + +#include + +/** + * Init a device with axes. + * Verify values set on the device. + * + * Result: All axes set to default values (usually 0). + */ +static void dix_init_valuators(void) +{ + DeviceIntRec dev; + ValuatorClassPtr val; + const int num_axes = 2; + int i; + + + memset(&dev, 0, sizeof(DeviceIntRec)); + dev.isMaster = TRUE; /* claim it's a master to stop ptracccel */ + + g_assert(InitValuatorClassDeviceStruct(NULL, 0, 0, 0) == FALSE); + g_assert(InitValuatorClassDeviceStruct(&dev, num_axes, 0, Absolute)); + + val = dev.valuator; + g_assert(val); + g_assert(val->numAxes == num_axes); + g_assert(val->numMotionEvents == 0); + g_assert(val->mode == Absolute); + g_assert(val->axisVal); + + for (i = 0; i < num_axes; i++) + { + g_assert(val->axisVal[i] == 0); + g_assert(val->axes->min_value == NO_AXIS_LIMITS); + g_assert(val->axes->max_value == NO_AXIS_LIMITS); + } + + g_assert(dev.last.numValuators == num_axes); +} + +int main(int argc, char** argv) +{ + g_test_init(&argc, &argv,NULL); + g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id="); + + g_test_add_func("/dix/input/init-valuators", dix_init_valuators); + + return g_test_run(); +} From dc2767d1c5db60385867c76ba2de507fe0cb8a90 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 21 Apr 2009 22:18:23 +1000 Subject: [PATCH 14/89] test: add InternalEvent to core event conversion tests. Signed-off-by: Peter Hutterer --- test/input.c | 144 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) diff --git a/test/input.c b/test/input.c index bcb4c5786..eb0543eda 100644 --- a/test/input.c +++ b/test/input.c @@ -32,6 +32,7 @@ #include #include "windowstr.h" #include "inputstr.h" +#include "eventconvert.h" #include @@ -72,12 +73,155 @@ static void dix_init_valuators(void) g_assert(dev.last.numValuators == num_axes); } + +/** + * Convert various internal events to the matching core event and verify the + * parameters. + */ +static void dix_event_to_core(int type) +{ + DeviceEvent ev; + xEvent core; + int time; + int x, y; + int rc; + int state; + int detail; + + /* EventToCore memsets the event to 0 */ +#define test_event() \ + g_assert(rc == Success); \ + g_assert(core.u.u.type == type); \ + g_assert(core.u.u.detail == detail); \ + g_assert(core.u.keyButtonPointer.time == time); \ + g_assert(core.u.keyButtonPointer.rootX == x); \ + g_assert(core.u.keyButtonPointer.rootY == y); \ + g_assert(core.u.keyButtonPointer.state == state); \ + g_assert(core.u.keyButtonPointer.eventX == 0); \ + g_assert(core.u.keyButtonPointer.eventY == 0); \ + g_assert(core.u.keyButtonPointer.root == 0); \ + g_assert(core.u.keyButtonPointer.event == 0); \ + g_assert(core.u.keyButtonPointer.child == 0); \ + g_assert(core.u.keyButtonPointer.sameScreen == FALSE); + + x = 0; + y = 0; + time = 12345; + state = 0; + detail = 0; + + ev.header = 0xFF; + ev.length = sizeof(DeviceEvent); + ev.time = time; + ev.root_y = x; + ev.root_x = y; + ev.corestate = state; + ev.detail.key = detail; + + ev.type = type; + ev.detail.key = 0; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + x = 1; + y = 2; + ev.root_x = x; + ev.root_y = y; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + x = 0x7FFF; + y = 0x7FFF; + ev.root_x = x; + ev.root_y = y; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + x = 0x8000; /* too high */ + y = 0x8000; /* too high */ + ev.root_x = x; + ev.root_y = y; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(core.u.keyButtonPointer.rootX != x); + g_assert(core.u.keyButtonPointer.rootY != y); + + x = 0x7FFF; + y = 0x7FFF; + ev.root_x = x; + ev.root_y = y; + time = 0; + ev.time = time; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + detail = 1; + ev.detail.key = detail; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + detail = 0xFF; /* highest value */ + ev.detail.key = detail; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + detail = 0xFFF; /* too big */ + ev.detail.key = detail; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(rc == BadMatch); + + detail = 0xFF; /* too big */ + ev.detail.key = detail; + state = 0xFFFF; /* highest value */ + ev.corestate = state; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + state = 0x10000; /* too big */ + ev.corestate = state; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(core.u.keyButtonPointer.state != state); + g_assert(core.u.keyButtonPointer.state == (state & 0xFFFF)); + +#undef test_event +} + +static void dix_event_to_core_conversion(void) +{ + DeviceEvent ev; + xEvent core; + int rc; + + ev.header = 0xFF; + ev.length = sizeof(DeviceEvent); + + ev.type = 0; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(rc == BadImplementation); + + ev.type = 1; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(rc == BadImplementation); + + ev.type = ET_ProximityOut + 1; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(rc == BadImplementation); + + dix_event_to_core(ET_KeyPress); + dix_event_to_core(ET_KeyRelease); + dix_event_to_core(ET_ButtonPress); + dix_event_to_core(ET_ButtonRelease); + dix_event_to_core(ET_Motion); + dix_event_to_core(ET_ProximityIn); + dix_event_to_core(ET_ProximityOut); +} + int main(int argc, char** argv) { g_test_init(&argc, &argv,NULL); g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id="); g_test_add_func("/dix/input/init-valuators", dix_init_valuators); + g_test_add_func("/dix/input/event-core-conversion", dix_event_to_core_conversion); return g_test_run(); } From 737b49199a05299486064e6e762cf2a2f6f95be6 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 9 Apr 2009 15:40:24 +1000 Subject: [PATCH 15/89] xfree86: restore default off for DontZap Zapping is triggered by xkb these days, so note in the man page that it's the Terminate_Server action. Since it's XKB, personal preferences towards or against zapping should be achieved through xkb rulesets. If Terminate_Server is not in the xkb actions, then we can't zap anyway and we don't need a default of DontZap "on". This patch restores the old meaning of DontZap - disallow zapping altogether, regardless of XKB's current keymap. Ideally, this patch should be accompanied by b0f64bdab00db652e in xkeyboard-config. Signed-off-by: Peter Hutterer --- doc/Xserver.man.pre | 2 +- hw/xfree86/common/xf86Config.c | 5 ++--- hw/xfree86/doc/man/xorg.conf.man.pre | 11 +++++------ 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/doc/Xserver.man.pre b/doc/Xserver.man.pre index e9a3b9c7d..e2673f7be 100644 --- a/doc/Xserver.man.pre +++ b/doc/Xserver.man.pre @@ -219,7 +219,7 @@ turns on auto-repeat. starts the stipple with the classic stipple and cursor visible. The default is to start with a black root window, and to suppress display of the cursor until the first time an application calls XDefineCursor(). For the Xorg -server, this also changes the default for the DontZap option to FALSE. For +server, this also sets the default for the DontZap option to FALSE. For kdrive servers, this implies -zap. .TP 8 .B \-s \fIminutes\fP diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c index 7ea6197de..8b07566be 100644 --- a/hw/xfree86/common/xf86Config.c +++ b/hw/xfree86/common/xf86Config.c @@ -726,7 +726,7 @@ static OptionInfoRec FlagOptions[] = { { FLAG_DONTVTSWITCH, "DontVTSwitch", OPTV_BOOLEAN, {0}, FALSE }, { FLAG_DONTZAP, "DontZap", OPTV_BOOLEAN, - {0}, TRUE }, + {0}, FALSE }, { FLAG_DONTZOOM, "DontZoom", OPTV_BOOLEAN, {0}, FALSE }, { FLAG_DISABLEVIDMODE, "DisableVidModeExtension", OPTV_BOOLEAN, @@ -834,8 +834,7 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts) xf86GetOptValBool(FlagOptions, FLAG_NOTRAPSIGNALS, &xf86Info.notrapSignals); xf86GetOptValBool(FlagOptions, FLAG_DONTVTSWITCH, &xf86Info.dontVTSwitch); - if (!xf86GetOptValBool(FlagOptions, FLAG_DONTZAP, &xf86Info.dontZap)) - xf86Info.dontZap = !party_like_its_1989; + xf86GetOptValBool(FlagOptions, FLAG_DONTZAP, &xf86Info.dontZap); xf86GetOptValBool(FlagOptions, FLAG_DONTZOOM, &xf86Info.dontZoom); xf86GetOptValBool(FlagOptions, FLAG_IGNORE_ABI, &xf86Info.ignoreABI); diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre index 7349def0d..fbb2c6b73 100644 --- a/hw/xfree86/doc/man/xorg.conf.man.pre +++ b/hw/xfree86/doc/man/xorg.conf.man.pre @@ -464,12 +464,11 @@ Default: off. .TP 7 .BI "Option \*qDontZap\*q \*q" boolean \*q This disallows the use of the -.B Ctrl+Alt+Backspace -sequence. -That sequence is normally used to terminate the __xservername__ server. -When this option is enabled (as per default), that key sequence has no -special meaning. -Default: on. +.B Terminate_Server +XKB action (usually on Ctrl+Alt+Backspace, depending on XKB options). +This action is normally used to terminate the __xservername__ server. +When this option is enabled, the action has no effect. +Default: off. .TP 7 .BI "Option \*qDontZoom\*q \*q" boolean \*q This disallows the use of the From 1abe0ee3da5e1268c7315f841d31337ea6524cf0 Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Tue, 28 Apr 2009 23:51:40 -0400 Subject: [PATCH 16/89] kdrive: fix Xvfb build with separate libmain. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 2151ed120..3fc4dd405 100644 --- a/configure.ac +++ b/configure.ac @@ -1843,7 +1843,7 @@ if test "$KDRIVE" = yes; then ;; esac KDRIVE_STUB_LIB='$(top_builddir)/hw/kdrive/src/libkdrivestubs.la' - KDRIVE_LOCAL_LIBS="$DIX_LIB $MAIN_LIB $KDRIVE_LIB $KDRIVE_STUB_LIB $CONFIG_LIB" + KDRIVE_LOCAL_LIBS="$MAIN_LIB $DIX_LIB $KDRIVE_LIB $KDRIVE_STUB_LIB $CONFIG_LIB" KDRIVE_LOCAL_LIBS="$KDRIVE_LOCAL_LIBS $FB_LIB $MI_LIB $KDRIVE_PURE_LIBS" KDRIVE_LOCAL_LIBS="$KDRIVE_LOCAL_LIBS $KDRIVE_OS_LIB $OS_LIB" KDRIVE_LIBS="$TSLIB_LIBS $KDRIVE_LOCAL_LIBS $XSERVER_SYS_LIBS $GLX_SYS_LIBS" From 57aff88c7d0761e590806d07bee1c9410680c89f Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Wed, 29 Apr 2009 01:04:37 -0400 Subject: [PATCH 17/89] Fix most remaining deprecated resource lookups. Callsites updated to use dixLookupResourceBy{Type,Class}. TODO: Audit access modes to make sure they reflect the usage. --- Xext/panoramiX.c | 7 +- Xext/panoramiX.h | 2 - Xext/panoramiXprocs.c | 671 +++++++++++++++------------ Xext/saver.c | 54 ++- Xext/security.c | 11 +- Xext/shape.c | 75 +-- Xext/shm.c | 34 +- Xext/sync.c | 82 ++-- Xext/xf86bigfont.c | 14 +- Xext/xvdisp.c | 234 ++++------ Xext/xvdix.h | 18 +- Xext/xvmain.c | 9 +- Xext/xvmc.c | 57 +-- Xi/chdevcur.c | 10 +- Xi/extgrbdev.c | 14 +- damageext/damageextint.h | 9 +- dbe/dbe.c | 33 +- dix/colormap.c | 24 +- dix/cursor.c | 5 +- dix/deprecated.c | 8 +- dix/dispatch.c | 9 +- dix/dixfonts.c | 61 +-- dix/dixutils.c | 11 +- dix/events.c | 13 +- dix/resource.c | 22 +- dix/window.c | 56 ++- fb/fbcmap.c | 6 +- hw/kdrive/src/kcmap.c | 3 +- hw/vfb/InitOutput.c | 6 +- hw/xfree86/common/xf86cmap.c | 4 +- hw/xfree86/dixmods/extmod/xf86dga2.c | 18 +- hw/xfree86/dri/dri.c | 5 +- hw/xfree86/vgahw/vgaCmap.c | 4 +- hw/xnest/Color.c | 22 +- hw/xnest/Window.c | 9 +- mi/micmap.c | 6 +- mi/miexpose.c | 2 +- randr/randr.c | 6 +- randr/randrstr.h | 32 +- randr/rrcrtc.c | 61 +-- randr/rrdispatch.c | 7 +- randr/rrmode.c | 40 +- randr/rroutput.c | 37 +- randr/rrproperty.c | 33 +- record/record.c | 9 +- render/picture.c | 5 +- render/picturestr.h | 9 +- render/render.c | 170 +++---- xfixes/cursor.c | 7 +- xfixes/select.c | 6 +- 50 files changed, 1015 insertions(+), 1035 deletions(-) diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c index 767f6035e..4ab6f6bdd 100644 --- a/Xext/panoramiX.c +++ b/Xext/panoramiX.c @@ -354,9 +354,12 @@ PanoramiXRes * PanoramiXFindIDByScrnum(RESTYPE type, XID id, int screen) { PanoramiXSearchData data; + pointer val; - if(!screen) - return LookupIDByType(id, type); + if(!screen) { + dixLookupResourceByType(&val, id, type, serverClient, DixReadAccess); + return val; + } data.screen = screen; data.id = id; diff --git a/Xext/panoramiX.h b/Xext/panoramiX.h index d413ff9cf..cca4c5249 100644 --- a/Xext/panoramiX.h +++ b/Xext/panoramiX.h @@ -97,6 +97,4 @@ typedef struct { #define IS_SHARED_PIXMAP(r) (((r)->type == XRT_PIXMAP) && (r)->u.pix.shared) -#define SKIP_FAKE_WINDOW(a) if(!LookupIDByType(a, XRT_WINDOW)) return - #endif /* _PANORAMIX_H_ */ diff --git a/Xext/panoramiXprocs.c b/Xext/panoramiXprocs.c index 72a207ab8..8b51009b3 100644 --- a/Xext/panoramiXprocs.c +++ b/Xext/panoramiXprocs.c @@ -67,7 +67,7 @@ int PanoramiXCreateWindow(ClientPtr client) PanoramiXRes *cmap = NULL; REQUEST(xCreateWindowReq); int pback_offset = 0, pbord_offset = 0, cmap_offset = 0; - int result = 0, len, j; + int result, len, j; int orig_x, orig_y; XID orig_visual, tmp; Bool parentIsRoot; @@ -78,9 +78,10 @@ int PanoramiXCreateWindow(ClientPtr client) if (Ones(stuff->mask) != len) return BadLength; - if (!(parent = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->parent, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&parent, stuff->parent, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; if(stuff->class == CopyFromParent) stuff->class = parent->u.win.class; @@ -92,27 +93,30 @@ int PanoramiXCreateWindow(ClientPtr client) pback_offset = Ones((Mask)stuff->mask & (CWBackPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pback_offset); if ((tmp != None) && (tmp != ParentRelative)) { - if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&backPix, tmp, + XRT_PIXMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & CWBorderPixmap) { pbord_offset = Ones((Mask)stuff->mask & (CWBorderPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pbord_offset); if (tmp != CopyFromParent) { - if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&bordPix, tmp, + XRT_PIXMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & CWColormap) { cmap_offset = Ones((Mask)stuff->mask & (CWColormap - 1)); tmp = *((CARD32 *) &stuff[1] + cmap_offset); if ((tmp != CopyFromParent) && (tmp != None)) { - if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_COLORMAP, DixReadAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, tmp, + XRT_COLORMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; } } @@ -170,7 +174,7 @@ int PanoramiXChangeWindowAttributes(ClientPtr client) PanoramiXRes *cmap = NULL; REQUEST(xChangeWindowAttributesReq); int pback_offset = 0, pbord_offset = 0, cmap_offset = 0; - int result = 0, len, j; + int result, len, j; XID tmp; REQUEST_AT_LEAST_SIZE(xChangeWindowAttributesReq); @@ -179,9 +183,10 @@ int PanoramiXChangeWindowAttributes(ClientPtr client) if (Ones(stuff->valueMask) != len) return BadLength; - if (!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; if((win->u.win.class == InputOnly) && (stuff->valueMask & (~INPUTONLY_LEGAL_MASK))) @@ -191,27 +196,30 @@ int PanoramiXChangeWindowAttributes(ClientPtr client) pback_offset = Ones((Mask)stuff->valueMask & (CWBackPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pback_offset); if ((tmp != None) && (tmp != ParentRelative)) { - if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&backPix, tmp, + XRT_PIXMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->valueMask & CWBorderPixmap) { pbord_offset = Ones((Mask)stuff->valueMask & (CWBorderPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pbord_offset); if (tmp != CopyFromParent) { - if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&bordPix, tmp, + XRT_PIXMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->valueMask & CWColormap) { cmap_offset = Ones((Mask)stuff->valueMask & (CWColormap - 1)); tmp = *((CARD32 *) &stuff[1] + cmap_offset); if ((tmp != CopyFromParent) && (tmp != None)) { - if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_COLORMAP, DixReadAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, tmp, + XRT_COLORMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; } } @@ -233,14 +241,15 @@ int PanoramiXChangeWindowAttributes(ClientPtr client) int PanoramiXDestroyWindow(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixDestroyAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, XRT_WINDOW, + client, DixDestroyAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = win->info[j].id; @@ -258,14 +267,15 @@ int PanoramiXDestroyWindow(ClientPtr client) int PanoramiXDestroySubwindows(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixDestroyAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, XRT_WINDOW, + client, DixDestroyAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = win->info[j].id; @@ -283,14 +293,15 @@ int PanoramiXDestroySubwindows(ClientPtr client) int PanoramiXChangeSaveSet(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xChangeSaveSetReq); REQUEST_SIZE_MATCH(xChangeSaveSetReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_BACKWARD(j) { stuff->window = win->info[j].id; @@ -305,20 +316,22 @@ int PanoramiXChangeSaveSet(ClientPtr client) int PanoramiXReparentWindow(ClientPtr client) { PanoramiXRes *win, *parent; - int result = 0, j; + int result, j; int x, y; Bool parentIsRoot; REQUEST(xReparentWindowReq); REQUEST_SIZE_MATCH(xReparentWindowReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; - if(!(parent = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->parent, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&parent, stuff->parent, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; x = stuff->x; y = stuff->y; @@ -342,14 +355,15 @@ int PanoramiXReparentWindow(ClientPtr client) int PanoramiXMapWindow(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_FORWARD(j) { stuff->id = win->info[j].id; @@ -364,14 +378,15 @@ int PanoramiXMapWindow(ClientPtr client) int PanoramiXMapSubwindows(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_FORWARD(j) { stuff->id = win->info[j].id; @@ -386,14 +401,15 @@ int PanoramiXMapSubwindows(ClientPtr client) int PanoramiXUnmapWindow(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_FORWARD(j) { stuff->id = win->info[j].id; @@ -408,14 +424,15 @@ int PanoramiXUnmapWindow(ClientPtr client) int PanoramiXUnmapSubwindows(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_FORWARD(j) { stuff->id = win->info[j].id; @@ -432,7 +449,7 @@ int PanoramiXConfigureWindow(ClientPtr client) PanoramiXRes *win; PanoramiXRes *sib = NULL; WindowPtr pWin; - int result = 0, j, len, sib_offset = 0, x = 0, y = 0; + int result, j, len, sib_offset = 0, x = 0, y = 0; int x_offset = -1; int y_offset = -1; REQUEST(xConfigureWindowReq); @@ -444,21 +461,24 @@ int PanoramiXConfigureWindow(ClientPtr client) return BadLength; /* because we need the parent */ - if (!(pWin = (WindowPtr)SecurityLookupIDByType( - client, stuff->window, RT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&pWin, stuff->window, + RT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; - if (!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; if ((Mask)stuff->mask & CWSibling) { XID tmp; sib_offset = Ones((Mask)stuff->mask & (CWSibling - 1)); if ((tmp = *((CARD32 *) &stuff[1] + sib_offset))) { - if(!(sib = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&sib, tmp, XRT_WINDOW, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; } } @@ -496,14 +516,15 @@ int PanoramiXConfigureWindow(ClientPtr client) int PanoramiXCirculateWindow(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xCirculateWindowReq); REQUEST_SIZE_MATCH(xCirculateWindowReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_FORWARD(j) { stuff->window = win->info[j].id; @@ -634,15 +655,16 @@ int PanoramiXTranslateCoords(ClientPtr client) int PanoramiXCreatePixmap(ClientPtr client) { PanoramiXRes *refDraw, *newPix; - int result = 0, j; + int result, j; REQUEST(xCreatePixmapReq); REQUEST_SIZE_MATCH(xCreatePixmapReq); client->errorValue = stuff->pid; - if(!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixReadAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&refDraw, stuff->drawable, + XRC_DRAWABLE, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(!(newPix = xalloc(sizeof(PanoramiXRes)))) return BadAlloc; @@ -672,16 +694,17 @@ int PanoramiXCreatePixmap(ClientPtr client) int PanoramiXFreePixmap(ClientPtr client) { PanoramiXRes *pix; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); client->errorValue = stuff->id; - if(!(pix = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_PIXMAP, DixDestroyAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&pix, stuff->id, XRT_PIXMAP, + client, DixDestroyAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = pix->info[j].id; @@ -705,7 +728,7 @@ int PanoramiXCreateGC(ClientPtr client) PanoramiXRes *clip = NULL; REQUEST(xCreateGCReq); int tile_offset = 0, stip_offset = 0, clip_offset = 0; - int result = 0, len, j; + int result, len, j; XID tmp; REQUEST_AT_LEAST_SIZE(xCreateGCReq); @@ -715,32 +738,36 @@ int PanoramiXCreateGC(ClientPtr client) if (Ones(stuff->mask) != len) return BadLength; - if (!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixReadAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&refDraw, stuff->drawable, + XRC_DRAWABLE, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if ((Mask)stuff->mask & GCTile) { tile_offset = Ones((Mask)stuff->mask & (GCTile - 1)); if ((tmp = *((CARD32 *) &stuff[1] + tile_offset))) { - if(!(tile = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&tile, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & GCStipple) { stip_offset = Ones((Mask)stuff->mask & (GCStipple - 1)); if ((tmp = *((CARD32 *) &stuff[1] + stip_offset))) { - if(!(stip = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&stip, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & GCClipMask) { clip_offset = Ones((Mask)stuff->mask & (GCClipMask - 1)); if ((tmp = *((CARD32 *) &stuff[1] + clip_offset))) { - if(!(clip = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&clip, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } @@ -781,7 +808,7 @@ int PanoramiXChangeGC(ClientPtr client) PanoramiXRes *clip = NULL; REQUEST(xChangeGCReq); int tile_offset = 0, stip_offset = 0, clip_offset = 0; - int result = 0, len, j; + int result, len, j; XID tmp; REQUEST_AT_LEAST_SIZE(xChangeGCReq); @@ -790,32 +817,36 @@ int PanoramiXChangeGC(ClientPtr client) if (Ones(stuff->mask) != len) return BadLength; - if (!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; if ((Mask)stuff->mask & GCTile) { tile_offset = Ones((Mask)stuff->mask & (GCTile - 1)); if ((tmp = *((CARD32 *) &stuff[1] + tile_offset))) { - if(!(tile = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&tile, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & GCStipple) { stip_offset = Ones((Mask)stuff->mask & (GCStipple - 1)); if ((tmp = *((CARD32 *) &stuff[1] + stip_offset))) { - if(!(stip = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&stip, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & GCClipMask) { clip_offset = Ones((Mask)stuff->mask & (GCClipMask - 1)); if ((tmp = *((CARD32 *) &stuff[1] + clip_offset))) { - if(!(clip = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&clip, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } @@ -839,18 +870,20 @@ int PanoramiXChangeGC(ClientPtr client) int PanoramiXCopyGC(ClientPtr client) { PanoramiXRes *srcGC, *dstGC; - int result = 0, j; + int result, j; REQUEST(xCopyGCReq); REQUEST_SIZE_MATCH(xCopyGCReq); - if(!(srcGC = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->srcGC, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&srcGC, stuff->srcGC, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; - if(!(dstGC = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->dstGC, XRT_GC, DixWriteAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&dstGC, stuff->dstGC, XRT_GC, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; FOR_NSCREENS(j) { stuff->srcGC = srcGC->info[j].id; @@ -866,14 +899,15 @@ int PanoramiXCopyGC(ClientPtr client) int PanoramiXSetDashes(ClientPtr client) { PanoramiXRes *gc; - int result = 0, j; + int result, j; REQUEST(xSetDashesReq); REQUEST_FIXED_SIZE(xSetDashesReq, stuff->nDashes); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixWriteAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; FOR_NSCREENS_BACKWARD(j) { stuff->gc = gc->info[j].id; @@ -888,14 +922,15 @@ int PanoramiXSetDashes(ClientPtr client) int PanoramiXSetClipRectangles(ClientPtr client) { PanoramiXRes *gc; - int result = 0, j; + int result, j; REQUEST(xSetClipRectanglesReq); REQUEST_AT_LEAST_SIZE(xSetClipRectanglesReq); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixWriteAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; FOR_NSCREENS_BACKWARD(j) { stuff->gc = gc->info[j].id; @@ -910,14 +945,15 @@ int PanoramiXSetClipRectangles(ClientPtr client) int PanoramiXFreeGC(ClientPtr client) { PanoramiXRes *gc; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_GC, DixDestroyAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->id, XRT_GC, + client, DixDestroyAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = gc->info[j].id; @@ -935,15 +971,16 @@ int PanoramiXFreeGC(ClientPtr client) int PanoramiXClearToBackground(ClientPtr client) { PanoramiXRes *win; - int result = 0, j, x, y; + int result, j, x, y; Bool isRoot; REQUEST(xClearAreaReq); REQUEST_SIZE_MATCH(xClearAreaReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; x = stuff->x; y = stuff->y; @@ -974,7 +1011,7 @@ int PanoramiXClearToBackground(ClientPtr client) int PanoramiXCopyArea(ClientPtr client) { - int j, result = 0, srcx, srcy, dstx, dsty; + int j, result, srcx, srcy, dstx, dsty; PanoramiXRes *gc, *src, *dst; Bool srcIsRoot = FALSE; Bool dstIsRoot = FALSE; @@ -983,24 +1020,27 @@ int PanoramiXCopyArea(ClientPtr client) REQUEST_SIZE_MATCH(xCopyAreaReq); - if(!(src = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->srcDrawable, XRC_DRAWABLE, DixReadAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&src, stuff->srcDrawable, + XRC_DRAWABLE, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; srcShared = IS_SHARED_PIXMAP(src); - if(!(dst = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->dstDrawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&dst, stuff->dstDrawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; dstShared = IS_SHARED_PIXMAP(dst); if(dstShared && srcShared) return (* SavedProcVector[X_CopyArea])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; if((dst->type == XRT_WINDOW) && dst->u.win.root) dstIsRoot = TRUE; @@ -1139,24 +1179,27 @@ int PanoramiXCopyPlane(ClientPtr client) REQUEST_SIZE_MATCH(xCopyPlaneReq); - if(!(src = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->srcDrawable, XRC_DRAWABLE, DixReadAccess))) - return BadDrawable; + rc = dixLookupResourceByClass((pointer *)&src, stuff->srcDrawable, + XRC_DRAWABLE, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? BadDrawable : rc; srcShared = IS_SHARED_PIXMAP(src); - if(!(dst = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->dstDrawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + rc = dixLookupResourceByClass((pointer *)&dst, stuff->dstDrawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? BadDrawable : rc; dstShared = IS_SHARED_PIXMAP(dst); if(dstShared && srcShared) return (* SavedProcVector[X_CopyPlane])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + rc = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? BadGC : rc; if((dst->type == XRT_WINDOW) && dst->u.win.root) dstIsRoot = TRUE; @@ -1235,23 +1278,25 @@ int PanoramiXCopyPlane(ClientPtr client) int PanoramiXPolyPoint(ClientPtr client) { PanoramiXRes *gc, *draw; - int result = 0, npoint, j; + int result, npoint, j; xPoint *origPts; Bool isRoot; REQUEST(xPolyPointReq); REQUEST_AT_LEAST_SIZE(xPolyPointReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyPoint])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; npoint = ((client->req_len << 2) - sizeof(xPolyPointReq)) >> 2; @@ -1293,23 +1338,25 @@ int PanoramiXPolyPoint(ClientPtr client) int PanoramiXPolyLine(ClientPtr client) { PanoramiXRes *gc, *draw; - int result = 0, npoint, j; + int result, npoint, j; xPoint *origPts; Bool isRoot; REQUEST(xPolyLineReq); REQUEST_AT_LEAST_SIZE(xPolyLineReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyLine])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; npoint = ((client->req_len << 2) - sizeof(xPolyLineReq)) >> 2; @@ -1350,7 +1397,7 @@ int PanoramiXPolyLine(ClientPtr client) int PanoramiXPolySegment(ClientPtr client) { - int result = 0, nsegs, i, j; + int result, nsegs, i, j; PanoramiXRes *gc, *draw; xSegment *origSegs; Bool isRoot; @@ -1358,16 +1405,18 @@ int PanoramiXPolySegment(ClientPtr client) REQUEST_AT_LEAST_SIZE(xPolySegmentReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolySegment])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1411,7 +1460,7 @@ int PanoramiXPolySegment(ClientPtr client) int PanoramiXPolyRectangle(ClientPtr client) { - int result = 0, nrects, i, j; + int result, nrects, i, j; PanoramiXRes *gc, *draw; Bool isRoot; xRectangle *origRecs; @@ -1419,17 +1468,18 @@ int PanoramiXPolyRectangle(ClientPtr client) REQUEST_AT_LEAST_SIZE(xPolyRectangleReq); - - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyRectangle])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1472,7 +1522,7 @@ int PanoramiXPolyRectangle(ClientPtr client) int PanoramiXPolyArc(ClientPtr client) { - int result = 0, narcs, i, j; + int result, narcs, i, j; PanoramiXRes *gc, *draw; Bool isRoot; xArc *origArcs; @@ -1480,16 +1530,18 @@ int PanoramiXPolyArc(ClientPtr client) REQUEST_AT_LEAST_SIZE(xPolyArcReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyArc])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1530,7 +1582,7 @@ int PanoramiXPolyArc(ClientPtr client) int PanoramiXFillPoly(ClientPtr client) { - int result = 0, count, j; + int result, count, j; PanoramiXRes *gc, *draw; Bool isRoot; DDXPointPtr locPts; @@ -1538,16 +1590,18 @@ int PanoramiXFillPoly(ClientPtr client) REQUEST_AT_LEAST_SIZE(xFillPolyReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_FillPoly])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1589,7 +1643,7 @@ int PanoramiXFillPoly(ClientPtr client) int PanoramiXPolyFillRectangle(ClientPtr client) { - int result = 0, things, i, j; + int result, things, i, j; PanoramiXRes *gc, *draw; Bool isRoot; xRectangle *origRects; @@ -1597,16 +1651,18 @@ int PanoramiXPolyFillRectangle(ClientPtr client) REQUEST_AT_LEAST_SIZE(xPolyFillRectangleReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyFillRectangle])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1650,22 +1706,24 @@ int PanoramiXPolyFillArc(ClientPtr client) { PanoramiXRes *gc, *draw; Bool isRoot; - int result = 0, narcs, i, j; + int result, narcs, i, j; xArc *origArcs; REQUEST(xPolyFillArcReq); REQUEST_AT_LEAST_SIZE(xPolyFillArcReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyFillArc])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1709,21 +1767,23 @@ int PanoramiXPutImage(ClientPtr client) { PanoramiXRes *gc, *draw; Bool isRoot; - int j, result = 0, orig_x, orig_y; + int j, result, orig_x, orig_y; REQUEST(xPutImageReq); REQUEST_AT_LEAST_SIZE(xPutImageReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PutImage])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1765,9 +1825,10 @@ int PanoramiXGetImage(ClientPtr client) return(BadValue); } - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + rc = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? BadDrawable : rc; if(draw->type == XRT_PIXMAP) return (*SavedProcVector[X_GetImage])(client); @@ -1906,22 +1967,24 @@ PanoramiXPolyText8(ClientPtr client) { PanoramiXRes *gc, *draw; Bool isRoot; - int result = 0, j; + int result, j; int orig_x, orig_y; REQUEST(xPolyTextReq); REQUEST_AT_LEAST_SIZE(xPolyTextReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyText8])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1945,22 +2008,24 @@ PanoramiXPolyText16(ClientPtr client) { PanoramiXRes *gc, *draw; Bool isRoot; - int result = 0, j; + int result, j; int orig_x, orig_y; REQUEST(xPolyTextReq); REQUEST_AT_LEAST_SIZE(xPolyTextReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyText16])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1982,7 +2047,7 @@ PanoramiXPolyText16(ClientPtr client) int PanoramiXImageText8(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *gc, *draw; Bool isRoot; int orig_x, orig_y; @@ -1990,16 +2055,18 @@ int PanoramiXImageText8(ClientPtr client) REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_ImageText8])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -2021,7 +2088,7 @@ int PanoramiXImageText8(ClientPtr client) int PanoramiXImageText16(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *gc, *draw; Bool isRoot; int orig_x, orig_y; @@ -2029,16 +2096,18 @@ int PanoramiXImageText16(ClientPtr client) REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars << 1); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_ImageText16])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -2062,14 +2131,15 @@ int PanoramiXImageText16(ClientPtr client) int PanoramiXCreateColormap(ClientPtr client) { PanoramiXRes *win, *newCmap; - int result = 0, j, orig_visual; + int result, j, orig_visual; REQUEST(xCreateColormapReq); REQUEST_SIZE_MATCH(xCreateColormapReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; if(!(newCmap = xalloc(sizeof(PanoramiXRes)))) return BadAlloc; @@ -2100,16 +2170,17 @@ int PanoramiXCreateColormap(ClientPtr client) int PanoramiXFreeColormap(ClientPtr client) { PanoramiXRes *cmap; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); client->errorValue = stuff->id; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_COLORMAP, DixDestroyAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->id, XRT_COLORMAP, + client, DixDestroyAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = cmap->info[j].id; @@ -2128,17 +2199,18 @@ int PanoramiXCopyColormapAndFree(ClientPtr client) { PanoramiXRes *cmap, *newCmap; - int result = 0, j; + int result, j; REQUEST(xCopyColormapAndFreeReq); REQUEST_SIZE_MATCH(xCopyColormapAndFreeReq); client->errorValue = stuff->srcCmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->srcCmap, XRT_COLORMAP, - DixReadAccess | DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->srcCmap, + XRT_COLORMAP, client, + DixReadAccess | DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; if(!(newCmap = xalloc(sizeof(PanoramiXRes)))) return BadAlloc; @@ -2167,16 +2239,17 @@ PanoramiXCopyColormapAndFree(ClientPtr client) int PanoramiXInstallColormap(ClientPtr client) { REQUEST(xResourceReq); - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST_SIZE_MATCH(xResourceReq); client->errorValue = stuff->id; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_COLORMAP, DixReadAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->id, XRT_COLORMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->id = cmap->info[j].id; @@ -2190,16 +2263,17 @@ int PanoramiXInstallColormap(ClientPtr client) int PanoramiXUninstallColormap(ClientPtr client) { REQUEST(xResourceReq); - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST_SIZE_MATCH(xResourceReq); client->errorValue = stuff->id; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_COLORMAP, DixReadAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->id, XRT_COLORMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = cmap->info[j].id; @@ -2212,7 +2286,7 @@ int PanoramiXUninstallColormap(ClientPtr client) int PanoramiXAllocColor(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xAllocColorReq); @@ -2220,9 +2294,10 @@ int PanoramiXAllocColor(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; @@ -2235,7 +2310,7 @@ int PanoramiXAllocColor(ClientPtr client) int PanoramiXAllocNamedColor(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xAllocNamedColorReq); @@ -2243,9 +2318,10 @@ int PanoramiXAllocNamedColor(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; @@ -2258,7 +2334,7 @@ int PanoramiXAllocNamedColor(ClientPtr client) int PanoramiXAllocColorCells(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xAllocColorCellsReq); @@ -2266,9 +2342,10 @@ int PanoramiXAllocColorCells(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; @@ -2281,7 +2358,7 @@ int PanoramiXAllocColorCells(ClientPtr client) int PanoramiXAllocColorPlanes(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xAllocColorPlanesReq); @@ -2289,9 +2366,10 @@ int PanoramiXAllocColorPlanes(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; @@ -2305,7 +2383,7 @@ int PanoramiXAllocColorPlanes(ClientPtr client) int PanoramiXFreeColors(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xFreeColorsReq); @@ -2313,9 +2391,10 @@ int PanoramiXFreeColors(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j) { stuff->cmap = cmap->info[j].id; @@ -2327,7 +2406,7 @@ int PanoramiXFreeColors(ClientPtr client) int PanoramiXStoreColors(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xStoreColorsReq); @@ -2335,9 +2414,10 @@ int PanoramiXStoreColors(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; @@ -2350,7 +2430,7 @@ int PanoramiXStoreColors(ClientPtr client) int PanoramiXStoreNamedColor(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xStoreNamedColorReq); @@ -2358,9 +2438,10 @@ int PanoramiXStoreNamedColor(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; diff --git a/Xext/saver.c b/Xext/saver.c index 357c2155f..b59f769d5 100644 --- a/Xext/saver.c +++ b/Xext/saver.c @@ -533,11 +533,14 @@ UninstallSaverColormap (ScreenPtr pScreen) { SetupScreen(pScreen); ColormapPtr pCmap; + int rc; if (pPriv && pPriv->installedMap != None) { - pCmap = (ColormapPtr) LookupIDByType (pPriv->installedMap, RT_COLORMAP); - if (pCmap) + rc = dixLookupResourceByType((pointer *)&pCmap, pPriv->installedMap, + RT_COLORMAP, serverClient, + DixUninstallAccess); + if (rc == Success) (*pCmap->pScreen->UninstallColormap) (pCmap); pPriv->installedMap = None; CheckScreenPrivate (pScreen); @@ -651,8 +654,9 @@ CreateSaverWindow (ScreenPtr pScreen) if (i < numInstalled) return TRUE; - pCmap = (ColormapPtr) LookupIDByType (wantMap, RT_COLORMAP); - if (!pCmap) + result = dixLookupResourceByType((pointer *)&pCmap, wantMap, RT_COLORMAP, + serverClient, DixInstallAccess); + if (result != Success) return TRUE; pPriv->installedMap = wantMap; @@ -1252,15 +1256,16 @@ ProcScreenSaverSetAttributes (ClientPtr client) PanoramiXRes *backPix = NULL; PanoramiXRes *bordPix = NULL; PanoramiXRes *cmap = NULL; - int i, status = 0, len; + int i, status, len; int pback_offset = 0, pbord_offset = 0, cmap_offset = 0; XID orig_visual, tmp; REQUEST_AT_LEAST_SIZE (xScreenSaverSetAttributesReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + status = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (status != Success) + return (status == BadValue) ? BadDrawable : status; len = stuff->length - (sizeof(xScreenSaverSetAttributesReq) >> 2); if (Ones(stuff->mask) != len) @@ -1270,9 +1275,11 @@ ProcScreenSaverSetAttributes (ClientPtr client) pback_offset = Ones((Mask)stuff->mask & (CWBackPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pback_offset); if ((tmp != None) && (tmp != ParentRelative)) { - if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + status = dixLookupResourceByType((pointer *)&backPix, tmp, + XRT_PIXMAP, client, + DixReadAccess); + if (status != Success) + return (status == BadValue) ? BadPixmap : status; } } @@ -1280,9 +1287,11 @@ ProcScreenSaverSetAttributes (ClientPtr client) pbord_offset = Ones((Mask)stuff->mask & (CWBorderPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pbord_offset); if (tmp != CopyFromParent) { - if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + status = dixLookupResourceByType((pointer *)&bordPix, tmp, + XRT_PIXMAP, client, + DixReadAccess); + if (status != Success) + return (status == BadValue) ? BadPixmap : status; } } @@ -1290,9 +1299,11 @@ ProcScreenSaverSetAttributes (ClientPtr client) cmap_offset = Ones((Mask)stuff->mask & (CWColormap - 1)); tmp = *((CARD32 *) &stuff[1] + cmap_offset); if ((tmp != CopyFromParent) && (tmp != None)) { - if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_COLORMAP, DixReadAccess))) - return BadColor; + status = dixLookupResourceByType((pointer *)&cmap, tmp, + XRT_COLORMAP, client, + DixReadAccess); + if (status != Success) + return (status == BadValue) ? BadColor : status; } } @@ -1327,11 +1338,12 @@ ProcScreenSaverUnsetAttributes (ClientPtr client) if(!noPanoramiXExtension) { REQUEST(xScreenSaverUnsetAttributesReq); PanoramiXRes *draw; - int i; + int rc, i; - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + rc = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? BadDrawable : rc; for(i = PanoramiXNumScreens - 1; i > 0; i--) { stuff->drawable = draw->info[i].id; diff --git a/Xext/security.c b/Xext/security.c index 7962fdb37..bae95a3b5 100644 --- a/Xext/security.c +++ b/Xext/security.c @@ -623,13 +623,16 @@ ProcSecurityRevokeAuthorization( { REQUEST(xSecurityRevokeAuthorizationReq); SecurityAuthorizationPtr pAuth; + int rc; REQUEST_SIZE_MATCH(xSecurityRevokeAuthorizationReq); - pAuth = (SecurityAuthorizationPtr)SecurityLookupIDByType(client, - stuff->authId, SecurityAuthorizationResType, DixDestroyAccess); - if (!pAuth) - return SecurityErrorBase + XSecurityBadAuthorization; + rc = dixLookupResourceByType((pointer *)&pAuth, stuff->authId, + SecurityAuthorizationResType, client, + DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? + SecurityErrorBase + XSecurityBadAuthorization : rc; FreeResource(stuff->authId, RT_NONE); return Success; diff --git a/Xext/shape.c b/Xext/shape.c index 15d2c5c5a..5977296e5 100644 --- a/Xext/shape.c +++ b/Xext/shape.c @@ -353,13 +353,14 @@ ProcPanoramiXShapeRectangles( { REQUEST(xShapeRectanglesReq); PanoramiXRes *win; - int j, result = 0; + int j, result; REQUEST_AT_LEAST_SIZE (xShapeRectanglesReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->dest, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->dest, XRT_WINDOW, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS(j) { stuff->dest = win->info[j].id; @@ -451,18 +452,20 @@ ProcPanoramiXShapeMask( { REQUEST(xShapeMaskReq); PanoramiXRes *win, *pmap; - int j, result = 0; + int j, result; REQUEST_SIZE_MATCH (xShapeMaskReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->dest, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->dest, XRT_WINDOW, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; if(stuff->src != None) { - if(!(pmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->src, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&pmap, stuff->src, + XRT_PIXMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } else pmap = NULL; @@ -579,17 +582,19 @@ ProcPanoramiXShapeCombine( { REQUEST(xShapeCombineReq); PanoramiXRes *win, *win2; - int j, result = 0; + int j, result; REQUEST_AT_LEAST_SIZE (xShapeCombineReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->dest, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->dest, XRT_WINDOW, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; - if(!(win2 = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->src, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win2, stuff->src, XRT_WINDOW, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS(j) { stuff->dest = win->info[j].id; @@ -651,13 +656,14 @@ ProcPanoramiXShapeOffset( { REQUEST(xShapeOffsetReq); PanoramiXRes *win; - int j, result = 0; + int j, result; REQUEST_AT_LEAST_SIZE (xShapeOffsetReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->dest, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->dest, XRT_WINDOW, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS(j) { stuff->dest = win->info[j].id; @@ -740,11 +746,13 @@ ShapeFreeClient (pointer data, XID id) ShapeEventPtr pShapeEvent; WindowPtr pWin; ShapeEventPtr *pHead, pCur, pPrev; + int rc; pShapeEvent = (ShapeEventPtr) data; pWin = pShapeEvent->window; - pHead = (ShapeEventPtr *) LookupIDByType(pWin->drawable.id, ShapeEventType); - if (pHead) { + rc = dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + ShapeEventType, serverClient, DixReadAccess); + if (rc == Success) { pPrev = 0; for (pCur = *pHead; pCur && pCur != pShapeEvent; pCur=pCur->next) pPrev = pCur; @@ -789,8 +797,11 @@ ProcShapeSelectInput (ClientPtr client) rc = dixLookupWindow(&pWin, stuff->window, client, DixReceiveAccess); if (rc != Success) return rc; - pHead = (ShapeEventPtr *)SecurityLookupIDByType(client, - pWin->drawable.id, ShapeEventType, DixWriteAccess); + rc = dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + ShapeEventType, client, DixWriteAccess); + if (rc != Success && rc != BadValue) + return rc; + switch (stuff->enable) { case xTrue: if (pHead) { @@ -879,9 +890,11 @@ SendShapeNotify (WindowPtr pWin, int which) BoxRec extents; RegionPtr region; BYTE shaped; + int rc; - pHead = (ShapeEventPtr *) LookupIDByType(pWin->drawable.id, ShapeEventType); - if (!pHead) + rc = dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + ShapeEventType, serverClient, DixReadAccess); + if (rc != Success) return; switch (which) { case ShapeBounding: @@ -958,8 +971,10 @@ ProcShapeInputSelected (ClientPtr client) rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess); if (rc != Success) return rc; - pHead = (ShapeEventPtr *) SecurityLookupIDByType(client, - pWin->drawable.id, ShapeEventType, DixReadAccess); + rc = dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + ShapeEventType, client, DixReadAccess); + if (rc != Success && rc != BadValue) + return rc; enabled = xFalse; if (pHead) { for (pShapeEvent = *pHead; diff --git a/Xext/shm.c b/Xext/shm.c index 1f963c16c..cdda09f7f 100644 --- a/Xext/shm.c +++ b/Xext/shm.c @@ -144,12 +144,11 @@ static ShmFuncs fbFuncs = {fbShmCreatePixmap, NULL}; #define VERIFY_SHMSEG(shmseg,shmdesc,client) \ { \ - shmdesc = (ShmDescPtr)LookupIDByType(shmseg, ShmSegType); \ - if (!shmdesc) \ - { \ - client->errorValue = shmseg; \ - return BadShmSegCode; \ - } \ + int rc; \ + rc = dixLookupResourceByType((pointer *)&(shmdesc), shmseg, ShmSegType, \ + client, DixReadAccess); \ + if (rc != Success) \ + return (rc == BadValue) ? BadShmSegCode : rc; \ } #define VERIFY_SHMPTR(shmseg,offset,needwrite,shmdesc,client) \ @@ -513,20 +512,22 @@ doShmPutImage(DrawablePtr dst, GCPtr pGC, static int ProcPanoramiXShmPutImage(ClientPtr client) { - int j, result = 0, orig_x, orig_y; + int j, result, orig_x, orig_y; PanoramiXRes *draw, *gc; Bool sendEvent, isRoot; REQUEST(xShmPutImageReq); REQUEST_SIZE_MATCH(xShmPutImageReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, + XRT_GC, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -570,9 +571,10 @@ ProcPanoramiXShmGetImage(ClientPtr client) return(BadValue); } - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + rc = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? BadDrawable : rc; if (draw->type == XRT_PIXMAP) return ProcShmGetImage(client); diff --git a/Xext/sync.c b/Xext/sync.c index adb732447..d7ab63cd5 100644 --- a/Xext/sync.c +++ b/Xext/sync.c @@ -1339,16 +1339,14 @@ ProcSyncSetCounter(ClientPtr client) REQUEST(xSyncSetCounterReq); SyncCounter *pCounter; CARD64 newvalue; + int rc; REQUEST_SIZE_MATCH(xSyncSetCounterReq); - pCounter = SecurityLookupIDByType(client, stuff->cid, RTCounter, - DixWriteAccess); - if (pCounter == NULL) - { - client->errorValue = stuff->cid; - return SyncErrorBase + XSyncBadCounter; - } + rc = dixLookupResourceByType((pointer *)&pCounter, stuff->cid, RTCounter, + client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? SyncErrorBase + XSyncBadCounter : rc; if (IsSystemCounter(pCounter)) { @@ -1371,16 +1369,14 @@ ProcSyncChangeCounter(ClientPtr client) SyncCounter *pCounter; CARD64 newvalue; Bool overflow; + int rc; REQUEST_SIZE_MATCH(xSyncChangeCounterReq); - pCounter = SecurityLookupIDByType(client, stuff->cid, RTCounter, - DixWriteAccess); - if (pCounter == NULL) - { - client->errorValue = stuff->cid; - return SyncErrorBase + XSyncBadCounter; - } + rc = dixLookupResourceByType((pointer *)&pCounter, stuff->cid, RTCounter, + client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? SyncErrorBase + XSyncBadCounter : rc; if (IsSystemCounter(pCounter)) { @@ -1408,16 +1404,15 @@ ProcSyncDestroyCounter(ClientPtr client) { REQUEST(xSyncDestroyCounterReq); SyncCounter *pCounter; + int rc; REQUEST_SIZE_MATCH(xSyncDestroyCounterReq); - pCounter = SecurityLookupIDByType(client, stuff->counter, RTCounter, - DixDestroyAccess); - if (pCounter == NULL) - { - client->errorValue = stuff->counter; - return SyncErrorBase + XSyncBadCounter; - } + rc = dixLookupResourceByType((pointer *)&pCounter, stuff->counter, RTCounter, + client, DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? SyncErrorBase + XSyncBadCounter : rc; + if (IsSystemCounter(pCounter)) { client->errorValue = stuff->counter; @@ -1552,16 +1547,14 @@ ProcSyncQueryCounter(ClientPtr client) REQUEST(xSyncQueryCounterReq); xSyncQueryCounterReply rep; SyncCounter *pCounter; + int rc; REQUEST_SIZE_MATCH(xSyncQueryCounterReq); - pCounter = SecurityLookupIDByType(client, stuff->counter, RTCounter, - DixReadAccess); - if (pCounter == NULL) - { - client->errorValue = stuff->counter; - return SyncErrorBase + XSyncBadCounter; - } + rc = dixLookupResourceByType((pointer *)&pCounter, stuff->counter, + RTCounter, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? SyncErrorBase + XSyncBadCounter : rc; rep.type = X_Reply; rep.length = 0; @@ -1682,12 +1675,10 @@ ProcSyncChangeAlarm(ClientPtr client) REQUEST_AT_LEAST_SIZE(xSyncChangeAlarmReq); - if (!(pAlarm = SecurityLookupIDByType(client, stuff->alarm, RTAlarm, - DixWriteAccess))) - { - client->errorValue = stuff->alarm; - return SyncErrorBase + XSyncBadAlarm; - } + status = dixLookupResourceByType((pointer *)&pAlarm, stuff->alarm, RTAlarm, + client, DixWriteAccess); + if (status != Success) + return (status == BadValue) ? SyncErrorBase + XSyncBadAlarm : status; vmask = stuff->valueMask; len = client->req_len - (sizeof(xSyncChangeAlarmReq) >> 2); @@ -1719,16 +1710,14 @@ ProcSyncQueryAlarm(ClientPtr client) SyncAlarm *pAlarm; xSyncQueryAlarmReply rep; SyncTrigger *pTrigger; + int rc; REQUEST_SIZE_MATCH(xSyncQueryAlarmReq); - pAlarm = SecurityLookupIDByType(client, stuff->alarm, RTAlarm, - DixReadAccess); - if (!pAlarm) - { - client->errorValue = stuff->alarm; - return SyncErrorBase + XSyncBadAlarm; - } + rc = dixLookupResourceByType((pointer *)&pAlarm, stuff->alarm, RTAlarm, + client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? SyncErrorBase + XSyncBadAlarm : rc; rep.type = X_Reply; rep.length = (sizeof(xSyncQueryAlarmReply) - sizeof(xGenericReply)) >> 2; @@ -1776,16 +1765,15 @@ ProcSyncQueryAlarm(ClientPtr client) static int ProcSyncDestroyAlarm(ClientPtr client) { + SyncAlarm *pAlarm; + int rc; REQUEST(xSyncDestroyAlarmReq); REQUEST_SIZE_MATCH(xSyncDestroyAlarmReq); - if (!(SecurityLookupIDByType(client, stuff->alarm, RTAlarm, - DixDestroyAccess))) - { - client->errorValue = stuff->alarm; - return SyncErrorBase + XSyncBadAlarm; - } + rc = dixLookupResourceByType((pointer *)&pAlarm, stuff->alarm, RTAlarm, + client, DixDestroyAccess); + return (rc == BadValue) ? SyncErrorBase + XSyncBadAlarm : rc; FreeResource(stuff->alarm, RT_NONE); return client->noClientException; diff --git a/Xext/xf86bigfont.c b/Xext/xf86bigfont.c index 60189666e..7d4c69766 100644 --- a/Xext/xf86bigfont.c +++ b/Xext/xf86bigfont.c @@ -427,15 +427,15 @@ ProcXF86BigfontQueryFont( } #endif client->errorValue = stuff->id; /* EITHER font or gc */ - pFont = (FontPtr)SecurityLookupIDByType(client, stuff->id, RT_FONT, - DixGetAttrAccess); + dixLookupResourceByType((pointer *)&pFont, stuff->id, RT_FONT, + client, DixGetAttrAccess); if (!pFont) { - GC *pGC = (GC *) SecurityLookupIDByType(client, stuff->id, RT_GC, - DixGetAttrAccess); - if (!pGC) { - client->errorValue = stuff->id; + GC *pGC; + dixLookupResourceByType((pointer *)&pGC, stuff->id, RT_GC, + client, DixGetAttrAccess); + if (!pGC) return BadFont; /* procotol spec says only error is BadFont */ - } + pFont = pGC->font; } diff --git a/Xext/xvdisp.c b/Xext/xvdisp.c index 770c53a27..fcb61e476 100644 --- a/Xext/xvdisp.c +++ b/Xext/xvdisp.c @@ -479,11 +479,7 @@ ProcXvQueryEncodings(ClientPtr client) REQUEST(xvQueryEncodingsReq); REQUEST_SIZE_MATCH(xvQueryEncodingsReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -540,12 +536,7 @@ ProcXvPutVideo(ClientPtr client) REQUEST_SIZE_MATCH(xvPutVideoReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixWriteAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -583,12 +574,7 @@ ProcXvPutStill(ClientPtr client) REQUEST_SIZE_MATCH(xvPutStillReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixWriteAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -626,12 +612,7 @@ ProcXvGetVideo(ClientPtr client) REQUEST_SIZE_MATCH(xvGetVideoReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixReadAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -669,12 +650,7 @@ ProcXvGetStill(ClientPtr client) REQUEST_SIZE_MATCH(xvGetStillReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixReadAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -723,11 +699,7 @@ ProcXvSelectPortNotify(ClientPtr client) REQUEST(xvSelectPortNotifyReq); REQUEST_SIZE_MATCH(xvSelectPortNotifyReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -747,11 +719,7 @@ ProcXvGrabPort(ClientPtr client) REQUEST(xvGrabPortReq); REQUEST_SIZE_MATCH(xvGrabPortReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -784,11 +752,7 @@ ProcXvUngrabPort(ClientPtr client) REQUEST(xvGrabPortReq); REQUEST_SIZE_MATCH(xvGrabPortReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -808,11 +772,7 @@ ProcXvStopVideo(ClientPtr client) REQUEST(xvStopVideoReq); REQUEST_SIZE_MATCH(xvStopVideoReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -835,11 +795,7 @@ ProcXvSetPortAttribute(ClientPtr client) REQUEST(xvSetPortAttributeReq); REQUEST_SIZE_MATCH(xvSetPortAttributeReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixSetAttrAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -873,11 +829,7 @@ ProcXvGetPortAttribute(ClientPtr client) REQUEST(xvGetPortAttributeReq); REQUEST_SIZE_MATCH(xvGetPortAttributeReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixGetAttrAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -918,11 +870,7 @@ ProcXvQueryBestSize(ClientPtr client) REQUEST(xvQueryBestSizeReq); REQUEST_SIZE_MATCH(xvQueryBestSizeReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -959,11 +907,7 @@ ProcXvQueryPortAttributes(ClientPtr client) REQUEST(xvQueryPortAttributesReq); REQUEST_SIZE_MATCH(xvQueryPortAttributesReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixGetAttrAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -1019,12 +963,7 @@ ProcXvPutImage(ClientPtr client) REQUEST_AT_LEAST_SIZE(xvPutImageReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixWriteAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -1105,12 +1044,7 @@ ProcXvShmPutImage(ClientPtr client) REQUEST_SIZE_MATCH(xvShmPutImageReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixWriteAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -1141,11 +1075,10 @@ ProcXvShmPutImage(ClientPtr client) if(!pImage) return BadMatch; - if(!(shmdesc = (ShmDescPtr)LookupIDByType(stuff->shmseg, ShmSegType))) - { - client->errorValue = stuff->shmseg; - return BadShmSegCode; - } + status = dixLookupResourceByType((pointer *)&shmdesc, stuff->shmseg, + ShmSegType, serverClient, DixReadAccess); + if (status != Success) + return (status == BadValue) ? BadShmSegCode : status; width = stuff->width; height = stuff->height; @@ -1206,11 +1139,7 @@ ProcXvQueryImageAttributes(ClientPtr client) REQUEST_SIZE_MATCH(xvQueryImageAttributesReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); for(i = 0; i < pPort->pAdaptor->nImages; i++) { if(pPort->pAdaptor->pImages[i].id == stuff->id) { @@ -1269,11 +1198,7 @@ ProcXvListImageFormats(ClientPtr client) REQUEST_SIZE_MATCH(xvListImageFormatsReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); rep.type = X_Reply; rep.sequenceNumber = client->sequence; @@ -1679,18 +1604,20 @@ SProcXvDispatch(ClientPtr client) static int XineramaXvStopVideo(ClientPtr client) { - int result = Success, i; + int result, i; PanoramiXRes *draw, *port; REQUEST(xvStopVideoReq); REQUEST_SIZE_MATCH(xvStopVideoReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; FOR_NSCREENS_BACKWARD(i) { if(port->info[i].id) { @@ -1708,13 +1635,14 @@ XineramaXvSetPortAttribute(ClientPtr client) { REQUEST(xvSetPortAttributeReq); PanoramiXRes *port; - int result = Success, i; + int result, i; REQUEST_SIZE_MATCH(xvSetPortAttributeReq); - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; FOR_NSCREENS_BACKWARD(i) { if(port->info[i].id) { @@ -1733,21 +1661,24 @@ XineramaXvShmPutImage(ClientPtr client) PanoramiXRes *draw, *gc, *port; Bool send_event = stuff->send_event; Bool isRoot; - int result = Success, i, x, y; + int result, i, x, y; REQUEST_SIZE_MATCH(xvShmPutImageReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, + XRT_GC, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1782,21 +1713,24 @@ XineramaXvPutImage(ClientPtr client) REQUEST(xvPutImageReq); PanoramiXRes *draw, *gc, *port; Bool isRoot; - int result = Success, i, x, y; + int result, i, x, y; REQUEST_AT_LEAST_SIZE(xvPutImageReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, + XRT_GC, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1827,21 +1761,24 @@ XineramaXvPutVideo(ClientPtr client) REQUEST(xvPutImageReq); PanoramiXRes *draw, *gc, *port; Bool isRoot; - int result = Success, i, x, y; + int result, i, x, y; REQUEST_AT_LEAST_SIZE(xvPutVideoReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, + XRT_GC, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1872,21 +1809,24 @@ XineramaXvPutStill(ClientPtr client) REQUEST(xvPutImageReq); PanoramiXRes *draw, *gc, *port; Bool isRoot; - int result = Success, i, x, y; + int result, i, x, y; REQUEST_AT_LEAST_SIZE(xvPutImageReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, + XRT_GC, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; diff --git a/Xext/xvdix.h b/Xext/xvdix.h index 265c03ddf..44f8f6b18 100644 --- a/Xext/xvdix.h +++ b/Xext/xvdix.h @@ -201,17 +201,13 @@ typedef struct _XvPortRec { DevUnion devPriv; } XvPortRec, *XvPortPtr; -#define LOOKUP_PORT(_id, client)\ - ((XvPortPtr)LookupIDByType(_id, XvRTPort)) - -#define LOOKUP_ENCODING(_id, client)\ - ((XvEncodingPtr)LookupIDByType(_id, XvRTEncoding)) - -#define LOOKUP_VIDEONOTIFY_LIST(_id, client)\ - ((XvVideoNotifyPtr)LookupIDByType(_id, XvRTVideoNotifyList)) - -#define LOOKUP_PORTNOTIFY_LIST(_id, client)\ - ((XvPortNotifyPtr)LookupIDByType(_id, XvRTPortNotifyList)) +#define VALIDATE_XV_PORT(portID, pPort, mode)\ + {\ + int rc = dixLookupResourceByType((pointer *)&(pPort), portID,\ + XvRTPort, client, mode);\ + if (rc != Success)\ + return (rc == BadValue) ? _XvBadPort : rc;\ + } typedef struct { int version, revision; diff --git a/Xext/xvmain.c b/Xext/xvmain.c index 477194684..7c8a3c3d4 100644 --- a/Xext/xvmain.c +++ b/Xext/xvmain.c @@ -523,7 +523,8 @@ XvdiSendVideoNotify(XvPortPtr pPort, DrawablePtr pDraw, int reason) xvEvent event; XvVideoNotifyPtr pn; - pn = (XvVideoNotifyPtr)LookupIDByType(pDraw->id, XvRTVideoNotifyList); + dixLookupResourceByType((pointer *)&pn, pDraw->id, XvRTVideoNotifyList, + serverClient, DixReadAccess); while (pn) { @@ -905,10 +906,14 @@ XvdiSelectVideoNotify( BOOL onoff ){ XvVideoNotifyPtr pn,tpn,fpn; + int rc; /* FIND VideoNotify LIST */ - pn = (XvVideoNotifyPtr)LookupIDByType(pDraw->id, XvRTVideoNotifyList); + rc = dixLookupResourceByType((pointer *)&pn, pDraw->id, XvRTVideoNotifyList, + client, DixWriteAccess); + if (rc != Success && rc != BadValue) + return rc; /* IF ONE DONES'T EXIST AND NO MASK, THEN JUST RETURN */ diff --git a/Xext/xvmc.c b/Xext/xvmc.c index 9166cf892..879a222bd 100644 --- a/Xext/xvmc.c +++ b/Xext/xvmc.c @@ -136,10 +136,7 @@ ProcXvMCListSurfaceTypes(ClientPtr client) REQUEST(xvmcListSurfaceTypesReq); REQUEST_SIZE_MATCH(xvmcListSurfaceTypesReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client))) { - client->errorValue = stuff->port; - return _XvBadPort; - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if(XvMCScreenKey) { /* any adaptors at all */ ScreenPtr pScreen = pPort->pAdaptor->pScreen; @@ -192,10 +189,7 @@ ProcXvMCCreateContext(ClientPtr client) REQUEST(xvmcCreateContextReq); REQUEST_SIZE_MATCH(xvmcCreateContextReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client))) { - client->errorValue = stuff->port; - return _XvBadPort; - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); pScreen = pPort->pAdaptor->pScreen; @@ -273,11 +267,15 @@ ProcXvMCCreateContext(ClientPtr client) static int ProcXvMCDestroyContext(ClientPtr client) { + pointer val; + int rc; REQUEST(xvmcDestroyContextReq); REQUEST_SIZE_MATCH(xvmcDestroyContextReq); - if(!LookupIDByType(stuff->context_id, XvMCRTContext)) - return (XvMCBadContext + XvMCErrorBase); + rc = dixLookupResourceByType(&val, stuff->context_id, XvMCRTContext, + client, DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? XvMCBadContext + XvMCErrorBase : rc; FreeResource(stuff->context_id, RT_NONE); @@ -297,8 +295,10 @@ ProcXvMCCreateSurface(ClientPtr client) REQUEST(xvmcCreateSurfaceReq); REQUEST_SIZE_MATCH(xvmcCreateSurfaceReq); - if(!(pContext = LookupIDByType(stuff->context_id, XvMCRTContext))) - return (XvMCBadContext + XvMCErrorBase); + result = dixLookupResourceByType((pointer *)&pContext, stuff->context_id, + XvMCRTContext, client, DixUseAccess); + if (result != Success) + return (result == BadValue) ? XvMCBadContext + XvMCErrorBase : result; pScreenPriv = XVMC_GET_PRIVATE(pContext->pScreen); @@ -337,11 +337,15 @@ ProcXvMCCreateSurface(ClientPtr client) static int ProcXvMCDestroySurface(ClientPtr client) { + pointer val; + int rc; REQUEST(xvmcDestroySurfaceReq); REQUEST_SIZE_MATCH(xvmcDestroySurfaceReq); - if(!LookupIDByType(stuff->surface_id, XvMCRTSurface)) - return (XvMCBadSurface + XvMCErrorBase); + rc = dixLookupResourceByType(&val, stuff->surface_id, XvMCRTSurface, + client, DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? XvMCBadSurface + XvMCErrorBase : rc; FreeResource(stuff->surface_id, RT_NONE); @@ -363,8 +367,10 @@ ProcXvMCCreateSubpicture(ClientPtr client) REQUEST(xvmcCreateSubpictureReq); REQUEST_SIZE_MATCH(xvmcCreateSubpictureReq); - if(!(pContext = LookupIDByType(stuff->context_id, XvMCRTContext))) - return (XvMCBadContext + XvMCErrorBase); + result = dixLookupResourceByType((pointer *)&pContext, stuff->context_id, + XvMCRTContext, client, DixUseAccess); + if (result != Success) + return (result == BadValue) ? XvMCBadContext + XvMCErrorBase : result; pScreenPriv = XVMC_GET_PRIVATE(pContext->pScreen); @@ -448,11 +454,15 @@ ProcXvMCCreateSubpicture(ClientPtr client) static int ProcXvMCDestroySubpicture(ClientPtr client) { + pointer val; + int rc; REQUEST(xvmcDestroySubpictureReq); REQUEST_SIZE_MATCH(xvmcDestroySubpictureReq); - if(!LookupIDByType(stuff->subpicture_id, XvMCRTSubpicture)) - return (XvMCBadSubpicture + XvMCErrorBase); + rc = dixLookupResourceByType(&val, stuff->subpicture_id, XvMCRTSubpicture, + client, DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? XvMCBadSubpicture + XvMCErrorBase : rc; FreeResource(stuff->subpicture_id, RT_NONE); @@ -475,10 +485,7 @@ ProcXvMCListSubpictureTypes(ClientPtr client) REQUEST(xvmcListSubpictureTypesReq); REQUEST_SIZE_MATCH(xvmcListSubpictureTypesReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client))) { - client->errorValue = stuff->port; - return _XvBadPort; - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); pScreen = pPort->pAdaptor->pScreen; @@ -571,11 +578,7 @@ ProcXvMCGetDRInfo(ClientPtr client) REQUEST(xvmcGetDRInfoReq); REQUEST_SIZE_MATCH(xvmcGetDRInfoReq); - - if(!(pPort = LOOKUP_PORT(stuff->port, client))) { - client->errorValue = stuff->port; - return _XvBadPort; - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); pScreen = pPort->pAdaptor->pScreen; pScreenPriv = XVMC_GET_PRIVATE(pScreen); diff --git a/Xi/chdevcur.c b/Xi/chdevcur.c index b0d3ce341..d7a9e4952 100644 --- a/Xi/chdevcur.c +++ b/Xi/chdevcur.c @@ -94,12 +94,10 @@ int ProcXChangeDeviceCursor(ClientPtr client) } else { - pCursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor, - RT_CURSOR, DixReadAccess); - if (!pCursor) - { - return BadCursor; - } + rc = dixLookupResourceByType((pointer *)&pCursor, stuff->cursor, + RT_CURSOR, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? BadCursor : rc; } ChangeWindowDeviceCursor(pWin, pDev, pCursor); diff --git a/Xi/extgrbdev.c b/Xi/extgrbdev.c index af8706320..0f64610b5 100644 --- a/Xi/extgrbdev.c +++ b/Xi/extgrbdev.c @@ -88,7 +88,7 @@ ProcXExtendedGrabDevice(ClientPtr client) { xExtendedGrabDeviceReply rep; DeviceIntPtr dev; - int rc = Success, + int rc, errval = 0, i; WindowPtr grab_window, @@ -145,14 +145,12 @@ ProcXExtendedGrabDevice(ClientPtr client) if (stuff->cursor) { - cursor = (CursorPtr)SecurityLookupIDByType(client, - stuff->cursor, - RT_CURSOR, - DixReadAccess); - if (!cursor) - { + rc = dixLookupResourceByType((pointer *)&cursor, stuff->cursor, + RT_CURSOR, client, DixReadAccess); + if (rc != Success) + { errval = stuff->cursor; - rc = BadCursor; + rc = (rc == BadValue) ? BadCursor : rc; goto cleanup; } } diff --git a/damageext/damageextint.h b/damageext/damageextint.h index 543f1a70b..45c5ff96c 100644 --- a/damageext/damageextint.h +++ b/damageext/damageextint.h @@ -58,11 +58,10 @@ typedef struct _DamageExt { } DamageExtRec, *DamageExtPtr; #define VERIFY_DAMAGEEXT(pDamageExt, rid, client, mode) { \ - pDamageExt = SecurityLookupIDByType (client, rid, DamageExtType, mode); \ - if (!pDamageExt) { \ - client->errorValue = rid; \ - return DamageErrorBase + BadDamage; \ - } \ + int rc = dixLookupResourceByType((pointer *)&(pDamageExt), rid, \ + DamageExtType, client, mode); \ + if (rc != Success) \ + return (rc == BadValue) ? DamageErrorBase + BadDamage : rc; \ } void diff --git a/dbe/dbe.c b/dbe/dbe.c index 3fd99dfc9..b8f61e742 100644 --- a/dbe/dbe.c +++ b/dbe/dbe.c @@ -411,20 +411,23 @@ ProcDbeDeallocateBackBufferName(ClientPtr client) { REQUEST(xDbeDeallocateBackBufferNameReq); DbeWindowPrivPtr pDbeWindowPriv; - int i; + int rc, i; + pointer val; REQUEST_SIZE_MATCH(xDbeDeallocateBackBufferNameReq); /* Buffer name must be valid */ - if (!(pDbeWindowPriv = (DbeWindowPrivPtr)SecurityLookupIDByType(client, - stuff->buffer, dbeWindowPrivResType, DixDestroyAccess)) || - !(SecurityLookupIDByType(client, stuff->buffer, dbeDrawableResType, - DixDestroyAccess))) - { - client->errorValue = stuff->buffer; - return(dbeErrorBase + DbeBadBuffer); - } + rc = dixLookupResourceByType((pointer *)&pDbeWindowPriv, stuff->buffer, + dbeWindowPrivResType, client, + DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? dbeErrorBase + DbeBadBuffer : rc; + + rc = dixLookupResourceByType(&val, stuff->buffer, dbeDrawableResType, + client, DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? dbeErrorBase + DbeBadBuffer : rc; /* Make sure that the id is valid for the window. * This is paranoid code since we already looked up the ID by type @@ -833,19 +836,21 @@ ProcDbeGetBackBufferAttributes(ClientPtr client) REQUEST(xDbeGetBackBufferAttributesReq); xDbeGetBackBufferAttributesReply rep; DbeWindowPrivPtr pDbeWindowPriv; - int n; + int rc, n; REQUEST_SIZE_MATCH(xDbeGetBackBufferAttributesReq); - if (!(pDbeWindowPriv = (DbeWindowPrivPtr)SecurityLookupIDByType(client, - stuff->buffer, dbeWindowPrivResType, DixGetAttrAccess))) + rc = dixLookupResourceByType((pointer *)&pDbeWindowPriv, stuff->buffer, + dbeWindowPrivResType, client, + DixGetAttrAccess); + if (rc == Success) { - rep.attributes = None; + rep.attributes = pDbeWindowPriv->pWindow->drawable.id; } else { - rep.attributes = pDbeWindowPriv->pWindow->drawable.id; + rep.attributes = None; } rep.type = X_Reply; diff --git a/dix/colormap.c b/dix/colormap.c index 6a5eb74a1..a5a006e60 100644 --- a/dix/colormap.c +++ b/dix/colormap.c @@ -893,9 +893,9 @@ AllocColor (ColormapPtr pmap, if (pmap->mid != pmap->pScreen->defColormap && pmap->pVisual->vid == pmap->pScreen->rootVisual) { - ColormapPtr prootmap = (ColormapPtr) - SecurityLookupIDByType (clients[client], pmap->pScreen->defColormap, - RT_COLORMAP, DixReadAccess); + ColormapPtr prootmap; + dixLookupResourceByType((pointer *)&prootmap, pmap->pScreen->defColormap, + RT_COLORMAP, clients[client], DixReadAccess); if (pmap->class == prootmap->class) FindColorInRootCmap (prootmap, prootmap->red, entries, &rgb, @@ -910,9 +910,9 @@ AllocColor (ColormapPtr pmap, if (pmap->mid != pmap->pScreen->defColormap && pmap->pVisual->vid == pmap->pScreen->rootVisual) { - ColormapPtr prootmap = (ColormapPtr) - SecurityLookupIDByType (clients[client], pmap->pScreen->defColormap, - RT_COLORMAP, DixReadAccess); + ColormapPtr prootmap; + dixLookupResourceByType((pointer *)&prootmap, pmap->pScreen->defColormap, + RT_COLORMAP, clients[client], DixReadAccess); if (pmap->class == prootmap->class) { @@ -1550,12 +1550,14 @@ FreePixels(ColormapPtr pmap, int client) int FreeClientPixels (pointer value, XID fakeid) { - ColormapPtr pmap; - colorResource *pcr = (colorResource *)value; + pointer pmap; + colorResource *pcr = value; + int rc; - pmap = (ColormapPtr) LookupIDByType(pcr->mid, RT_COLORMAP); - if (pmap) - FreePixels(pmap, pcr->client); + rc = dixLookupResourceByType(&pmap, pcr->mid, RT_COLORMAP, serverClient, + DixRemoveAccess); + if (rc == Success) + FreePixels((ColormapPtr)pmap, pcr->client); xfree(pcr); return Success; } diff --git a/dix/cursor.c b/dix/cursor.c index 7ab15df0c..086d008e0 100644 --- a/dix/cursor.c +++ b/dix/cursor.c @@ -545,8 +545,9 @@ CreateRootCursor(char *unused1, unsigned int unused2) if (err != Success) return NullCursor; - cursorfont = (FontPtr)LookupIDByType(fontID, RT_FONT); - if (!cursorfont) + err = dixLookupResourceByType((pointer *)&cursorfont, fontID, RT_FONT, + serverClient, DixReadAccess); + if (err != Success) return NullCursor; if (AllocGlyphCursor(fontID, 0, fontID, 1, 0, 0, 0, ~0, ~0, ~0, &curs, serverClient, (XID)0) != Success) diff --git a/dix/deprecated.c b/dix/deprecated.c index 5487b64bc..8123886ca 100644 --- a/dix/deprecated.c +++ b/dix/deprecated.c @@ -148,14 +148,18 @@ SecurityLookupIDByClass(ClientPtr client, XID id, RESTYPE classes, pointer LookupIDByType(XID id, RESTYPE rtype) { - return SecurityLookupIDByType(NullClient, id, rtype, DixUnknownAccess); + pointer val; + dixLookupResourceByType(&val, id, rtype, NullClient, DixUnknownAccess); + return val; } /* replaced by dixLookupResourceByClass */ pointer LookupIDByClass(XID id, RESTYPE classes) { - return SecurityLookupIDByClass(NullClient, id, classes, DixUnknownAccess); + pointer val; + dixLookupResourceByClass(&val, id, classes, NullClient, DixUnknownAccess); + return val; } /* replaced by dixLookupResourceBy{Type,Class} */ diff --git a/dix/dispatch.c b/dix/dispatch.c index 16a51bdc5..ce3294d32 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -1252,12 +1252,13 @@ int ProcCloseFont(ClientPtr client) { FontPtr pFont; + int rc; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - pFont = (FontPtr)SecurityLookupIDByType(client, stuff->id, RT_FONT, - DixDestroyAccess); - if ( pFont != (FontPtr)NULL) /* id was valid */ + rc = dixLookupResourceByType((pointer *)&pFont, stuff->id, RT_FONT, + client, DixDestroyAccess); + if (rc == Success) { FreeResource(stuff->id, RT_NONE); return(client->noClientException); @@ -1265,7 +1266,7 @@ ProcCloseFont(ClientPtr client) else { client->errorValue = stuff->id; - return (BadFont); + return (rc == BadValue) ? BadFont : rc; } } diff --git a/dix/dixfonts.c b/dix/dixfonts.c index 79489e81f..8b6e7a329 100644 --- a/dix/dixfonts.c +++ b/dix/dixfonts.c @@ -137,8 +137,9 @@ SetDefaultFont(char *defaultfontname) (unsigned) strlen(defaultfontname), defaultfontname); if (err != Success) return FALSE; - pf = (FontPtr) LookupIDByType(fid, RT_FONT); - if (pf == (FontPtr) NULL) + err = dixLookupResourceByType((pointer *)&pf, fid, RT_FONT, serverClient, + DixReadAccess); + if (err != Success) return FALSE; defaultFont = pf; return TRUE; @@ -1201,17 +1202,18 @@ doPolyText(ClientPtr client, PTclosurePtr c) } /* Make sure our drawable hasn't disappeared while we slept. */ - if (c->slept && - c->pDraw && - c->pDraw != (DrawablePtr)SecurityLookupIDByClass(client, c->did, - RC_DRAWABLE, DixWriteAccess)) + if (c->slept && c->pDraw) { - /* Our drawable has disappeared. Treat like client died... ask - the FPE code to clean up after client and avoid further - rendering while we clean up after ourself. */ - fpe = c->pGC->font->fpe; - (*fpe_functions[fpe->type].client_died) ((pointer) client, fpe); - c->pDraw = (DrawablePtr)0; + DrawablePtr pDraw; + dixLookupDrawable(&pDraw, c->did, client, 0, DixWriteAccess); + if (c->pDraw != pDraw) { + /* Our drawable has disappeared. Treat like client died... ask + the FPE code to clean up after client and avoid further + rendering while we clean up after ourself. */ + fpe = c->pGC->font->fpe; + (*fpe_functions[fpe->type].client_died) ((pointer) client, fpe); + c->pDraw = (DrawablePtr)0; + } } client_state = c->slept ? SLEEPING : NEVER_SLEPT; @@ -1233,12 +1235,11 @@ doPolyText(ClientPtr client, PTclosurePtr c) | ((Font)*(c->pElt+3)) << 8 | ((Font)*(c->pElt+2)) << 16 | ((Font)*(c->pElt+1)) << 24; - pFont = (FontPtr)SecurityLookupIDByType(client, fid, RT_FONT, - DixReadAccess); - if (!pFont) + err = dixLookupResourceByType((pointer *)&pFont, fid, RT_FONT, + client, DixReadAccess); + if (err != Success) { - client->errorValue = fid; - err = BadFont; + err = (err == BadValue) ? BadFont : err; /* restore pFont and fid for step 4 (described below) */ pFont = oldpFont; fid = oldfid; @@ -1486,17 +1487,18 @@ doImageText(ClientPtr client, ITclosurePtr c) } /* Make sure our drawable hasn't disappeared while we slept. */ - if (c->slept && - c->pDraw && - c->pDraw != (DrawablePtr)SecurityLookupIDByClass(client, c->did, - RC_DRAWABLE, DixWriteAccess)) + if (c->slept && c->pDraw) { - /* Our drawable has disappeared. Treat like client died... ask - the FPE code to clean up after client. */ - fpe = c->pGC->font->fpe; - (*fpe_functions[fpe->type].client_died) ((pointer) client, fpe); - err = Success; - goto bail; + DrawablePtr pDraw; + dixLookupDrawable(&pDraw, c->did, client, 0, DixWriteAccess); + if (c->pDraw != pDraw) { + /* Our drawable has disappeared. Treat like client died... ask + the FPE code to clean up after client. */ + fpe = c->pGC->font->fpe; + (*fpe_functions[fpe->type].client_died) ((pointer) client, fpe); + err = Success; + goto bail; + } } lgerr = LoadGlyphs(client, c->pGC->font, c->nChars, c->itemSize, c->data); @@ -2013,8 +2015,9 @@ FreeFonts(void) FontPtr find_old_font(XID id) { - return (FontPtr) SecurityLookupIDByType(NullClient, id, RT_NONE, - DixUnknownAccess); + pointer pFont; + dixLookupResourceByType(&pFont, id, RT_NONE, serverClient, DixReadAccess); + return (FontPtr)pFont; } Font diff --git a/dix/dixutils.c b/dix/dixutils.c index 1bdeee064..5cede5f43 100644 --- a/dix/dixutils.c +++ b/dix/dixutils.c @@ -240,14 +240,9 @@ dixLookupWindow(WindowPtr *pWin, XID id, ClientPtr client, Mask access) int dixLookupGC(GCPtr *pGC, XID id, ClientPtr client, Mask access) { - GCPtr pTmp = (GCPtr)SecurityLookupIDByType(client, id, RT_GC, access); - if (pTmp) { - *pGC = pTmp; - return Success; - } - client->errorValue = id; - *pGC = NULL; - return BadGC; + int rc; + rc = dixLookupResourceByType((pointer *)pGC, id, RT_GC, client, access); + return (rc == BadValue) ? BadGC : rc; } int diff --git a/dix/events.c b/dix/events.c index 8af71b645..be88891a4 100644 --- a/dix/events.c +++ b/dix/events.c @@ -506,16 +506,17 @@ XineramaSetWindowPntrs(DeviceIntPtr pDev, WindowPtr pWin) PanoramiXNumScreens*sizeof(WindowPtr)); } else { PanoramiXRes *win; - int i; + int rc, i; - win = (PanoramiXRes*)LookupIDByType(pWin->drawable.id, XRT_WINDOW); - - if(!win) + rc = dixLookupResourceByType((pointer *)&win, pWin->drawable.id, + XRT_WINDOW, serverClient, DixReadAccess); + if (rc != Success) return FALSE; for(i = 0; i < PanoramiXNumScreens; i++) { - pSprite->windows[i] = LookupIDByType(win->info[i].id, RT_WINDOW); - if(!pSprite->windows[i]) /* window is being unmapped */ + rc = dixLookupWindow(pSprite->windows + i, win->info[i].id, + serverClient, DixReadAccess); + if (rc != Success) /* window is being unmapped */ return FALSE; } } diff --git a/dix/resource.c b/dix/resource.c index dc6945dd1..73bc3a998 100644 --- a/dix/resource.c +++ b/dix/resource.c @@ -392,13 +392,16 @@ unsigned int GetXIDList(ClientPtr pClient, unsigned count, XID *pids) { unsigned int found = 0; - XID id = pClient->clientAsMask; + XID rc, id = pClient->clientAsMask; XID maxid; + pointer val; maxid = id | RESOURCE_ID_MASK; while ( (found < count) && (id <= maxid) ) { - if (!LookupIDByClass(id, RC_ANY)) + rc = dixLookupResourceByClass(&val, id, RC_ANY, serverClient, + DixGetAttrAccess); + if (rc == BadValue) { pids[found++] = id; } @@ -826,6 +829,8 @@ FreeAllResources(void) Bool LegalNewID(XID id, ClientPtr client) { + pointer val; + int rc; #ifdef PANORAMIX XID minid, maxid; @@ -838,9 +843,16 @@ LegalNewID(XID id, ClientPtr client) return TRUE; } #endif /* PANORAMIX */ - return ((client->clientAsMask == (id & ~RESOURCE_ID_MASK)) && - ((clientTable[client->index].expectID <= id) || - !LookupIDByClass(id, RC_ANY))); + if (client->clientAsMask == (id & ~RESOURCE_ID_MASK)) + { + if (clientTable[client->index].expectID <= id) + return TRUE; + + rc = dixLookupResourceByClass(&val, id, RC_ANY, serverClient, + DixGetAttrAccess); + return (rc == BadValue); + } + return FALSE; } int diff --git a/dix/window.c b/dix/window.c index f112f81d4..324ddb71e 100644 --- a/dix/window.c +++ b/dix/window.c @@ -2795,6 +2795,7 @@ UnrealizeTree( WindowPtr pChild; UnrealizeWindowProcPtr Unrealize; MarkUnrealizedWindowProcPtr MarkUnrealizedWindow; + int rc; Unrealize = pWin->drawable.pScreen->UnrealizeWindow; MarkUnrealizedWindow = pWin->drawable.pScreen->MarkUnrealizedWindow; @@ -2808,9 +2809,10 @@ UnrealizeTree( #ifdef PANORAMIX if(!noPanoramiXExtension && !pChild->drawable.pScreen->myNum) { PanoramiXRes *win; - win = (PanoramiXRes*)LookupIDByType(pChild->drawable.id, - XRT_WINDOW); - if(win) + rc = dixLookupResourceByType((pointer *)&win, + pChild->drawable.id, XRT_WINDOW, + serverClient, DixWriteAccess); + if (rc == Success) win->u.win.visibility = VisibilityNotViewable; } #endif @@ -3072,7 +3074,7 @@ SendVisibilityNotify(WindowPtr pWin) if(!noPanoramiXExtension) { PanoramiXRes *win; WindowPtr pWin2; - int i, Scrnum; + int rc, i, Scrnum; Scrnum = pWin->drawable.pScreen->myNum; @@ -3086,9 +3088,10 @@ SendVisibilityNotify(WindowPtr pWin) for(i = 0; i < PanoramiXNumScreens; i++) { if(i == Scrnum) continue; - pWin2 = (WindowPtr)LookupIDByType(win->info[i].id, RT_WINDOW); + rc = dixLookupWindow(&pWin2, win->info[i].id, serverClient, + DixWriteAccess); - if (pWin2) { + if (rc == Success) { if(pWin2->visibility == VisibilityPartiallyObscured) return; @@ -3098,17 +3101,19 @@ SendVisibilityNotify(WindowPtr pWin) break; case VisibilityPartiallyObscured: if(Scrnum) { - pWin2 = (WindowPtr)LookupIDByType(win->info[0].id, RT_WINDOW); - if (pWin2) pWin = pWin2; + rc = dixLookupWindow(&pWin2, win->info[0].id, serverClient, + DixWriteAccess); + if (rc == Success) pWin = pWin2; } break; case VisibilityFullyObscured: for(i = 0; i < PanoramiXNumScreens; i++) { if(i == Scrnum) continue; - pWin2 = (WindowPtr)LookupIDByType(win->info[i].id, RT_WINDOW); + rc = dixLookupWindow(&pWin2, win->info[i].id, serverClient, + DixWriteAccess); - if (pWin2) { + if (rc == Success) { if(pWin2->visibility != VisibilityFullyObscured) return; @@ -3739,7 +3744,7 @@ DrawLogo(WindowPtr pWin) int x, y; unsigned int width, height, size; GC *pGC; - int thin, gap, d31; + int rc, thin, gap, d31; DDXPointRec poly[4]; ChangeGCVal fore[2], back[2]; xrgb rgb[2]; @@ -3760,20 +3765,23 @@ DrawLogo(WindowPtr pWin) fore[0].val = pScreen->whitePixel; else fore[0].val = pScreen->blackPixel; - if ((pWin->backgroundState == BackgroundPixel) && - (cmap = (ColormapPtr)LookupIDByType(wColormap (pWin), RT_COLORMAP))) { - Pixel querypixels[2]; + if (pWin->backgroundState == BackgroundPixel) { + rc = dixLookupResourceByType((pointer *)&cmap, wColormap(pWin), + RT_COLORMAP, serverClient, DixReadAccess); + if (rc == Success) { + Pixel querypixels[2]; - querypixels[0] = fore[0].val; - querypixels[1] = pWin->background.pixel; - QueryColors(cmap, 2, querypixels, rgb); - if ((rgb[0].red == rgb[1].red) && - (rgb[0].green == rgb[1].green) && - (rgb[0].blue == rgb[1].blue)) { - if (fore[0].val == pScreen->blackPixel) - fore[0].val = pScreen->whitePixel; - else - fore[0].val = pScreen->blackPixel; + querypixels[0] = fore[0].val; + querypixels[1] = pWin->background.pixel; + QueryColors(cmap, 2, querypixels, rgb); + if ((rgb[0].red == rgb[1].red) && + (rgb[0].green == rgb[1].green) && + (rgb[0].blue == rgb[1].blue)) { + if (fore[0].val == pScreen->blackPixel) + fore[0].val = pScreen->whitePixel; + else + fore[0].val = pScreen->blackPixel; + } } } fore[1].val = FillSolid; diff --git a/fb/fbcmap.c b/fb/fbcmap.c index c29a5131c..207c6aefc 100644 --- a/fb/fbcmap.c +++ b/fb/fbcmap.c @@ -85,8 +85,10 @@ fbUninstallColormap(ColormapPtr pmap) { if (pmap->mid != pmap->pScreen->defColormap) { - curpmap = (ColormapPtr) LookupIDByType(pmap->pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&curpmap, + pmap->pScreen->defColormap, + RT_COLORMAP, + serverClient, DixInstallAccess); (*pmap->pScreen->InstallColormap)(curpmap); } } diff --git a/hw/kdrive/src/kcmap.c b/hw/kdrive/src/kcmap.c index 4941ad17f..2c33e798a 100644 --- a/hw/kdrive/src/kcmap.c +++ b/hw/kdrive/src/kcmap.c @@ -217,7 +217,8 @@ KdUninstallColormap (ColormapPtr pCmap) return; /* install default if on same fb */ - defMap = (ColormapPtr) LookupIDByType(defMapID, RT_COLORMAP); + dixLookupResourceByType((pointer *)&defMap, defMapID, RT_COLORMAP, + serverClient, DixInstallAccess); if (defMap && KdColormapFb (defMap) == fb) (*pCmap->pScreen->InstallColormap)(defMap); else diff --git a/hw/vfb/InitOutput.c b/hw/vfb/InitOutput.c index af3e8f1d4..8ab8bae64 100644 --- a/hw/vfb/InitOutput.c +++ b/hw/vfb/InitOutput.c @@ -508,8 +508,10 @@ vfbUninstallColormap(ColormapPtr pmap) { if (pmap->mid != pmap->pScreen->defColormap) { - curpmap = (ColormapPtr) LookupIDByType(pmap->pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&curpmap, + pmap->pScreen->defColormap, + RT_COLORMAP, serverClient, + DixInstallAccess); (*pmap->pScreen->InstallColormap)(curpmap); } } diff --git a/hw/xfree86/common/xf86cmap.c b/hw/xfree86/common/xf86cmap.c index a627b5315..7e73bb85c 100644 --- a/hw/xfree86/common/xf86cmap.c +++ b/hw/xfree86/common/xf86cmap.c @@ -211,8 +211,8 @@ Bool xf86HandleColormaps( ComputeGamma(pScreenPriv); /* get the default map */ - - pDefMap = (ColormapPtr) LookupIDByType(pScreen->defColormap, RT_COLORMAP); + dixLookupResourceByType((pointer *)&pDefMap, pScreen->defColormap, + RT_COLORMAP, serverClient, DixInstallAccess); if(!CMapAllocateColormapPrivate(pDefMap)) { CMapUnwrapScreen(pScreen); diff --git a/hw/xfree86/dixmods/extmod/xf86dga2.c b/hw/xfree86/dixmods/extmod/xf86dga2.c index 868fb0624..46aa8b882 100644 --- a/hw/xfree86/dixmods/extmod/xf86dga2.c +++ b/hw/xfree86/dixmods/extmod/xf86dga2.c @@ -420,6 +420,7 @@ static int ProcXDGAInstallColormap(ClientPtr client) { ColormapPtr cmap; + int rc; REQUEST(xXDGAInstallColormapReq); if (stuff->screen > screenInfo.numScreens) @@ -430,13 +431,13 @@ ProcXDGAInstallColormap(ClientPtr client) REQUEST_SIZE_MATCH(xXDGAInstallColormapReq); - cmap = (ColormapPtr)LookupIDByType(stuff->cmap, RT_COLORMAP); - if (cmap) { + rc = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, RT_COLORMAP, + client, DixInstallAccess); + if (rc == Success) { DGAInstallCmap(cmap); return (client->noClientException); } else { - client->errorValue = stuff->cmap; - return (BadColor); + return (rc == BadValue) ? BadColor : rc; } return (client->noClientException); @@ -858,6 +859,7 @@ static int ProcXF86DGAInstallColormap(ClientPtr client) { ColormapPtr pcmp; + int rc; REQUEST(xXF86DGAInstallColormapReq); if (stuff->screen > screenInfo.numScreens) @@ -871,13 +873,13 @@ ProcXF86DGAInstallColormap(ClientPtr client) if (!DGAActive(stuff->screen)) return (DGAErrorBase + XF86DGADirectNotActivated); - pcmp = (ColormapPtr )LookupIDByType(stuff->id, RT_COLORMAP); - if (pcmp) { + rc = dixLookupResourceByType((pointer *)&pcmp, stuff->id, RT_COLORMAP, + client, DixInstallAccess); + if (rc == Success) { DGAInstallCmap(pcmp); return (client->noClientException); } else { - client->errorValue = stuff->id; - return (BadColor); + return (rc == BadValue) ? BadColor : rc; } } diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c index c01686de3..3af9878d5 100644 --- a/hw/xfree86/dri/dri.c +++ b/hw/xfree86/dri/dri.c @@ -1363,11 +1363,12 @@ Bool DRIDrawablePrivDelete(pointer pResource, XID id) { WindowPtr pWin; + int rc; id = (XID)pResource; - pWin = LookupIDByType(id, RT_WINDOW); + rc = dixLookupWindow(&pWin, id, serverClient, DixGetAttrAccess); - if (pWin) { + if (rc == Success) { DRIDrawablePrivPtr pDRIDrwPriv = DRI_DRAWABLE_PRIV_FROM_WINDOW(pWin); if (!pDRIDrwPriv) diff --git a/hw/xfree86/vgahw/vgaCmap.c b/hw/xfree86/vgahw/vgaCmap.c index 44043c6c7..095e480a3 100644 --- a/hw/xfree86/vgahw/vgaCmap.c +++ b/hw/xfree86/vgahw/vgaCmap.c @@ -277,8 +277,8 @@ vgaUninstallColormap(pmap) if ( pmap != miInstalledMaps[pmap->pScreen->myNum] ) return; - defColormap = (ColormapPtr) LookupIDByType( pmap->pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&defColormap, pmap->pScreen->defColormap, + RT_COLORMAP, serverClient, DixInstallAccess); if (defColormap == miInstalledMaps[pmap->pScreen->myNum]) return; diff --git a/hw/xnest/Color.c b/hw/xnest/Color.c index 5ba0bdbad..dc749478f 100644 --- a/hw/xnest/Color.c +++ b/hw/xnest/Color.c @@ -242,16 +242,16 @@ xnestSetInstalledColormapWindows(ScreenPtr pScreen) WindowPtr pWin; Visual *visual; ColormapPtr pCmap; - + pWin = xnestWindowPtr(icws.windows[0]); visual = xnestVisualFromID(pScreen, wVisual(pWin)); if (visual == xnestDefaultVisual(pScreen)) - pCmap = (ColormapPtr)LookupIDByType(wColormap(pWin), - RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, wColormap(pWin), + RT_COLORMAP, serverClient, DixUseAccess); else - pCmap = (ColormapPtr)LookupIDByType(pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, pScreen->defColormap, + RT_COLORMAP, serverClient, DixUseAccess); XSetWindowColormap(xnestDisplay, xnestDefaultWindows[pScreen->myNum], @@ -302,7 +302,8 @@ xnestDirectInstallColormaps(ScreenPtr pScreen) for (i = 0; i < n; i++) { ColormapPtr pCmap; - pCmap = (ColormapPtr)LookupIDByType(pCmapIDs[i], RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, pCmapIDs[i], RT_COLORMAP, + serverClient, DixInstallAccess); if (pCmap) XInstallColormap(xnestDisplay, xnestColormap(pCmap)); } @@ -321,7 +322,8 @@ xnestDirectUninstallColormaps(ScreenPtr pScreen) for (i = 0; i < n; i++) { ColormapPtr pCmap; - pCmap = (ColormapPtr)LookupIDByType(pCmapIDs[i], RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, pCmapIDs[i], RT_COLORMAP, + serverClient, DixUninstallAccess); if (pCmap) XUninstallColormap(xnestDisplay, xnestColormap(pCmap)); } @@ -365,8 +367,10 @@ xnestUninstallColormap(ColormapPtr pCmap) { if (pCmap->mid != pCmap->pScreen->defColormap) { - pCurCmap = (ColormapPtr)LookupIDByType(pCmap->pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCurCmap, + pCmap->pScreen->defColormap, + RT_COLORMAP, + serverClient, DixInstallAccess); (*pCmap->pScreen->InstallColormap)(pCurCmap); } } diff --git a/hw/xnest/Window.c b/hw/xnest/Window.c index ae3487f4a..48c870fac 100644 --- a/hw/xnest/Window.c +++ b/hw/xnest/Window.c @@ -93,7 +93,8 @@ xnestCreateWindow(WindowPtr pWin) visual = xnestVisualFromID(pWin->drawable.pScreen, wVisual(pWin)); mask |= CWColormap; if (pWin->optional->colormap) { - pCmap = (ColormapPtr)LookupIDByType(wColormap(pWin), RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, wColormap(pWin), + RT_COLORMAP, serverClient, DixUseAccess); attributes.colormap = xnestColormap(pCmap); } else @@ -104,7 +105,8 @@ xnestCreateWindow(WindowPtr pWin) } else { /* root windows have their own colormaps at creation time */ visual = xnestVisualFromID(pWin->drawable.pScreen, wVisual(pWin)); - pCmap = (ColormapPtr)LookupIDByType(wColormap(pWin), RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, wColormap(pWin), + RT_COLORMAP, serverClient, DixUseAccess); mask |= CWColormap; attributes.colormap = xnestColormap(pCmap); } @@ -338,7 +340,8 @@ xnestChangeWindowAttributes(WindowPtr pWin, unsigned long mask) if (mask & CWColormap) { ColormapPtr pCmap; - pCmap = (ColormapPtr)LookupIDByType(wColormap(pWin), RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, wColormap(pWin), RT_COLORMAP, + serverClient, DixUseAccess); attributes.colormap = xnestColormap(pCmap); diff --git a/mi/micmap.c b/mi/micmap.c index 6318d6745..1d26a5232 100644 --- a/mi/micmap.c +++ b/mi/micmap.c @@ -87,8 +87,10 @@ miUninstallColormap(ColormapPtr pmap) { if (pmap->mid != pmap->pScreen->defColormap) { - curpmap = (ColormapPtr) LookupIDByType(pmap->pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&curpmap, + pmap->pScreen->defColormap, + RT_COLORMAP, serverClient, + DixUseAccess); (*pmap->pScreen->InstallColormap)(curpmap); } } diff --git a/mi/miexpose.c b/mi/miexpose.c index 5746a5fca..2c43d9824 100644 --- a/mi/miexpose.c +++ b/mi/miexpose.c @@ -436,7 +436,7 @@ miSendExposures( WindowPtr pWin, RegionPtr pRgn, int dx, int dy) return; } realWin = win->info[0].id; - pWin = LookupIDByType(realWin, RT_WINDOW); + dixLookupWindow(&pWin, realWin, serverClient, DixSendAccess); } if(x || y || scrnum) for (i = 0; i < numRects; i++) { diff --git a/randr/randr.c b/randr/randr.c index 07dd9e917..fd0a30aa1 100644 --- a/randr/randr.c +++ b/randr/randr.c @@ -279,7 +279,8 @@ RRFreeClient (pointer data, XID id) pRREvent = (RREventPtr) data; pWin = pRREvent->window; - pHead = (RREventPtr *) LookupIDByType(pWin->drawable.id, RREventType); + dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + RREventType, serverClient, DixDestroyAccess); if (pHead) { pPrev = 0; for (pCur = *pHead; pCur && pCur != pRREvent; pCur=pCur->next) @@ -357,7 +358,8 @@ TellChanged (WindowPtr pWin, pointer value) rrScrPriv(pScreen); int i; - pHead = (RREventPtr *) LookupIDByType (pWin->drawable.id, RREventType); + dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + RREventType, serverClient, DixReadAccess); if (!pHead) return WT_WALKCHILDREN; diff --git a/randr/randrstr.h b/randr/randrstr.h index 5e70aa3bf..af1437404 100644 --- a/randr/randrstr.h +++ b/randr/randrstr.h @@ -340,15 +340,29 @@ extern _X_EXPORT RESTYPE RRClientType, RREventType; /* resource types for event extern _X_EXPORT DevPrivateKey RRClientPrivateKey; extern _X_EXPORT RESTYPE RRCrtcType, RRModeType, RROutputType; -#define LookupOutput(client,id,a) ((RROutputPtr) \ - (SecurityLookupIDByType (client, id, \ - RROutputType, a))) -#define LookupCrtc(client,id,a) ((RRCrtcPtr) \ - (SecurityLookupIDByType (client, id, \ - RRCrtcType, a))) -#define LookupMode(client,id,a) ((RRModePtr) \ - (SecurityLookupIDByType (client, id, \ - RRModeType, a))) +#define VERIFY_RR_OUTPUT(id, ptr, a)\ + {\ + int rc = dixLookupResourceByType((pointer *)&(ptr), id,\ + RROutputType, client, a);\ + if (rc != Success)\ + return (rc == BadValue) ? RRErrorBase + BadRROutput : rc;\ + } + +#define VERIFY_RR_CRTC(id, ptr, a)\ + {\ + int rc = dixLookupResourceByType((pointer *)&(ptr), id,\ + RRCrtcType, client, a);\ + if (rc != Success)\ + return (rc == BadValue) ? RRErrorBase + BadRRCrtc : rc;\ + } + +#define VERIFY_RR_MODE(id, ptr, a)\ + {\ + int rc = dixLookupResourceByType((pointer *)&(ptr), id,\ + RRModeType, client, a);\ + if (rc != Success)\ + return (rc == BadValue) ? RRErrorBase + BadRRMode : rc;\ + } #define GetRRClient(pClient) ((RRClientPtr)dixLookupPrivate(&(pClient)->devPrivates, RRClientPrivateKey)) #define rrClientPriv(pClient) RRClientPtr pRRClient = GetRRClient(pClient) diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c index 7b724aefc..287c21194 100644 --- a/randr/rrcrtc.c +++ b/randr/rrcrtc.c @@ -658,10 +658,7 @@ ProcRRGetCrtcInfo (ClientPtr client) BoxRec panned_area; REQUEST_SIZE_MATCH(xRRGetCrtcInfoReq); - crtc = LookupCrtc(client, stuff->crtc, DixReadAccess); - - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); /* All crtcs must be associated with screens before client * requests are processed @@ -775,17 +772,13 @@ ProcRRSetCrtcConfig (ClientPtr client) TimeStamp configTime; TimeStamp time; Rotation rotation; - int i, j; + int rc, i, j; REQUEST_AT_LEAST_SIZE(xRRSetCrtcConfigReq); numOutputs = (stuff->length - (SIZEOF (xRRSetCrtcConfigReq) >> 2)); - crtc = LookupIDByType (stuff->crtc, RRCrtcType); - if (!crtc) - { - client->errorValue = stuff->crtc; - return RRErrorBase + BadRRCrtc; - } + VERIFY_RR_CRTC(stuff->crtc, crtc, DixSetAttrAccess); + if (stuff->mode == None) { mode = NULL; @@ -794,12 +787,7 @@ ProcRRSetCrtcConfig (ClientPtr client) } else { - mode = LookupIDByType (stuff->mode, RRModeType); - if (!mode) - { - client->errorValue = stuff->mode; - return RRErrorBase + BadRRMode; - } + VERIFY_RR_MODE(stuff->mode, mode, DixSetAttrAccess); if (numOutputs == 0) return BadMatch; } @@ -815,13 +803,13 @@ ProcRRSetCrtcConfig (ClientPtr client) outputIds = (RROutput *) (stuff + 1); for (i = 0; i < numOutputs; i++) { - outputs[i] = (RROutputPtr) LookupIDByType (outputIds[i], RROutputType); - if (!outputs[i]) + rc = dixLookupResourceByType((pointer *)(outputs + i), outputIds[i], + RROutputType, client, DixSetAttrAccess); + if (rc != Success) { - client->errorValue = outputIds[i]; if (outputs) xfree (outputs); - return RRErrorBase + BadRROutput; + return (rc == BadValue) ? RRErrorBase + BadRROutput : rc; } /* validate crtc for this output */ for (j = 0; j < outputs[i]->numCrtcs; j++) @@ -1027,10 +1015,7 @@ ProcRRGetPanning (ClientPtr client) int n; REQUEST_SIZE_MATCH(xRRGetPanningReq); - crtc = LookupCrtc(client, stuff->crtc, DixReadAccess); - - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); /* All crtcs must be associated with screens before client * requests are processed @@ -1100,11 +1085,7 @@ ProcRRSetPanning (ClientPtr client) int n; REQUEST_SIZE_MATCH(xRRSetPanningReq); - crtc = LookupCrtc(client, stuff->crtc, DixReadAccess); - - if (!crtc) - return RRErrorBase + BadRRCrtc; - + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); /* All crtcs must be associated with screens before client * requests are processed @@ -1175,9 +1156,7 @@ ProcRRGetCrtcGammaSize (ClientPtr client) int n; REQUEST_SIZE_MATCH(xRRGetCrtcGammaSizeReq); - crtc = LookupCrtc (client, stuff->crtc, DixReadAccess); - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); /* Gamma retrieval failed, any better error? */ if (!RRCrtcGammaGet(crtc)) @@ -1207,9 +1186,7 @@ ProcRRGetCrtcGamma (ClientPtr client) char *extra = NULL; REQUEST_SIZE_MATCH(xRRGetCrtcGammaReq); - crtc = LookupCrtc (client, stuff->crtc, DixReadAccess); - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); /* Gamma retrieval failed, any better error? */ if (!RRCrtcGammaGet(crtc)) @@ -1252,9 +1229,7 @@ ProcRRSetCrtcGamma (ClientPtr client) CARD16 *red, *green, *blue; REQUEST_AT_LEAST_SIZE(xRRSetCrtcGammaReq); - crtc = LookupCrtc (client, stuff->crtc, DixWriteAccess); - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); len = client->req_len - (sizeof (xRRSetCrtcGammaReq) >> 2); if (len < (stuff->size * 3 + 1) >> 1) @@ -1287,9 +1262,7 @@ ProcRRSetCrtcTransform (ClientPtr client) int nparams; REQUEST_AT_LEAST_SIZE(xRRSetCrtcTransformReq); - crtc = LookupCrtc (client, stuff->crtc, DixWriteAccess); - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); PictTransform_from_xRenderTransform (&transform, &stuff->transform); pixman_f_transform_from_pixman_transform (&f_transform, &transform); @@ -1372,9 +1345,7 @@ ProcRRGetCrtcTransform (ClientPtr client) char *extra; REQUEST_SIZE_MATCH (xRRGetCrtcTransformReq); - crtc = LookupCrtc (client, stuff->crtc, DixWriteAccess); - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); pending = &crtc->client_pending_transform; current = &crtc->client_current_transform; diff --git a/randr/rrdispatch.c b/randr/rrdispatch.c index 0925875bf..bec5b08af 100644 --- a/randr/rrdispatch.c +++ b/randr/rrdispatch.c @@ -79,9 +79,10 @@ ProcRRSelectInput (ClientPtr client) rc = dixLookupWindow(&pWin, stuff->window, client, DixReceiveAccess); if (rc != Success) return rc; - pHead = (RREventPtr *)SecurityLookupIDByType(client, - pWin->drawable.id, RREventType, - DixWriteAccess); + rc = dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + RREventType, client, DixWriteAccess); + if (rc != Success && rc != BadValue) + return rc; if (stuff->enable & (RRScreenChangeNotifyMask| RRCrtcChangeNotifyMask| diff --git a/randr/rrmode.c b/randr/rrmode.c index 2fa440385..2a1007662 100644 --- a/randr/rrmode.c +++ b/randr/rrmode.c @@ -332,12 +332,8 @@ ProcRRDestroyMode (ClientPtr client) RRModePtr mode; REQUEST_SIZE_MATCH(xRRDestroyModeReq); - mode = LookupIDByType (stuff->mode, RRModeType); - if (!mode) - { - client->errorValue = stuff->mode; - return RRErrorBase + BadRRMode; - } + VERIFY_RR_MODE(stuff->mode, mode, DixDestroyAccess); + if (!mode->userScreen) return BadMatch; if (mode->refcnt > 1) @@ -354,20 +350,8 @@ ProcRRAddOutputMode (ClientPtr client) RROutputPtr output; REQUEST_SIZE_MATCH(xRRAddOutputModeReq); - output = LookupOutput(client, stuff->output, DixReadAccess); - - if (!output) - { - client->errorValue = stuff->output; - return RRErrorBase + BadRROutput; - } - - mode = LookupIDByType (stuff->mode, RRModeType); - if (!mode) - { - client->errorValue = stuff->mode; - return RRErrorBase + BadRRMode; - } + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); + VERIFY_RR_MODE(stuff->mode, mode, DixUseAccess); return RROutputAddUserMode (output, mode); } @@ -380,20 +364,8 @@ ProcRRDeleteOutputMode (ClientPtr client) RROutputPtr output; REQUEST_SIZE_MATCH(xRRDeleteOutputModeReq); - output = LookupOutput(client, stuff->output, DixReadAccess); - - if (!output) - { - client->errorValue = stuff->output; - return RRErrorBase + BadRROutput; - } - - mode = LookupIDByType (stuff->mode, RRModeType); - if (!mode) - { - client->errorValue = stuff->mode; - return RRErrorBase + BadRRMode; - } + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); + VERIFY_RR_MODE(stuff->mode, mode, DixUseAccess); return RROutputDeleteUserMode (output, mode); } diff --git a/randr/rroutput.c b/randr/rroutput.c index 0ae7873e2..127497eb8 100644 --- a/randr/rroutput.c +++ b/randr/rroutput.c @@ -448,13 +448,7 @@ ProcRRGetOutputInfo (ClientPtr client) int i, n; REQUEST_SIZE_MATCH(xRRGetOutputInfoReq); - output = LookupOutput(client, stuff->output, DixReadAccess); - - if (!output) - { - client->errorValue = stuff->output; - return RRErrorBase + BadRROutput; - } + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); pScreen = output->pScreen; pScrPriv = rrGetScrPriv(pScreen); @@ -569,24 +563,16 @@ ProcRRSetOutputPrimary(ClientPtr client) RROutputPtr output = NULL; WindowPtr pWin; rrScrPrivPtr pScrPriv; + int rc; REQUEST_SIZE_MATCH(xRRSetOutputPrimaryReq); - pWin = SecurityLookupIDByType(client, stuff->window, RT_WINDOW, - DixReadAccess); - - if (!pWin) { - client->errorValue = stuff->window; - return BadWindow; - } + rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess); + if (rc != Success) + return rc; if (stuff->output) { - output = LookupOutput(client, stuff->output, DixReadAccess); - - if (!output) { - client->errorValue = stuff->output; - return RRErrorBase + BadRROutput; - } + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); if (output->pScreen != pWin->drawable.pScreen) { client->errorValue = stuff->window; @@ -608,16 +594,13 @@ ProcRRGetOutputPrimary(ClientPtr client) rrScrPrivPtr pScrPriv; xRRGetOutputPrimaryReply rep; RROutputPtr primary = NULL; + int rc; REQUEST_SIZE_MATCH(xRRGetOutputPrimaryReq); - pWin = SecurityLookupIDByType(client, stuff->window, RT_WINDOW, - DixReadAccess); - - if (!pWin) { - client->errorValue = stuff->window; - return BadWindow; - } + rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess); + if (rc != Success) + return rc; pScrPriv = rrGetScrPriv(pWin->drawable.pScreen); if (pScrPriv) diff --git a/randr/rrproperty.c b/randr/rrproperty.c index 12923a2c7..775d9e29f 100644 --- a/randr/rrproperty.c +++ b/randr/rrproperty.c @@ -31,7 +31,8 @@ DeliverPropertyEvent(WindowPtr pWin, void *value) RREventPtr *pHead, pRREvent; ClientPtr client; - pHead = LookupIDByType(pWin->drawable.id, RREventType); + dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + RREventType, serverClient, DixReadAccess); if (!pHead) return WT_WALKCHILDREN; @@ -419,10 +420,7 @@ ProcRRListOutputProperties (ClientPtr client) REQUEST_SIZE_MATCH(xRRListOutputPropertiesReq); - output = LookupOutput (client, stuff->output, DixReadAccess); - - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); for (prop = output->properties; prop; prop = prop->next) numProps++; @@ -466,10 +464,7 @@ ProcRRQueryOutputProperty (ClientPtr client) REQUEST_SIZE_MATCH(xRRQueryOutputPropertyReq); - output = LookupOutput (client, stuff->output, DixReadAccess); - - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); prop = RRQueryOutputProperty (output, stuff->property); if (!prop) @@ -513,10 +508,7 @@ ProcRRConfigureOutputProperty (ClientPtr client) REQUEST_AT_LEAST_SIZE(xRRConfigureOutputPropertyReq); - output = LookupOutput (client, stuff->output, DixReadAccess); - - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); num_valid = stuff->length - (sizeof (xRRConfigureOutputPropertyReq) >> 2); return RRConfigureOutputProperty (output, stuff->property, @@ -558,9 +550,7 @@ ProcRRChangeOutputProperty (ClientPtr client) totalSize = len * sizeInBytes; REQUEST_FIXED_SIZE(xRRChangeOutputPropertyReq, totalSize); - output = LookupOutput (client, stuff->output, DixWriteAccess); - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); if (!ValidAtom(stuff->property)) { @@ -590,9 +580,7 @@ ProcRRDeleteOutputProperty (ClientPtr client) REQUEST_SIZE_MATCH(xRRDeleteOutputPropertyReq); UpdateCurrentTime(); - output = LookupOutput (client, stuff->output, DixWriteAccess); - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); if (!ValidAtom(stuff->property)) { @@ -619,11 +607,8 @@ ProcRRGetOutputProperty (ClientPtr client) REQUEST_SIZE_MATCH(xRRGetOutputPropertyReq); if (stuff->delete) UpdateCurrentTime(); - output = LookupOutput (client, stuff->output, - stuff->delete ? DixWriteAccess : - DixReadAccess); - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, + stuff->delete ? DixWriteAccess : DixReadAccess); if (!ValidAtom(stuff->property)) { diff --git a/record/record.c b/record/record.c index f97626f73..cb7a6276c 100644 --- a/record/record.c +++ b/record/record.c @@ -127,11 +127,10 @@ static int numEnabledRCAPs; * returns an error. */ #define VERIFY_CONTEXT(_pContext, _contextid, _client) { \ - (_pContext) = (RecordContextPtr)LookupIDByType((_contextid), RTContext); \ - if (!(_pContext)) { \ - (_client)->errorValue = (_contextid); \ - return RecordErrorBase + XRecordBadContext; \ - } \ + int rc = dixLookupResourceByType((pointer *)&(_pContext), _contextid, \ + RTContext, _client, DixUseAccess); \ + if (rc != Success) \ + return (rc == BadValue) ? RecordErrorBase + XRecordBadContext : rc; \ } static int RecordDeleteContext( diff --git a/render/picture.c b/render/picture.c index 462125f05..5f86c7ce1 100644 --- a/render/picture.c +++ b/render/picture.c @@ -410,8 +410,9 @@ PictureInitIndexedFormat(ScreenPtr pScreen, PictFormatPtr format) return TRUE; if (format->index.vid == pScreen->rootVisual) { - format->index.pColormap = - (ColormapPtr) LookupIDByType(pScreen->defColormap, RT_COLORMAP); + dixLookupResourceByType((pointer *)&format->index.pColormap, + pScreen->defColormap, RT_COLORMAP, + serverClient, DixGetAttrAccess); } else { VisualPtr pVisual = PictureFindVisual(pScreen, format->index.vid); if (CreateColormap(FakeClientID (0), pScreen, pVisual, diff --git a/render/picturestr.h b/render/picturestr.h index 194db11a3..6a1cc061c 100644 --- a/render/picturestr.h +++ b/render/picturestr.h @@ -409,11 +409,10 @@ extern _X_EXPORT RESTYPE GlyphSetType; #define SetPictureWindow(w,p) dixSetPrivate(&(w)->devPrivates, PictureWindowPrivateKey, p) #define VERIFY_PICTURE(pPicture, pid, client, mode, err) {\ - pPicture = SecurityLookupIDByType(client, pid, PictureType, mode);\ - if (!pPicture) { \ - client->errorValue = pid; \ - return err; \ - } \ + int rc = dixLookupResourceByType((pointer)&(pPicture), pid,\ + PictureType, client, mode);\ + if (rc != Success)\ + return (rc == BadValue) ? err : rc;\ } #define VERIFY_ALPHA(pPicture, pid, client, mode, err) {\ diff --git a/render/render.c b/render/render.c index 270b8fb29..8487b60de 100644 --- a/render/render.c +++ b/render/render.c @@ -509,7 +509,7 @@ static int ProcRenderQueryPictIndexValues (ClientPtr client) { PictFormatPtr pFormat; - int num; + int rc, num; int rlength; int i, n; REQUEST(xRenderQueryPictIndexValuesReq); @@ -518,16 +518,11 @@ ProcRenderQueryPictIndexValues (ClientPtr client) REQUEST_AT_LEAST_SIZE(xRenderQueryPictIndexValuesReq); - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->format, - PictFormatType, - DixReadAccess); + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->format, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; - if (!pFormat) - { - client->errorValue = stuff->format; - return RenderErrBase + BadPictFormat; - } if (pFormat->type != PictTypeIndexed) { client->errorValue = stuff->format; @@ -592,15 +587,11 @@ ProcRenderCreatePicture (ClientPtr client) if (rc != Success) return rc; - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->format, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->format; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->format, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; + if (pFormat->depth != pDrawable->depth) return BadMatch; len = client->req_len - (sizeof(xRenderCreatePictureReq) >> 2); @@ -740,7 +731,7 @@ ProcRenderScale (ClientPtr client) static int ProcRenderTrapezoids (ClientPtr client) { - int ntraps; + int rc, ntraps; PicturePtr pSrc, pDst; PictFormatPtr pFormat; REQUEST(xRenderTrapezoidsReq); @@ -761,15 +752,10 @@ ProcRenderTrapezoids (ClientPtr client) return BadMatch; if (stuff->maskFormat) { - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->maskFormat, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->maskFormat; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->maskFormat, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; } else pFormat = 0; @@ -787,7 +773,7 @@ ProcRenderTrapezoids (ClientPtr client) static int ProcRenderTriangles (ClientPtr client) { - int ntris; + int rc, ntris; PicturePtr pSrc, pDst; PictFormatPtr pFormat; REQUEST(xRenderTrianglesReq); @@ -808,15 +794,10 @@ ProcRenderTriangles (ClientPtr client) return BadMatch; if (stuff->maskFormat) { - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->maskFormat, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->maskFormat; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->maskFormat, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; } else pFormat = 0; @@ -834,7 +815,7 @@ ProcRenderTriangles (ClientPtr client) static int ProcRenderTriStrip (ClientPtr client) { - int npoints; + int rc, npoints; PicturePtr pSrc, pDst; PictFormatPtr pFormat; REQUEST(xRenderTrianglesReq); @@ -855,15 +836,10 @@ ProcRenderTriStrip (ClientPtr client) return BadMatch; if (stuff->maskFormat) { - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->maskFormat, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->maskFormat; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->maskFormat, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; } else pFormat = 0; @@ -881,7 +857,7 @@ ProcRenderTriStrip (ClientPtr client) static int ProcRenderTriFan (ClientPtr client) { - int npoints; + int rc, npoints; PicturePtr pSrc, pDst; PictFormatPtr pFormat; REQUEST(xRenderTrianglesReq); @@ -902,15 +878,10 @@ ProcRenderTriFan (ClientPtr client) return BadMatch; if (stuff->maskFormat) { - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->maskFormat, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->maskFormat; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->maskFormat, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; } else pFormat = 0; @@ -954,15 +925,11 @@ ProcRenderCreateGlyphSet (ClientPtr client) REQUEST_SIZE_MATCH(xRenderCreateGlyphSetReq); LEGAL_NEW_RESOURCE(stuff->gsid, client); - format = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->format, - PictFormatType, - DixReadAccess); - if (!format) - { - client->errorValue = stuff->format; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&format, stuff->format, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; + switch (format->depth) { case 1: f = GlyphFormat1; @@ -1300,7 +1267,7 @@ ProcRenderCompositeGlyphs (ClientPtr client) int nlist; int space; int size; - int n; + int rc, n; REQUEST(xRenderCompositeGlyphsReq); @@ -1327,28 +1294,18 @@ ProcRenderCompositeGlyphs (ClientPtr client) return BadMatch; if (stuff->maskFormat) { - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->maskFormat, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->maskFormat; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->maskFormat, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; } else pFormat = 0; - glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client, - stuff->glyphset, - GlyphSetType, - DixUseAccess); - if (!glyphSet) - { - client->errorValue = stuff->glyphset; - return RenderErrBase + BadGlyphSet; - } + rc = dixLookupResourceByType((pointer *)&glyphSet, stuff->glyphset, + GlyphSetType, client, DixUseAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadGlyphSet : rc; buffer = (CARD8 *) (stuff + 1); end = (CARD8 *) stuff + (client->req_len << 2); @@ -1402,18 +1359,16 @@ ProcRenderCompositeGlyphs (ClientPtr client) if (buffer + sizeof (GlyphSet) < end) { memcpy(&gs, buffer, sizeof(GlyphSet)); - glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client, - gs, - GlyphSetType, - DixUseAccess); - if (!glyphSet) + rc = dixLookupResourceByType((pointer *)&glyphSet, gs, + GlyphSetType, client, + DixUseAccess); + if (rc != Success) { - client->errorValue = gs; if (glyphsBase != glyphsLocal) xfree (glyphsBase); if (listsBase != listsLocal) xfree (listsBase); - return RenderErrBase + BadGlyphSet; + return (rc == BadValue) ? RenderErrBase + BadGlyphSet : rc; } } buffer += 4; @@ -1902,13 +1857,12 @@ ProcRenderCreateAnimCursor (ClientPtr client) elt = (xAnimCursorElt *) (stuff + 1); for (i = 0; i < ncursor; i++) { - cursors[i] = (CursorPtr)SecurityLookupIDByType(client, elt->cursor, - RT_CURSOR, DixReadAccess); - if (!cursors[i]) + ret = dixLookupResourceByType((pointer *)(cursors + 1), elt->cursor, + RT_CURSOR, client, DixReadAccess); + if (ret != Success) { xfree (cursors); - client->errorValue = elt->cursor; - return BadCursor; + return (ret == BadValue) ? BadCursor : ret; } deltas[i] = elt->delay; elt++; @@ -2689,11 +2643,10 @@ SProcRenderDispatch (ClientPtr client) #include "panoramiXsrv.h" #define VERIFY_XIN_PICTURE(pPicture, pid, client, mode, err) {\ - pPicture = SecurityLookupIDByType(client, pid, XRT_PICTURE, mode);\ - if (!pPicture) { \ - client->errorValue = pid; \ - return err; \ - } \ + int rc = dixLookupResourceByType((pointer *)&(pPicture), pid,\ + XRT_PICTURE, client, mode);\ + if (rc != Success)\ + return (rc == BadValue) ? err : rc;\ } #define VERIFY_XIN_ALPHA(pPicture, pid, client, mode, err) {\ @@ -2713,12 +2666,13 @@ PanoramiXRenderCreatePicture (ClientPtr client) { REQUEST(xRenderCreatePictureReq); PanoramiXRes *refDraw, *newPict; - int result = Success, j; + int result, j; REQUEST_AT_LEAST_SIZE(xRenderCreatePictureReq); - if(!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&refDraw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(!(newPict = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes)))) return BadAlloc; newPict->type = XRT_PICTURE; diff --git a/xfixes/cursor.c b/xfixes/cursor.c index eb83cfeb7..6fa2dff8e 100644 --- a/xfixes/cursor.c +++ b/xfixes/cursor.c @@ -203,6 +203,8 @@ XFixesSelectCursorInput (ClientPtr pClient, CARD32 eventMask) { CursorEventPtr *prev, e; + pointer val; + int rc; for (prev = &cursorEvents; (e = *prev); prev = &e->next) { @@ -235,7 +237,10 @@ XFixesSelectCursorInput (ClientPtr pClient, * Add a resource hanging from the window to * catch window destroy */ - if (!LookupIDByType(pWindow->drawable.id, CursorWindowType)) + rc = dixLookupResourceByType( &val, pWindow->drawable.id, + CursorWindowType, serverClient, + DixGetAttrAccess); + if (rc != Success) if (!AddResource (pWindow->drawable.id, CursorWindowType, (pointer) pWindow)) { diff --git a/xfixes/select.c b/xfixes/select.c index 795b8bd4c..a5811bdc0 100644 --- a/xfixes/select.c +++ b/xfixes/select.c @@ -133,6 +133,7 @@ XFixesSelectSelectionInput (ClientPtr pClient, WindowPtr pWindow, CARD32 eventMask) { + pointer val; int rc; SelectionEventPtr *prev, e; @@ -173,7 +174,10 @@ XFixesSelectSelectionInput (ClientPtr pClient, * Add a resource hanging from the window to * catch window destroy */ - if (!LookupIDByType(pWindow->drawable.id, SelectionWindowType)) + rc = dixLookupResourceByType (&val, pWindow->drawable.id, + SelectionWindowType, serverClient, + DixGetAttrAccess); + if (rc != Success) if (!AddResource (pWindow->drawable.id, SelectionWindowType, (pointer) pWindow)) { From 0d9d3f3e361f769822caedccf4c2a58cc9930ecc Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Mon, 27 Apr 2009 15:11:10 -0700 Subject: [PATCH 18/89] DRI2: Force allocation of real-front buffer for non-windows as well For redirected rendering we end up with pixmaps (which the app thinks are windows) that are double buffered. Signed-off-by: Ian Romanick Tested-by: Pierre Willenbrock --- hw/xfree86/dri2/dri2.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index 9ded048eb..1d49d7c65 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -206,18 +206,21 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height, * attachments. The counting logic in the loop accounts for the case * where the client requests both the fake and real front-buffer. */ - if (pDraw->type == DRAWABLE_WINDOW) { - if (attachment == DRI2BufferBackLeft) { - need_real_front++; - front_format = format; - } + if (attachment == DRI2BufferBackLeft) { + need_real_front++; + front_format = format; + } - if (attachment == DRI2BufferFrontLeft) { - need_real_front--; + if (attachment == DRI2BufferFrontLeft) { + need_real_front--; + front_format = format; + + if (pDraw->type == DRAWABLE_WINDOW) { need_fake_front++; - front_format = format; } + } + if (pDraw->type == DRAWABLE_WINDOW) { if (attachment == DRI2BufferFakeFrontLeft) { need_fake_front--; have_fake_front = 1; From 557dbadf3be273255e8fdb12d9321f4e88bf2b65 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Sat, 2 May 2009 00:26:18 -0700 Subject: [PATCH 19/89] XkbSetNamedIndicator should ignore SD's without LED's When ProcXkbSetNamedIndicator is called on a core device, and we walk the slaves to set the LED's on each of them, ignore any slaves that do not have either a KbdFeedbackCtrl or LedCtrl structure. (This is much more critical in xserver-1.5-branch, where we walk *all* devices, not just the slaves of the specified master, and thus return failure when setting an LED on the Core Keyboard and hit a xf86-input-mouse device with no LED's to set.) Signed-off-by: Alan Coopersmith Acked-by: Peter Hutterer --- xkb/xkb.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xkb/xkb.c b/xkb/xkb.c index e7c9a312d..b2fe11cae 100644 --- a/xkb/xkb.c +++ b/xkb/xkb.c @@ -3433,6 +3433,7 @@ ProcXkbSetNamedIndicator(ClientPtr client) for (other = inputInfo.devices; other; other = other->next) { if ((other != dev) && !other->isMaster && (other->u.master == dev) && + (other->kbdfeed || other->leds) && (XaceHook(XACE_DEVICE_ACCESS, client, other, DixSetAttrAccess) == Success)) { rc = _XkbCreateIndicatorMap(other, stuff->indicator, @@ -3456,6 +3457,7 @@ ProcXkbSetNamedIndicator(ClientPtr client) for (other = inputInfo.devices; other; other = other->next) { if ((other != dev) && !other->isMaster && (other->u.master == dev) && + (other->kbdfeed || other->leds) && (XaceHook(XACE_DEVICE_ACCESS, client, other, DixSetAttrAccess) == Success)) { _XkbSetNamedIndicator(client, other, stuff); From 7d85169c7ab1d05c21fdbb2877ffd79f344dbb6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Mon, 4 May 2009 10:14:43 +0200 Subject: [PATCH 20/89] Fix typo in ProcRenderCreateAnimCursor. --- render/render.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/render/render.c b/render/render.c index 8487b60de..5622994e3 100644 --- a/render/render.c +++ b/render/render.c @@ -1857,7 +1857,7 @@ ProcRenderCreateAnimCursor (ClientPtr client) elt = (xAnimCursorElt *) (stuff + 1); for (i = 0; i < ncursor; i++) { - ret = dixLookupResourceByType((pointer *)(cursors + 1), elt->cursor, + ret = dixLookupResourceByType((pointer *)(cursors + i), elt->cursor, RT_CURSOR, client, DixReadAccess); if (ret != Success) { From 94648bb797d94b025746c60679c584e5be2fae28 Mon Sep 17 00:00:00 2001 From: Jesse Barnes Date: Mon, 4 May 2009 15:38:22 -0700 Subject: [PATCH 21/89] Don't prepare outputs & crtcs if set_mode_major is present A driver with this hook will take care of preparing the outputs & crtcs, so calling the prepare functions will just cause unnecessary flicker. Fixes bug #21077 --- hw/xfree86/modes/xf86Crtc.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c index c6eed3377..1b241cd33 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c @@ -2549,18 +2549,23 @@ Bool xf86SetDesiredModes (ScrnInfoPtr scrn) { xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn); + xf86CrtcPtr crtc = config->crtc[0]; int c; - xf86PrepareOutputs(scrn); - xf86PrepareCrtcs(scrn); + /* A driver with this hook will take care of this */ + if (!crtc->funcs->set_mode_major) { + xf86PrepareOutputs(scrn); + xf86PrepareCrtcs(scrn); + } for (c = 0; c < config->num_crtc; c++) { - xf86CrtcPtr crtc = config->crtc[c]; xf86OutputPtr output = NULL; int o; RRTransformPtr transform; + crtc = config->crtc[c]; + /* Skip disabled CRTCs */ if (!crtc->enabled) continue; From f1bed0959e803784af142a0f45177ee3b675d78a Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 1 May 2009 15:15:04 +1000 Subject: [PATCH 22/89] Xext: fix core Xtest button presses, don't call PickPointer. We already did the device selection before, so dev should be the XTest virtual pointer. Signed-off-by: Peter Hutterer --- Xext/xtest.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Xext/xtest.c b/Xext/xtest.c index d21eedcde..8aca6a0f7 100644 --- a/Xext/xtest.c +++ b/Xext/xtest.c @@ -376,12 +376,6 @@ ProcXTestFakeInput(ClientPtr client) break; case ButtonPress: case ButtonRelease: - if (!extension) - { - dev = PickPointer(client); - if (dev->u.lastSlave) - dev = dev->u.lastSlave; - } if (!ev->u.u.detail || ev->u.u.detail > dev->button->numButtons) { client->errorValue = ev->u.u.detail; From 14d5471981151b27678de826daa078977217477a Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 1 May 2009 15:22:37 +1000 Subject: [PATCH 23/89] Xext: return BadDevice from XTest if we don't have keys/buttons/valuators. BadDevice is an XI error, but this cannot happen for core XTest fake input anyway since the device will be the matching virtual XTest slave device. Signed-off-by: Peter Hutterer --- Xext/xtest.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Xext/xtest.c b/Xext/xtest.c index 8aca6a0f7..cb32c2858 100644 --- a/Xext/xtest.c +++ b/Xext/xtest.c @@ -49,6 +49,7 @@ #include #include #include +#include "exglobals.h" #include "modinit.h" @@ -342,6 +343,9 @@ ProcXTestFakeInput(ClientPtr client) { case KeyPress: case KeyRelease: + if (!dev->key) + return BadDevice; + if (ev->u.u.detail < dev->key->xkbInfo->desc->min_key_code || ev->u.u.detail > dev->key->xkbInfo->desc->max_key_code) { @@ -350,6 +354,9 @@ ProcXTestFakeInput(ClientPtr client) } break; case MotionNotify: + if (!dev->valuator) + return BadDevice; + /* broken lib, XI events have root uninitialized */ if (extension || ev->u.keyButtonPointer.root == None) root = GetCurrentRootWindow(dev); @@ -376,6 +383,9 @@ ProcXTestFakeInput(ClientPtr client) break; case ButtonPress: case ButtonRelease: + if (!dev->button) + return BadDevice; + if (!ev->u.u.detail || ev->u.u.detail > dev->button->numButtons) { client->errorValue = ev->u.u.detail; From a38d33f6ac765bc5a3296b325e2c9b4a6a10ebf1 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 1 May 2009 15:24:02 +1000 Subject: [PATCH 24/89] Xext: shut up compiler warnings in xtest.c Signed-off-by: Peter Hutterer --- Xext/xtest.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Xext/xtest.c b/Xext/xtest.c index cb32c2858..96380b769 100644 --- a/Xext/xtest.c +++ b/Xext/xtest.c @@ -50,6 +50,7 @@ #include #include #include "exglobals.h" +#include "mipointer.h" #include "modinit.h" @@ -162,7 +163,6 @@ ProcXTestFakeInput(ClientPtr client) int i; int base = 0; int flags = 0; - DeviceIntPtr xtstdevice; nev = (stuff->length << 2) - sizeof(xReq); if ((nev % sizeof(xEvent)) || !nev) @@ -415,7 +415,7 @@ ProcXTestFakeInput(ClientPtr client) } for (i = 0; i < nevents; i++) - mieqProcessDeviceEvent(dev, (events+i)->event, NULL); + mieqProcessDeviceEvent(dev, (InternalEvent*)(events+i)->event, NULL); miPointerUpdateSprite(dev); return client->noClientException; From 7ecedb0f2ee5b53513205d1f0aa381451893b9c5 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 1 May 2009 14:35:12 +1000 Subject: [PATCH 25/89] include: up the number of max. input devices to 40. With the Xtest virtual slave devices we have 4 devices for each MD pointer/keyboard pair, plus the AllDevices and AllMasterDevices reserved deviceids. It's quite easy to hit the current limit. Signed-off-by: Peter Hutterer --- include/misc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/misc.h b/include/misc.h index 6a920cc9f..61dd9474c 100644 --- a/include/misc.h +++ b/include/misc.h @@ -86,7 +86,7 @@ OF THIS SOFTWARE. #define MAXCLIENTS 256 #define MAXEXTENSIONS 128 #define MAXFORMATS 8 -#define MAXDEVICES 20 /* input devices */ +#define MAXDEVICES 40 /* input devices */ #define EXTENSION_EVENT_BASE 64 #define EXTENSION_BASE 128 From 749cae82204f347248c815b1068ffcae9825fe70 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 30 Apr 2009 14:58:00 +1000 Subject: [PATCH 26/89] mi: don't crash if we're trying to update the pointer for a keyboard. If a device doesn't have a pointer, just return. Signed-off-by: Peter Hutterer --- mi/mipointer.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mi/mipointer.c b/mi/mipointer.c index 3d34481ef..1c61b57a9 100644 --- a/mi/mipointer.c +++ b/mi/mipointer.c @@ -367,6 +367,9 @@ miPointerUpdateSprite (DeviceIntPtr pDev) pPointer = MIPOINTER(pDev); + if (!pPointer) + return; + pScreen = pPointer->pScreen; if (!pScreen) return; From 1b1b20d6e3e696e4437a9ef56128cde70a485f66 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 5 May 2009 13:47:55 +1000 Subject: [PATCH 27/89] Change glib require for tests to auto. Signed-off-by: Peter Hutterer --- configure.ac | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 3fc4dd405..daddd094a 100644 --- a/configure.ac +++ b/configure.ac @@ -440,8 +440,8 @@ AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [Enable debugging (default: disabled)]), [DEBUGGING=$enableval], [DEBUGGING=no]) AC_ARG_ENABLE(unit-tests, AS_HELP_STRING([--enable-unit-tests], - [Enable unit-tests (default: enabled)]), - [UNITTESTS=$enableval], [UNITTESTS=yes]) + [Enable unit-tests (default: auto)]), + [UNITTESTS=$enableval], [UNITTESTS=auto]) AC_ARG_WITH(int10, AS_HELP_STRING([--with-int10=BACKEND], [int10 backend: vm86, x86emu or stub]), [INT10="$withval"], [INT10="$DEFAULT_INT10"]) @@ -1144,6 +1144,9 @@ if test "x$DEBUGGING" = xyes; then fi AM_CONDITIONAL(DEBUG, [test "x$DEBUGGING" = xyes]) +if test "x$UNITTESTS" = xauto; then + PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16], [UNITTESTS=yes], [UNITTESTS=no]) +fi if test "x$UNITTESTS" = xyes; then AC_DEFINE(UNITTESTS, 1, [Enable unit tests]) PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16]) From 35fce4e5c7fa34f98b3e4010c6cb09ce38a9205c Mon Sep 17 00:00:00 2001 From: Simon Thum Date: Thu, 30 Apr 2009 12:58:48 +0200 Subject: [PATCH 28/89] dix: fix warning in pointer acceleration newer gcc's warn against how this cast is done (though it eludes me why), and lrintf() is also faster especially on insane processors like the P4 (http://www.mega-nerd.com/FPcast). Signed-off-by: Peter Hutterer --- dix/ptrveloc.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c index 99efc794c..0a9a22ec2 100644 --- a/dix/ptrveloc.c +++ b/dix/ptrveloc.c @@ -994,14 +994,20 @@ acceleratePointerPredictable( if (dx) { tmp = mult * fdx + pDev->last.remainder[0]; - *px = (int)roundf(tmp); + /* Since it may not be apparent: lrintf() does not offer + * strong statements about rounding; however because we + * process each axis conditionally, there's no danger + * of a toggling remainder. Its lack of guarantees hopefully + * makes it faster on the average target. */ + *px = lrintf(tmp); pDev->last.remainder[0] = tmp - (float)*px; } if (dy) { tmp = mult * fdy + pDev->last.remainder[1]; - *py = (int)roundf(tmp); + *py = lrintf(tmp); pDev->last.remainder[1] = tmp - (float)*py; } + DebugAccelF("pos (%i | %i) remainders x: %.3f y: %.3f delta x:%.3f y:%.3f\n", *px, *py, pDev->last.remainder[0], pDev->last.remainder[1], fdx, fdy); } } } From 9d1597cbefea6a5e7959f2099c46f1a284def7ad Mon Sep 17 00:00:00 2001 From: Simon Thum Date: Thu, 30 Apr 2009 13:01:17 +0200 Subject: [PATCH 29/89] dix: remove superfluous includes from ptrveloc.c Signed-off-by: Peter Hutterer --- dix/ptrveloc.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c index 0a9a22ec2..7732e9569 100644 --- a/dix/ptrveloc.c +++ b/dix/ptrveloc.c @@ -28,11 +28,8 @@ #include #include -#include #include #include -#include -#include #include From 3fc6fcfb267888d65a22ed7c3eda175a2530a3d5 Mon Sep 17 00:00:00 2001 From: Simon Thum Date: Wed, 6 May 2009 10:39:16 +0200 Subject: [PATCH 30/89] dix: add 'none' pointer acceleration profile with number -1 This is a shorthand for disabling acceleration, while retaining the possiblity to use constant deceleration. If constant deceleration is also unused, it will optimize motion processing. Other possiblities to deactivate acceleration were quite hidden, and didn't always work as expected. E.g. xset m 1 1 would retain adaptive deceleration, while xset m 1 0 would not (in the default profile). Also removes the 'reserved' profile; it was unused and it's trivial to add new ones anyway. Signed-off-by: Peter Hutterer --- dix/ptrveloc.c | 36 ++++++++++++++++++++++++++++-------- include/ptrveloc.h | 7 +++---- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c index 7732e9569..2907d40a8 100644 --- a/dix/ptrveloc.c +++ b/dix/ptrveloc.c @@ -77,9 +77,12 @@ GetAccelerationProfile(DeviceVelocityPtr s, int profile_num); #endif /******************************** - * Init/Uninit etc + * Init/Uninit *******************************/ +/* some int which is not a profile number */ +#define PROFILE_UNINITIALIZE (-100) + /** * Init struct so it should match the average case */ @@ -108,7 +111,7 @@ InitVelocityData(DeviceVelocityPtr s) static void FreeVelocityData(DeviceVelocityPtr s){ xfree(s->tracker); - SetAccelerationProfile(s, -1); + SetAccelerationProfile(s, PROFILE_UNINITIALIZE); } @@ -824,6 +827,16 @@ LinearProfile( } +static float +NoProfile( + DeviceVelocityPtr pVel, + float velocity, + float threshold, + float acc) +{ + return 1.0f; +} + static PointerAccelerationProfileFunc GetAccelerationProfile( DeviceVelocityPtr s, @@ -844,8 +857,8 @@ GetAccelerationProfile( return PowerProfile; case AccelProfileLinear: return LinearProfile; - case AccelProfileReserved: - /* reserved for future use, e.g. a user-defined profile */ + case AccelProfileNone: + return NoProfile; default: return NULL; } @@ -856,8 +869,10 @@ GetAccelerationProfile( * Intended to make profiles exchangeable at runtime. * If you created a profile, give it a number here and in the header to * make it selectable. In case some profile-specific init is needed, here - * would be a good place, since FreeVelocityData() also calls this with -1. - * returns FALSE (0) if profile number is unavailable. + * would be a good place, since FreeVelocityData() also calls this with + * PROFILE_UNINITIALIZE. + * + * returns FALSE if profile number is unavailable, TRUE otherwise. */ int SetAccelerationProfile( @@ -867,7 +882,7 @@ SetAccelerationProfile( PointerAccelerationProfileFunc profile; profile = GetAccelerationProfile(s, profile_num); - if(profile == NULL && profile_num != -1) + if(profile == NULL && profile_num != PROFILE_UNINITIALIZE) return FALSE; if(s->profile_private != NULL){ @@ -955,6 +970,11 @@ acceleratePointerPredictable( if (!num_valuators || !valuators || !velocitydata) return; + if (velocitydata->statistics.profile_number == AccelProfileNone && + velocitydata->const_acceleration == 1.0f) { + return; /*we're inactive anyway, so skip the whole thing.*/ + } + if (first_valuator == 0) { dx = valuators[0]; px = &valuators[0]; @@ -994,7 +1014,7 @@ acceleratePointerPredictable( /* Since it may not be apparent: lrintf() does not offer * strong statements about rounding; however because we * process each axis conditionally, there's no danger - * of a toggling remainder. Its lack of guarantees hopefully + * of a toggling remainder. Its lack of guarantees likely * makes it faster on the average target. */ *px = lrintf(tmp); pDev->last.remainder[0] = tmp - (float)*px; diff --git a/include/ptrveloc.h b/include/ptrveloc.h index 6ef8c754e..83d188c54 100644 --- a/include/ptrveloc.h +++ b/include/ptrveloc.h @@ -27,9 +27,9 @@ #include /* DeviceIntPtr */ -/* constants for acceleration profiles; - * see */ +/* constants for acceleration profiles */ +#define AccelProfileNone -1 #define AccelProfileClassic 0 #define AccelProfileDeviceSpecific 1 #define AccelProfilePolynomial 2 @@ -37,8 +37,7 @@ #define AccelProfileSimple 4 #define AccelProfilePower 5 #define AccelProfileLinear 6 -#define AccelProfileReserved 7 -#define AccelProfileLAST AccelProfileReserved +#define AccelProfileLAST AccelProfileLinear /* fwd */ struct _DeviceVelocityRec; From 50cc8adafca4ba3838d468278d6eb8a4692d2488 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 6 May 2009 16:55:32 +1000 Subject: [PATCH 31/89] Xi: don't double-swap the XListDeviceProperties reply. Signed-off-by: Peter Hutterer --- Xi/xiproperty.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c index d633f5141..8c6d53a5a 100644 --- a/Xi/xiproperty.c +++ b/Xi/xiproperty.c @@ -706,13 +706,6 @@ ProcXListDeviceProperties (ClientPtr client) rep.length = (numProps * sizeof(Atom)) >> 2; rep.sequenceNumber = client->sequence; rep.nAtoms = numProps; - if (client->swapped) - { - int n; - swaps (&rep.sequenceNumber, n); - swapl (&rep.length, n); - swaps (&rep.nAtoms, n); - } temppAtoms = pAtoms; for (prop = dev->properties.properties; prop; prop = prop->next) *temppAtoms++ = prop->propertyName; From 7ab5e9b97c300bba793a23fa13506b0c77c50ddf Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 6 May 2009 12:07:07 +1000 Subject: [PATCH 32/89] xfree86: fix xf86PostMotionEventP type checking We only put internal events into the queue now, so let's check for ET_Motion rather than the MotionNotify. Signed-off-by: Peter Hutterer --- hw/xfree86/common/xf86Xinput.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c index a035fca7f..8a718618f 100644 --- a/hw/xfree86/common/xf86Xinput.c +++ b/hw/xfree86/common/xf86Xinput.c @@ -743,7 +743,7 @@ xf86PostMotionEventP(DeviceIntPtr device, int i = 0, nevents = 0; int dx = 0, dy = 0; Bool drag = xf86SendDragEvents(device); - xEvent *xE = NULL; + DeviceEvent *event; int index; int flags = 0; @@ -789,10 +789,11 @@ xf86PostMotionEventP(DeviceIntPtr device, valuators); for (i = 0; i < nevents; i++) { - xE = (xf86Events + i)->event; + event = (DeviceEvent*)((xf86Events + i)->event); /* Don't post core motion events for devices not registered to send * drag events. */ - if (xE->u.u.type != MotionNotify || drag) { + if (event->header == ET_Internal && + (event->type != ET_Motion || drag)) { mieqEnqueue(device, (InternalEvent*)((xf86Events + i)->event)); } } From 8b583ca2b21155359c6255f406c96599b277c762 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 6 May 2009 22:25:28 +1000 Subject: [PATCH 33/89] Xi: fix copy/paste error causing sizeof against wrong struct. This wrong check may cause BadLength to be returned to the client even if the length is correct. Signed-off-by: Peter Hutterer --- Xi/xiproperty.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c index 8c6d53a5a..7e20e0320 100644 --- a/Xi/xiproperty.c +++ b/Xi/xiproperty.c @@ -747,7 +747,7 @@ ProcXChangeDeviceProperty (ClientPtr client) return BadValue; } len = stuff->nUnits; - if (len > ((0xffffffff - sizeof(xChangePropertyReq)) >> 2)) + if (len > ((0xffffffff - sizeof(xChangeDevicePropertyReq)) >> 2)) return BadLength; sizeInBytes = format>>3; totalSize = len * sizeInBytes; From 0e31d3906deaee5d9ada66e538b9e93574a4d610 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 5 May 2009 21:07:07 +1000 Subject: [PATCH 34/89] xkb: remove some now-useless XFUNCPROTOBEGIN We bring them back if we start rewriting the server in C++, promise. Signed-off-by: Peter Hutterer --- include/xkbsrv.h | 4 ---- xkb/xkbgeom.h | 4 ---- 2 files changed, 8 deletions(-) diff --git a/include/xkbsrv.h b/include/xkbsrv.h index df3308534..74d5f290c 100644 --- a/include/xkbsrv.h +++ b/include/xkbsrv.h @@ -334,8 +334,6 @@ extern _X_EXPORT int DeviceEnterNotify,DeviceLeaveNotify; #define False FALSE #endif -_XFUNCPROTOBEGIN - extern _X_EXPORT void XkbUseMsg( void ); @@ -1000,8 +998,6 @@ extern _X_EXPORT XkbDescPtr XkbCompileKeymap( XkbRMLVOSet * /* rmlvo */ ); -_XFUNCPROTOEND - #define XkbAtomGetString(s) NameForAtom(s) #endif /* _XKBSRV_H_ */ diff --git a/xkb/xkbgeom.h b/xkb/xkbgeom.h index 173affee9..fe4da3806 100644 --- a/xkb/xkbgeom.h +++ b/xkb/xkbgeom.h @@ -311,8 +311,6 @@ typedef struct _XkbGeometrySizes { unsigned short num_key_aliases; } XkbGeometrySizesRec,*XkbGeometrySizesPtr; -_XFUNCPROTOBEGIN - extern XkbPropertyPtr XkbAddGeomProperty( XkbGeometryPtr /* geom */, @@ -630,6 +628,4 @@ XkbFindOverlayForKey( char * /* under */ ); -_XFUNCPROTOEND - #endif /* _XKBGEOM_H_ */ From 5cf70183812541b33a6e83c7e1e3bc6198730cbe Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 5 May 2009 21:00:31 +1000 Subject: [PATCH 35/89] xkb: remove _XkbAlloc, _XkbCalloc, _XkbRealloc and _XkbFree We all agree that wrapping is fun, but seriously. One of these days someone will get hurt. Signed-off-by: Peter Hutterer --- include/xkbsrv.h | 4 --- xkb/XKBAlloc.c | 28 ++++++++++---------- xkb/XKBGAlloc.c | 40 ++++++++++++++-------------- xkb/XKBMAlloc.c | 68 ++++++++++++++++++++++++------------------------ xkb/XKBMisc.c | 2 +- xkb/maprules.c | 44 +++++++++++++++---------------- xkb/xkb.c | 40 ++++++++++++++-------------- xkb/xkbEvents.c | 4 +-- xkb/xkbInit.c | 34 ++++++++++++------------ xkb/xkbLEDs.c | 6 ++--- xkb/xkmread.c | 6 ++--- 11 files changed, 136 insertions(+), 140 deletions(-) diff --git a/include/xkbsrv.h b/include/xkbsrv.h index 74d5f290c..c3f64916e 100644 --- a/include/xkbsrv.h +++ b/include/xkbsrv.h @@ -301,15 +301,11 @@ extern _X_EXPORT pointer XkbLastRepeatEvent; extern _X_EXPORT CARD32 xkbDebugFlags; -#define _XkbAlloc(s) xalloc((s)) -#define _XkbCalloc(n,s) Xcalloc((n)*(s)) -#define _XkbRealloc(o,s) Xrealloc((o),(s)) #define _XkbTypedAlloc(t) ((t *)xalloc(sizeof(t))) #define _XkbTypedCalloc(n,t) ((t *)Xcalloc((n)*sizeof(t))) #define _XkbTypedRealloc(o,n,t) \ ((o)?(t *)Xrealloc((o),(n)*sizeof(t)):_XkbTypedCalloc(n,t)) #define _XkbClearElems(a,f,l,t) bzero(&(a)[f],((l)-(f)+1)*sizeof(t)) -#define _XkbFree(p) Xfree(p) #define _XkbLibError(c,l,d) /* Epoch fail */ #define _XkbErrCode2(a,b) ((XID)((((unsigned int)(a))<<24)|((b)&0xffffff))) diff --git a/xkb/XKBAlloc.c b/xkb/XKBAlloc.c index 559a52483..7265d83f2 100644 --- a/xkb/XKBAlloc.c +++ b/xkb/XKBAlloc.c @@ -58,7 +58,7 @@ XkbSymInterpretRec *prev_interpret; compat->sym_interpret= _XkbTypedRealloc(compat->sym_interpret, nSI,XkbSymInterpretRec); if (compat->sym_interpret==NULL) { - _XkbFree(prev_interpret); + xfree(prev_interpret); compat->size_si= compat->num_si= 0; return BadAlloc; } @@ -74,7 +74,7 @@ XkbSymInterpretRec *prev_interpret; if (nSI>0) { compat->sym_interpret= _XkbTypedCalloc(nSI,XkbSymInterpretRec); if (!compat->sym_interpret) { - _XkbFree(compat); + xfree(compat); return BadAlloc; } } @@ -100,12 +100,12 @@ register XkbCompatMapPtr compat; bzero((char *)&compat->groups[0],XkbNumKbdGroups*sizeof(XkbModsRec)); if (which&XkbSymInterpMask) { if ((compat->sym_interpret)&&(compat->size_si>0)) - _XkbFree(compat->sym_interpret); + xfree(compat->sym_interpret); compat->size_si= compat->num_si= 0; compat->sym_interpret= NULL; } if (freeMap) { - _XkbFree(compat); + xfree(compat); xkb->compat= NULL; } return; @@ -161,7 +161,7 @@ XkbNamesPtr names; _XkbClearElems(names->key_aliases,names->num_key_aliases, nTotalAliases-1,XkbKeyAliasRec); } else { - _XkbFree(prev_aliases); + xfree(prev_aliases); } } if (names->key_aliases==NULL) { @@ -183,7 +183,7 @@ XkbNamesPtr names; _XkbClearElems(names->radio_groups,names->num_rg,nTotalRG-1, Atom); } else { - _XkbFree(prev_radio_groups); + xfree(prev_radio_groups); } } if (names->radio_groups==NULL) @@ -211,29 +211,29 @@ XkbNamesPtr names; type= map->types; for (i=0;inum_types;i++,type++) { if (type->level_names!=NULL) { - _XkbFree(type->level_names); + xfree(type->level_names); type->level_names= NULL; } } } } if ((which&XkbKeyNamesMask)&&(names->keys!=NULL)) { - _XkbFree(names->keys); + xfree(names->keys); names->keys= NULL; names->num_keys= 0; } if ((which&XkbKeyAliasesMask)&&(names->key_aliases)){ - _XkbFree(names->key_aliases); + xfree(names->key_aliases); names->key_aliases=NULL; names->num_key_aliases=0; } if ((which&XkbRGNamesMask)&&(names->radio_groups)) { - _XkbFree(names->radio_groups); + xfree(names->radio_groups); names->radio_groups= NULL; names->num_rg= 0; } if (freeMap) { - _XkbFree(names); + xfree(names); xkb->names= NULL; } return; @@ -261,7 +261,7 @@ static void XkbFreeControls(XkbDescPtr xkb,unsigned which,Bool freeMap) { if (freeMap && (xkb!=NULL) && (xkb->ctrls!=NULL)) { - _XkbFree(xkb->ctrls); + xfree(xkb->ctrls); xkb->ctrls= NULL; } return; @@ -286,7 +286,7 @@ static void XkbFreeIndicatorMaps(XkbDescPtr xkb) { if ((xkb!=NULL)&&(xkb->indicators!=NULL)) { - _XkbFree(xkb->indicators); + xfree(xkb->indicators); xkb->indicators= NULL; } return; @@ -330,6 +330,6 @@ XkbFreeKeyboard(XkbDescPtr xkb,unsigned which,Bool freeAll) if (which&XkbControlsMask) XkbFreeControls(xkb,XkbAllControlsMask,True); if (freeAll) - _XkbFree(xkb); + xfree(xkb); return; } diff --git a/xkb/XKBGAlloc.c b/xkb/XKBGAlloc.c index 9561a3df8..752b11a94 100644 --- a/xkb/XKBGAlloc.c +++ b/xkb/XKBGAlloc.c @@ -51,7 +51,7 @@ _XkbFreeGeomLeafElems( Bool freeAll, if ((freeAll)||(*elems==NULL)) { *num_inout= *sz_inout= 0; if (*elems!=NULL) { - _XkbFree(*elems); + xfree(*elems); *elems= NULL; } return; @@ -115,7 +115,7 @@ register char *ptr; if (freeAll) { (*num_inout)= (*sz_inout)= 0; if (*elems) { - _XkbFree(*elems); + xfree(*elems); *elems= NULL; } } @@ -138,11 +138,11 @@ _XkbClearProperty(char *prop_in) XkbPropertyPtr prop= (XkbPropertyPtr)prop_in; if (prop->name) { - _XkbFree(prop->name); + xfree(prop->name); prop->name= NULL; } if (prop->value) { - _XkbFree(prop->value); + xfree(prop->value); prop->value= NULL; } return; @@ -184,7 +184,7 @@ _XkbClearColor(char *color_in) XkbColorPtr color= (XkbColorPtr)color_in; if (color->spec) - _XkbFree(color->spec); + xfree(color->spec); return; } @@ -381,11 +381,11 @@ XkbDoodadPtr doodad= (XkbDoodadPtr)doodad_in; case XkbTextDoodad: { if (doodad->text.text!=NULL) { - _XkbFree(doodad->text.text); + xfree(doodad->text.text); doodad->text.text= NULL; } if (doodad->text.font!=NULL) { - _XkbFree(doodad->text.font); + xfree(doodad->text.font); doodad->text.font= NULL; } } @@ -393,7 +393,7 @@ XkbDoodadPtr doodad= (XkbDoodadPtr)doodad_in; case XkbLogoDoodad: { if (doodad->logo.logo_name!=NULL) { - _XkbFree(doodad->logo.logo_name); + xfree(doodad->logo.logo_name); doodad->logo.logo_name= NULL; } } @@ -413,7 +413,7 @@ register XkbDoodadPtr doodad; _XkbClearDoodad((char *)doodad); } if (freeAll) - _XkbFree(doodads); + xfree(doodads); } return; } @@ -442,10 +442,10 @@ XkbFreeGeometry(XkbGeometryPtr geom,unsigned which,Bool freeMap) XkbFreeGeomKeyAliases(geom,0,geom->num_key_aliases,True); if (freeMap) { if (geom->label_font!=NULL) { - _XkbFree(geom->label_font); + xfree(geom->label_font); geom->label_font= NULL; } - _XkbFree(geom); + xfree(geom); } return; } @@ -469,8 +469,8 @@ _XkbGeomAlloc( void ** old, *total= (*num)+num_new; if ((*old)!=NULL) - (*old)= _XkbRealloc((*old),(*total)*sz_elem); - else (*old)= _XkbCalloc((*total),sz_elem); + (*old)= xrealloc((*old),(*total)*sz_elem); + else (*old)= xcalloc((*total),sz_elem); if ((*old)==NULL) { *total= *num= 0; return BadAlloc; @@ -664,8 +664,8 @@ register XkbPropertyPtr prop; for (i=0,prop=geom->properties;inum_properties;i++,prop++) { if ((prop->name)&&(strcmp(name,prop->name)==0)) { if (prop->value) - _XkbFree(prop->value); - prop->value= (char *)_XkbAlloc(strlen(value)+1); + xfree(prop->value); + prop->value= xalloc(strlen(value)+1); if (prop->value) strcpy(prop->value,value); return prop; @@ -676,13 +676,13 @@ register XkbPropertyPtr prop; return NULL; } prop= &geom->properties[geom->num_properties]; - prop->name= (char *)_XkbAlloc(strlen(name)+1); + prop->name= xalloc(strlen(name)+1); if (!name) return NULL; strcpy(prop->name,name); - prop->value= (char *)_XkbAlloc(strlen(value)+1); + prop->value= xalloc(strlen(value)+1); if (!value) { - _XkbFree(prop->name); + xfree(prop->name); prop->name= NULL; return NULL; } @@ -738,7 +738,7 @@ register XkbColorPtr color; } color= &geom->colors[geom->num_colors]; color->pixel= pixel; - color->spec= (char *)_XkbAlloc(strlen(spec)+1); + color->spec= xalloc(strlen(spec)+1); if (!color->spec) return NULL; strcpy(color->spec,spec); @@ -852,7 +852,7 @@ XkbSectionPtr section; return NULL; if ((sz_doodads>0)&&(_XkbAllocDoodads(section,sz_doodads)!=Success)) { if (section->rows) { - _XkbFree(section->rows); + xfree(section->rows); section->rows= NULL; section->sz_rows= section->num_rows= 0; } diff --git a/xkb/XKBMAlloc.c b/xkb/XKBMAlloc.c index de8ee29fa..728c0297b 100644 --- a/xkb/XKBMAlloc.c +++ b/xkb/XKBMAlloc.c @@ -79,7 +79,7 @@ XkbClientMapPtr map; map->types= _XkbTypedRealloc(map->types,nTotalTypes,XkbKeyTypeRec); if (map->types==NULL) { - _XkbFree(prev_types); + xfree(prev_types); map->num_types= map->size_types= 0; return BadAlloc; } @@ -172,7 +172,7 @@ XkbServerMapPtr map; need= map->num_acts+nNewActions; map->acts= _XkbTypedRealloc(map->acts,need,XkbAction); if (map->acts==NULL) { - _XkbFree(prev_acts); + xfree(prev_acts); map->num_acts= map->size_acts= 0; return BadAlloc; } @@ -222,15 +222,15 @@ XkbCopyKeyType(XkbKeyTypePtr from,XkbKeyTypePtr into) if ((!from)||(!into)) return BadMatch; if (into->map) { - _XkbFree(into->map); + xfree(into->map); into->map= NULL; } if (into->preserve) { - _XkbFree(into->preserve); + xfree(into->preserve); into->preserve= NULL; } if (into->level_names) { - _XkbFree(into->level_names); + xfree(into->level_names); into->level_names= NULL; } *into= *from; @@ -299,10 +299,10 @@ KeyCode matchingKeys[XkbMaxKeyCount],nMatchingKeys; type= &xkb->map->types[type_ndx]; if (map_count==0) { if (type->map!=NULL) - _XkbFree(type->map); + xfree(type->map); type->map= NULL; if (type->preserve!=NULL) - _XkbFree(type->preserve); + xfree(type->preserve); type->preserve= NULL; type->map_count= 0; } @@ -313,7 +313,7 @@ KeyCode matchingKeys[XkbMaxKeyCount],nMatchingKeys; type->map=_XkbTypedRealloc(type->map,map_count,XkbKTMapEntryRec); if (!type->map) { if (prev_map) - _XkbFree(prev_map); + xfree(prev_map); return BadAlloc; } if (want_preserve) { @@ -325,12 +325,12 @@ KeyCode matchingKeys[XkbMaxKeyCount],nMatchingKeys; } if (!type->preserve) { if (prev_preserve) - _XkbFree(prev_preserve); + xfree(prev_preserve); return BadAlloc; } } else if (type->preserve!=NULL) { - _XkbFree(type->preserve); + xfree(type->preserve); type->preserve= NULL; } type->map_count= map_count; @@ -342,7 +342,7 @@ KeyCode matchingKeys[XkbMaxKeyCount],nMatchingKeys; type->level_names=_XkbTypedRealloc(type->level_names,new_num_lvls,Atom); if (!type->level_names) { if (prev_level_names) - _XkbFree(prev_level_names); + xfree(prev_level_names); return BadAlloc; } } @@ -422,7 +422,7 @@ KeyCode matchingKeys[XkbMaxKeyCount],nMatchingKeys; } } type->num_levels= new_num_lvls; - _XkbFree(xkb->map->syms); + xfree(xkb->map->syms); xkb->map->syms= newSyms; xkb->map->num_syms= nSyms; return Success; @@ -518,7 +518,7 @@ KeySym *newSyms; xkb->map->key_sym_map[i].offset = nSyms; nSyms+= nKeySyms; } - _XkbFree(xkb->map->syms); + xfree(xkb->map->syms); xkb->map->syms = newSyms; xkb->map->num_syms = nSyms; return &xkb->map->syms[xkb->map->key_sym_map[key].offset]; @@ -640,7 +640,7 @@ int tmp; xkb->map->key_sym_map= _XkbTypedRealloc(xkb->map->key_sym_map, (maxKC+1),XkbSymMapRec); if (!xkb->map->key_sym_map) { - _XkbFree(prev_key_sym_map); + xfree(prev_key_sym_map); return BadAlloc; } bzero((char *)&xkb->map->key_sym_map[xkb->max_key_code], @@ -658,7 +658,7 @@ int tmp; xkb->map->modmap= _XkbTypedRealloc(xkb->map->modmap, (maxKC+1),unsigned char); if (!xkb->map->modmap) { - _XkbFree(prev_modmap); + xfree(prev_modmap); return BadAlloc; } bzero((char *)&xkb->map->modmap[xkb->max_key_code],tmp); @@ -677,7 +677,7 @@ int tmp; xkb->server->behaviors=_XkbTypedRealloc(xkb->server->behaviors, (maxKC+1),XkbBehavior); if (!xkb->server->behaviors) { - _XkbFree(prev_behaviors); + xfree(prev_behaviors); return BadAlloc; } bzero((char *)&xkb->server->behaviors[xkb->max_key_code], @@ -695,7 +695,7 @@ int tmp; xkb->server->key_acts= _XkbTypedRealloc(xkb->server->key_acts, (maxKC+1),unsigned short); if (!xkb->server->key_acts) { - _XkbFree(prev_key_acts); + xfree(prev_key_acts); return BadAlloc; } bzero((char *)&xkb->server->key_acts[xkb->max_key_code], @@ -713,7 +713,7 @@ int tmp; xkb->server->vmodmap= _XkbTypedRealloc(xkb->server->vmodmap, (maxKC+1),unsigned short); if (!xkb->server->vmodmap) { - _XkbFree(prev_vmodmap); + xfree(prev_vmodmap); return BadAlloc; } bzero((char *)&xkb->server->vmodmap[xkb->max_key_code], @@ -732,7 +732,7 @@ int tmp; xkb->names->keys= _XkbTypedRealloc(xkb->names->keys, (maxKC+1),XkbKeyNameRec); if (!xkb->names->keys) { - _XkbFree(prev_keys); + xfree(prev_keys); return BadAlloc; } bzero((char *)&xkb->names->keys[xkb->max_key_code], @@ -793,7 +793,7 @@ XkbAction *newActs; xkb->server->key_acts[i]= nActs; nActs+= nKeyActs; } - _XkbFree(xkb->server->acts); + xfree(xkb->server->acts); xkb->server->acts = newActs; xkb->server->num_acts= nActs; return &xkb->server->acts[xkb->server->key_acts[key]]; @@ -816,42 +816,42 @@ XkbClientMapPtr map; XkbKeyTypePtr type; for (i=0,type=map->types;inum_types;i++,type++) { if (type->map!=NULL) { - _XkbFree(type->map); + xfree(type->map); type->map= NULL; } if (type->preserve!=NULL) { - _XkbFree(type->preserve); + xfree(type->preserve); type->preserve= NULL; } type->map_count= 0; if (type->level_names!=NULL) { - _XkbFree(type->level_names); + xfree(type->level_names); type->level_names= NULL; } } } - _XkbFree(map->types); + xfree(map->types); map->num_types= map->size_types= 0; map->types= NULL; } } if (what&XkbKeySymsMask) { if (map->key_sym_map!=NULL) { - _XkbFree(map->key_sym_map); + xfree(map->key_sym_map); map->key_sym_map= NULL; } if (map->syms!=NULL) { - _XkbFree(map->syms); + xfree(map->syms); map->size_syms= map->num_syms= 0; map->syms= NULL; } } if ((what&XkbModifierMapMask)&&(map->modmap!=NULL)) { - _XkbFree(map->modmap); + xfree(map->modmap); map->modmap= NULL; } if (freeMap) { - _XkbFree(xkb->map); + xfree(xkb->map); xkb->map= NULL; } return; @@ -868,31 +868,31 @@ XkbServerMapPtr map; what= XkbAllServerInfoMask; map= xkb->server; if ((what&XkbExplicitComponentsMask)&&(map->explicit!=NULL)) { - _XkbFree(map->explicit); + xfree(map->explicit); map->explicit= NULL; } if (what&XkbKeyActionsMask) { if (map->key_acts!=NULL) { - _XkbFree(map->key_acts); + xfree(map->key_acts); map->key_acts= NULL; } if (map->acts!=NULL) { - _XkbFree(map->acts); + xfree(map->acts); map->num_acts= map->size_acts= 0; map->acts= NULL; } } if ((what&XkbKeyBehaviorsMask)&&(map->behaviors!=NULL)) { - _XkbFree(map->behaviors); + xfree(map->behaviors); map->behaviors= NULL; } if ((what&XkbVirtualModMapMask)&&(map->vmodmap!=NULL)) { - _XkbFree(map->vmodmap); + xfree(map->vmodmap); map->vmodmap= NULL; } if (freeMap) { - _XkbFree(xkb->server); + xfree(xkb->server); xkb->server= NULL; } return; diff --git a/xkb/XKBMisc.c b/xkb/XKBMisc.c index 82d37d19f..9cb7061f3 100644 --- a/xkb/XKBMisc.c +++ b/xkb/XKBMisc.c @@ -507,7 +507,7 @@ unsigned changed,tmp; mc->changed|= changed; } if (interps!=ibuf) - _XkbFree(interps); + xfree(interps); return True; } diff --git a/xkb/maprules.c b/xkb/maprules.c index a0141a3d1..168c5277f 100644 --- a/xkb/maprules.c +++ b/xkb/maprules.c @@ -78,7 +78,7 @@ static void FreeInputLine(InputLine *line) { if (line->line!=line->buf) - _XkbFree(line->line); + xfree(line->line); line->line_num= 1; line->num_line= 0; line->sz_line= DFLT_LINE_SIZE; @@ -91,11 +91,11 @@ InputLineAddChar(InputLine *line,int ch) { if (line->num_line>=line->sz_line) { if (line->line==line->buf) { - line->line= (char *)_XkbAlloc(line->sz_line*2); + line->line= xalloc(line->sz_line*2); memcpy(line->line,line->buf,line->sz_line); } else { - line->line=(char *)_XkbRealloc((char *)line->line,line->sz_line*2); + line->line= xrealloc((char *)line->line,line->sz_line*2); } line->sz_line*= 2; } @@ -553,9 +553,9 @@ MakeMultiDefs(XkbRF_MultiDefsPtr mdefs, XkbRF_VarDefsPtr defs) static void FreeMultiDefs(XkbRF_MultiDefsPtr defs) { - if (defs->options) _XkbFree(defs->options); - if (defs->layout[1]) _XkbFree(defs->layout[1]); - if (defs->variant[1]) _XkbFree(defs->variant[1]); + if (defs->options) xfree(defs->options); + if (defs->layout[1]) xfree(defs->layout[1]); + if (defs->variant[1]) xfree(defs->variant[1]); } static void @@ -769,7 +769,7 @@ int len, ndx; } str= index(&str[0],'%'); } - name= (char *)_XkbAlloc(len+1); + name= xalloc(len+1); str= orig; outstr= name; while (*str!='\0') { @@ -819,7 +819,7 @@ int len, ndx; } *outstr++= '\0'; if (orig!=name) - _XkbFree(orig); + xfree(orig); return name; } @@ -988,32 +988,32 @@ XkbRF_GroupPtr group; return; if (rules->rules) { for (i=0,rule=rules->rules;inum_rules;i++,rule++) { - if (rule->model) _XkbFree(rule->model); - if (rule->layout) _XkbFree(rule->layout); - if (rule->variant) _XkbFree(rule->variant); - if (rule->option) _XkbFree(rule->option); - if (rule->keycodes) _XkbFree(rule->keycodes); - if (rule->symbols) _XkbFree(rule->symbols); - if (rule->types) _XkbFree(rule->types); - if (rule->compat) _XkbFree(rule->compat); - if (rule->geometry) _XkbFree(rule->geometry); + if (rule->model) xfree(rule->model); + if (rule->layout) xfree(rule->layout); + if (rule->variant) xfree(rule->variant); + if (rule->option) xfree(rule->option); + if (rule->keycodes) xfree(rule->keycodes); + if (rule->symbols) xfree(rule->symbols); + if (rule->types) xfree(rule->types); + if (rule->compat) xfree(rule->compat); + if (rule->geometry) xfree(rule->geometry); bzero((char *)rule,sizeof(XkbRF_RuleRec)); } - _XkbFree(rules->rules); + xfree(rules->rules); rules->num_rules= rules->sz_rules= 0; rules->rules= NULL; } if (rules->groups) { for (i=0, group=rules->groups;inum_groups;i++,group++) { - if (group->name) _XkbFree(group->name); - if (group->words) _XkbFree(group->words); + if (group->name) xfree(group->name); + if (group->words) xfree(group->words); } - _XkbFree(rules->groups); + xfree(rules->groups); rules->num_groups= 0; rules->groups= NULL; } if (freeRules) - _XkbFree(rules); + xfree(rules); return; } diff --git a/xkb/xkb.c b/xkb/xkb.c index b2fe11cae..445c55ffd 100644 --- a/xkb/xkb.c +++ b/xkb/xkb.c @@ -1363,7 +1363,7 @@ unsigned i,len; char *desc,*start; len= (rep->length*4)-(SIZEOF(xkbGetMapReply)-SIZEOF(xGenericReply)); - start= desc= (char *)xcalloc(1, len); + start= desc= xcalloc(1, len); if (!start) return BadAlloc; if ( rep->nTypes>0 ) @@ -2184,8 +2184,8 @@ unsigned first,last; if (maxRG>(int)xkbi->nRadioGroups) { int sz = maxRG*sizeof(XkbRadioGroupRec); if (xkbi->radioGroups) - xkbi->radioGroups=(XkbRadioGroupPtr)_XkbRealloc(xkbi->radioGroups,sz); - else xkbi->radioGroups= (XkbRadioGroupPtr)_XkbCalloc(1, sz); + xkbi->radioGroups= xrealloc(xkbi->radioGroups,sz); + else xkbi->radioGroups= xcalloc(1, sz); if (xkbi->radioGroups) { if (xkbi->nRadioGroups) bzero(&xkbi->radioGroups[xkbi->nRadioGroups], @@ -2627,7 +2627,7 @@ int size; size= rep->length*4; if (size>0) { - data = (char *)xalloc(size); + data = xalloc(size); if (data) { register unsigned i,bit; xkbModsWireDesc * grp; @@ -2994,7 +2994,7 @@ register unsigned bit; length = rep->length*4; if (length>0) { CARD8 *to; - to= map= (CARD8 *)xalloc(length); + to= map= xalloc(length); if (map) { xkbIndicatorMapWireDesc *wire = (xkbIndicatorMapWireDesc *)to; for (i=0,bit=1;iindicators,n); } - start = desc = (char *)xalloc(length); + start = desc = xalloc(length); if ( !start ) return BadAlloc; if (xkb->names) { @@ -4116,7 +4116,7 @@ _XkbSetNames(ClientPtr client, DeviceIntPtr dev, xkbSetNamesReq *stuff) tmp+= stuff->nKeyAliases*2; } else if (names->key_aliases!=NULL) { - _XkbFree(names->key_aliases); + xfree(names->key_aliases); names->key_aliases= NULL; names->num_key_aliases= 0; } @@ -4135,7 +4135,7 @@ _XkbSetNames(ClientPtr client, DeviceIntPtr dev, xkbSetNamesReq *stuff) tmp+= stuff->nRadioGroups; } else if (names->radio_groups) { - _XkbFree(names->radio_groups); + xfree(names->radio_groups); names->radio_groups= NULL; names->num_rg= 0; } @@ -4735,7 +4735,7 @@ XkbSendGeometry( ClientPtr client, if (geom!=NULL) { len= rep->length*4; - start= desc= (char *)xalloc(len); + start= desc= xalloc(len); if (!start) return BadAlloc; desc= XkbWriteCountedString(desc,geom->label_font,client->swapped); @@ -4829,7 +4829,7 @@ CARD16 len,*plen; swaps(plen,n); } len= *plen; - str= (char *)_XkbAlloc(len+1); + str= xalloc(len+1); if (str) { memcpy(str,&wire[2],len); str[len]= '\0'; @@ -5444,7 +5444,7 @@ unsigned char *wire,*str,*tmp,*legal; wire= *pWire; len= (*(unsigned char *)wire++); if (len>0) { - str= (unsigned char *)_XkbCalloc(1, len+1); + str= xcalloc(1, len+1); if (str) { tmp= str; for (i=0;inoClientException; @@ -5869,11 +5869,11 @@ ProcXkbGetKbdByName(ClientPtr client) XkbFreeKeyboard(new,XkbAllComponentsMask,True); new= NULL; } - if (names.keycodes) { _XkbFree(names.keycodes); names.keycodes= NULL; } - if (names.types) { _XkbFree(names.types); names.types= NULL; } - if (names.compat) { _XkbFree(names.compat); names.compat= NULL; } - if (names.symbols) { _XkbFree(names.symbols); names.symbols= NULL; } - if (names.geometry) { _XkbFree(names.geometry); names.geometry= NULL; } + if (names.keycodes) { xfree(names.keycodes); names.keycodes= NULL; } + if (names.types) { xfree(names.types); names.types= NULL; } + if (names.compat) { xfree(names.compat); names.compat= NULL; } + if (names.symbols) { xfree(names.symbols); names.symbols= NULL; } + if (names.geometry) { xfree(names.geometry); names.geometry= NULL; } return client->noClientException; } @@ -6188,7 +6188,7 @@ char * str; } WriteToClient(client,SIZEOF(xkbGetDeviceInfoReply), (char *)&rep); - str= (char*) xalloc(nameLen); + str= xalloc(nameLen); if (!str) return BadAlloc; XkbWriteCountedString(str,dev->name,client->swapped); diff --git a/xkb/xkbEvents.c b/xkb/xkbEvents.c index 9293c60be..489f309a4 100644 --- a/xkb/xkbEvents.c +++ b/xkb/xkbEvents.c @@ -1136,7 +1136,7 @@ ClientPtr client = NULL; autoCtrls= interest->autoCtrls; autoValues= interest->autoCtrlValues; client= interest->client; - _XkbFree(interest); + xfree(interest); found= True; } while ((!found)&&(interest->next)) { @@ -1146,7 +1146,7 @@ ClientPtr client = NULL; autoCtrls= victim->autoCtrls; autoValues= victim->autoCtrlValues; client= victim->client; - _XkbFree(victim); + xfree(victim); found= True; } interest = interest->next; diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c index 7c611bcc7..bea8ce0cc 100644 --- a/xkb/xkbInit.c +++ b/xkb/xkbInit.c @@ -222,19 +222,19 @@ static void XkbSetRulesUsed(XkbRMLVOSet *rmlvo) { if (XkbRulesUsed) - _XkbFree(XkbRulesUsed); + xfree(XkbRulesUsed); XkbRulesUsed= (rmlvo->rules?_XkbDupString(rmlvo->rules):NULL); if (XkbModelUsed) - _XkbFree(XkbModelUsed); + xfree(XkbModelUsed); XkbModelUsed= (rmlvo->model?_XkbDupString(rmlvo->model):NULL); if (XkbLayoutUsed) - _XkbFree(XkbLayoutUsed); + xfree(XkbLayoutUsed); XkbLayoutUsed= (rmlvo->layout?_XkbDupString(rmlvo->layout):NULL); if (XkbVariantUsed) - _XkbFree(XkbVariantUsed); + xfree(XkbVariantUsed); XkbVariantUsed= (rmlvo->variant?_XkbDupString(rmlvo->variant):NULL); if (XkbOptionsUsed) - _XkbFree(XkbOptionsUsed); + xfree(XkbOptionsUsed); XkbOptionsUsed= (rmlvo->options?_XkbDupString(rmlvo->options):NULL); if (XkbWantRulesProp) QueueWorkProc(XkbWriteRulesProp,NULL,NULL); @@ -246,27 +246,27 @@ XkbSetRulesDflts(XkbRMLVOSet *rmlvo) { if (rmlvo->rules) { if (XkbRulesDflt) - _XkbFree(XkbRulesDflt); + xfree(XkbRulesDflt); XkbRulesDflt= _XkbDupString(rmlvo->rules); } if (rmlvo->model) { if (XkbModelDflt) - _XkbFree(XkbModelDflt); + xfree(XkbModelDflt); XkbModelDflt= _XkbDupString(rmlvo->model); } if (rmlvo->layout) { if (XkbLayoutDflt) - _XkbFree(XkbLayoutDflt); + xfree(XkbLayoutDflt); XkbLayoutDflt= _XkbDupString(rmlvo->layout); } if (rmlvo->variant) { if (XkbVariantDflt) - _XkbFree(XkbVariantDflt); + xfree(XkbVariantDflt); XkbVariantDflt= _XkbDupString(rmlvo->variant); } if (rmlvo->options) { if (XkbOptionsDflt) - _XkbFree(XkbOptionsDflt); + xfree(XkbOptionsDflt); XkbOptionsDflt= _XkbDupString(rmlvo->options); } return; @@ -275,15 +275,15 @@ XkbSetRulesDflts(XkbRMLVOSet *rmlvo) void XkbDeleteRulesDflts(void) { - _XkbFree(XkbRulesDflt); + xfree(XkbRulesDflt); XkbRulesDflt = NULL; - _XkbFree(XkbModelDflt); + xfree(XkbModelDflt); XkbModelDflt = NULL; - _XkbFree(XkbLayoutDflt); + xfree(XkbLayoutDflt); XkbLayoutDflt = NULL; - _XkbFree(XkbVariantDflt); + xfree(XkbVariantDflt); XkbVariantDflt = NULL; - _XkbFree(XkbOptionsDflt); + xfree(XkbOptionsDflt); XkbOptionsDflt = NULL; XkbFreeKeyboard(xkb_cached_map, XkbAllComponentsMask, True); @@ -643,7 +643,7 @@ void XkbFreeInfo(XkbSrvInfoPtr xkbi) { if (xkbi->radioGroups) { - _XkbFree(xkbi->radioGroups); + xfree(xkbi->radioGroups); xkbi->radioGroups= NULL; } if (xkbi->mouseKeyTimer) { @@ -675,7 +675,7 @@ XkbFreeInfo(XkbSrvInfoPtr xkbi) XkbFreeKeyboard(xkbi->desc,XkbAllComponentsMask,True); xkbi->desc= NULL; } - _XkbFree(xkbi); + xfree(xkbi); return; } diff --git a/xkb/xkbLEDs.c b/xkb/xkbLEDs.c index a70ac841d..59cdba416 100644 --- a/xkb/xkbLEDs.c +++ b/xkb/xkbLEDs.c @@ -605,12 +605,12 @@ void XkbFreeSrvLedInfo(XkbSrvLedInfoPtr sli) { if ((sli->flags&XkbSLI_IsDefault)==0) { - if (sli->maps) _XkbFree(sli->maps); - if (sli->names) _XkbFree(sli->names); + if (sli->maps) xfree(sli->maps); + if (sli->names) xfree(sli->names); } sli->maps= NULL; sli->names= NULL; - _XkbFree(sli); + xfree(sli); return; } diff --git a/xkb/xkmread.c b/xkb/xkmread.c index dc8ab612d..206c40382 100644 --- a/xkb/xkmread.c +++ b/xkb/xkmread.c @@ -57,7 +57,7 @@ char *new; if (str==NULL) return NULL; - new= (char *)_XkbCalloc(strlen(str)+1,sizeof(char)); + new= xcalloc(strlen(str)+1,sizeof(char)); if (new) strcpy(new,str); return new; @@ -73,10 +73,10 @@ int newCount= *newCountRtrn; if (oldPtr==NULL) { if (newCount==0) return NULL; - oldPtr= _XkbCalloc(newCount,elemSize); + oldPtr= xcalloc(newCount,elemSize); } else if (oldCount Date: Thu, 30 Apr 2009 18:49:06 -0700 Subject: [PATCH 36/89] Fix a couple off-by-one array boundary checks. Error: Write outside array bounds at Xext/geext.c:406 in function 'GEWindowSetMask' [Symbolic analysis] In array dereference of cli->nextSib[extension] with index 'extension' Array size is 128 elements (of 4 bytes each), index <= 128 Error: Buffer overflow at dix/events.c:592 in function 'SetMaskForEvent' [Symbolic analysis] In array dereference of filters[deviceid] with index 'deviceid' Array size is 20 elements (of 512 bytes each), index >= 0 and index <= 20 Error: Read buffer overflow at hw/xfree86/loader/loader.c:226 in function 'LoaderOpen' [Symbolic analysis] In array dereference of refCount[new_handle] with index 'new_handle' Array size is 256 elements (of 4 bytes each), index >= 1 and index <= 256 These bugs were found using the Parfait source code analysis tool. For more information see http://research.sun.com/projects/parfait Signed-off-by: Alan Coopersmith Signed-off-by: Adam Jackson Acked-by: Peter Hutterer --- Xext/geext.c | 2 +- dix/events.c | 2 +- hw/xfree86/loader/loader.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Xext/geext.c b/Xext/geext.c index a58db038e..7ab99517d 100644 --- a/Xext/geext.c +++ b/Xext/geext.c @@ -364,7 +364,7 @@ GEWindowSetMask(ClientPtr pClient, DeviceIntPtr pDev, extension = (extension & 0x7F); - if (extension > MAXEXTENSIONS) + if (extension >= MAXEXTENSIONS) { ErrorF("Invalid extension number.\n"); return; diff --git a/dix/events.c b/dix/events.c index be88891a4..157f9a8a1 100644 --- a/dix/events.c +++ b/dix/events.c @@ -588,7 +588,7 @@ XineramaConfineCursorToWindow(DeviceIntPtr pDev, void SetMaskForEvent(int deviceid, Mask mask, int event) { - if (deviceid < 0 || deviceid > MAXDEVICES) + if (deviceid < 0 || deviceid >= MAXDEVICES) FatalError("SetMaskForEvent: bogus device id"); filters[deviceid][event] = mask; } diff --git a/hw/xfree86/loader/loader.c b/hw/xfree86/loader/loader.c index ab7736254..1803d0eb1 100644 --- a/hw/xfree86/loader/loader.c +++ b/hw/xfree86/loader/loader.c @@ -223,7 +223,7 @@ LoaderOpen(const char *module, const char *cname, int handle, * Find a free handle. */ new_handle = 1; - while (refCount[new_handle] && new_handle < MAX_HANDLE) + while (new_handle < MAX_HANDLE && refCount[new_handle]) new_handle++; if (new_handle == MAX_HANDLE) { From 1e816065e5ec3b9394dc1fa5815457a664e15fd9 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Fri, 8 May 2009 21:31:01 -0700 Subject: [PATCH 37/89] Don't printf NULL pointers on HAL connection error Fixes Solaris bug 6801386 Xorg core dumps on startup if hald not running http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6801386 Signed-off-by: Alan Coopersmith --- config/hal.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/config/hal.c b/config/hal.c index 36fa839fb..731d9b8fc 100644 --- a/config/hal.c +++ b/config/hal.c @@ -493,12 +493,14 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info) } if (!libhal_ctx_init(info->hal_ctx, &error)) { LogMessage(X_ERROR, "config/hal: couldn't initialise context: %s (%s)\n", - error.name, error.message); + error.name ? error.name : "unknown error", + error.message ? error.message : "null"); goto out_ctx; } if (!libhal_device_property_watch_all(info->hal_ctx, &error)) { LogMessage(X_ERROR, "config/hal: couldn't watch all properties: %s (%s)\n", - error.name, error.message); + error.name ? error.name : "unknown error", + error.message ? error.message : "null"); goto out_ctx2; } libhal_ctx_set_device_added(info->hal_ctx, device_added); @@ -518,7 +520,8 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info) out_ctx2: if (!libhal_ctx_shutdown(info->hal_ctx, &error)) LogMessage(X_WARNING, "config/hal: couldn't shut down context: %s (%s)\n", - error.name, error.message); + error.name ? error.name : "unknown error", + error.message ? error.message : "null"); out_ctx: libhal_ctx_free(info->hal_ctx); out_err: From c2b668e6fff11c52f2a3f0dc3f4d1fc2c5bcf3e6 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Tue, 5 May 2009 20:27:53 -0700 Subject: [PATCH 38/89] XQuartz: pbproxy standalone: added missing variable declarations. (cherry picked from commit 2d947d17a3ef5fb8cef959bff0eb08b8bb5b6548) --- hw/xquartz/pbproxy/app-main.m | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hw/xquartz/pbproxy/app-main.m b/hw/xquartz/pbproxy/app-main.m index cb0fa5744..d4b43c6ae 100644 --- a/hw/xquartz/pbproxy/app-main.m +++ b/hw/xquartz/pbproxy/app-main.m @@ -50,6 +50,9 @@ static void signal_handler (int sig) { } int main (int argc, const char *argv[]) { + const char *s; + int i; + #ifdef DEBUG printf("pid: %u\n", getpid()); #endif From ebfd6688d1927288155221e7a78fbca9f9293952 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Sun, 10 May 2009 23:27:56 -0400 Subject: [PATCH 39/89] Make compositing with transformed windows work again. The coordinate translation was broken in pretty much every way imaginable. --- fb/fbpict.c | 24 ++++++++---------------- render/mipict.c | 4 ++-- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/fb/fbpict.c b/fb/fbpict.c index 1355e9071..c89691d1b 100644 --- a/fb/fbpict.c +++ b/fb/fbpict.c @@ -159,22 +159,9 @@ fbComposite (CARD8 op, { pixman_image_t *src, *mask, *dest; - xDst += pDst->pDrawable->x; - yDst += pDst->pDrawable->y; - if (pSrc->pDrawable) - { - xSrc += pSrc->pDrawable->x; - ySrc += pSrc->pDrawable->y; - } - if (pMask && pMask->pDrawable) - { - xMask += pMask->pDrawable->x; - yMask += pMask->pDrawable->y; - } - - miCompositeSourceValidate (pSrc, xSrc, ySrc, width, height); + miCompositeSourceValidate (pSrc, xSrc - xDst, ySrc - yDst, width, height); if (pMask) - miCompositeSourceValidate (pMask, xMask, yMask, width, height); + miCompositeSourceValidate (pMask, xMask - xDst, yMask - yDst, width, height); src = image_from_pict (pSrc, TRUE); mask = image_from_pict (pMask, TRUE); @@ -292,7 +279,8 @@ create_bits_picture (PicturePtr pict, fbGetDrawable (pict->pDrawable, bits, stride, bpp, xoff, yoff); - bits = (FbBits*)((CARD8*)bits + yoff * stride * sizeof(FbBits) + xoff * (bpp / 8)); + bits = (FbBits*)((CARD8*)bits + + pict->pDrawable->y * stride * sizeof(FbBits) + pict->pDrawable->x * (bpp / 8)); image = pixman_image_create_bits ( pict->format, @@ -321,8 +309,12 @@ create_bits_picture (PicturePtr pict, { if (pict->clientClipType != CT_NONE) pixman_image_set_has_client_clip (image, TRUE); + + pixman_region_translate (pict->pCompositeClip, - pict->pDrawable->x, - pict->pDrawable->y); pixman_image_set_clip_region (image, pict->pCompositeClip); + + pixman_region_translate (pict->pCompositeClip, pict->pDrawable->x, pict->pDrawable->y); } /* Indexed table */ diff --git a/render/mipict.c b/render/mipict.c index 777f111e5..c653ec4f5 100644 --- a/render/mipict.c +++ b/render/mipict.c @@ -358,8 +358,6 @@ miCompositeSourceValidate (PicturePtr pPicture, if (pScreen->SourceValidate) { - x -= pPicture->pDrawable->x; - y -= pPicture->pDrawable->y; if (pPicture->transform) { xPoint points[4]; @@ -394,6 +392,8 @@ miCompositeSourceValidate (PicturePtr pPicture, width = xmax - xmin; height = ymax - ymin; } + x += pPicture->pDrawable->x; + y += pPicture->pDrawable->y; (*pScreen->SourceValidate) (pDrawable, x, y, width, height); } } From ac13145dbcb284293582435409d8a90f276785c5 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 11 May 2009 15:45:46 +1000 Subject: [PATCH 40/89] xkb: if kbd init failed, NULL out the pointers after freeing them (#21278) Reproducible: Configure a server that uses the keyboard driver with an invalid ruleset, e.g. (Option "XkbRules" "foobar"). Ensure that Option "AllowEmptyInput" is "off" in the ServerFlags or ServerLayout section. Start the server. After failing to init the keymap, the server will try to clean up after the device, double-freeing some xkb structs that have not been reset properly. X.Org Bug 21278 Signed-off-by: Peter Hutterer --- xkb/xkbInit.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c index bea8ce0cc..e707f7ad3 100644 --- a/xkb/xkbInit.c +++ b/xkb/xkbInit.c @@ -622,10 +622,13 @@ unwind_desc: XkbFreeKeyboard(xkb, 0, TRUE); unwind_info: xfree(xkbi); + dev->key->xkbInfo = NULL; unwind_kbdfeed: xfree(dev->kbdfeed); + dev->kbdfeed = NULL; unwind_key: xfree(dev->key); + dev->key = NULL; return FALSE; } From 0952d12717031e9dda9e48123bb922d0f4e81834 Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Mon, 11 May 2009 15:27:46 -0400 Subject: [PATCH 41/89] xselinux: Relax ownership restriction on SetSelectionUseContext. Instead, clients should keep track of the selection instances they use. --- Xext/xselinux.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Xext/xselinux.c b/Xext/xselinux.c index 2c7262140..3a6f0960d 100644 --- a/Xext/xselinux.c +++ b/Xext/xselinux.c @@ -1346,15 +1346,6 @@ ProcSELinuxSetCreateContext(ClientPtr client, unsigned offset) goto out; privPtr = &serverClient->devPrivates; } - else if (offset == USE_SEL) { - /* Selection use context currently requires no selections owned */ - Selection *pSel; - for (pSel = CurrentSelections; pSel; pSel = pSel->next) - if (pSel->client == client) { - rc = BadMatch; - goto out; - } - } ptr = dixLookupPrivate(privPtr, subjectKey); pSid = (security_id_t *)(ptr + offset); From f250eea2e90fc50bec5214c2f41132b95edc2c46 Mon Sep 17 00:00:00 2001 From: Jerome Glisse Date: Mon, 11 May 2009 22:52:46 +0200 Subject: [PATCH 42/89] DRI2: update DRI2 private drawable width & height according to X drawable --- hw/xfree86/dri2/dri2.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index 1d49d7c65..385c5e8d4 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -257,6 +257,8 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height, pPriv->buffers = buffers; pPriv->bufferCount = *out_count; + pPriv->width = pDraw->width; + pPriv->height = pDraw->height; *width = pPriv->width; *height = pPriv->height; From b746a00cffca5c553b607a8e9c1074294a23b443 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Tue, 12 May 2009 16:11:01 -0700 Subject: [PATCH 43/89] Resync COPYING file with notices in code base as of xorg-server-1.6.1 Remove notices for code no longer in tree (Xprint, Xgl, kdrive, cfb, etc.) Add/update notices for new/changed code in tree Signed-off-by: Alan Coopersmith --- COPYING | 793 ++++++++------------------------------------------------ 1 file changed, 111 insertions(+), 682 deletions(-) diff --git a/COPYING b/COPYING index 6faa4b196..f92d653d9 100644 --- a/COPYING +++ b/COPYING @@ -7,10 +7,12 @@ Juliusz Chroboczek sorts before Intel Corporation sorts before Daniel Stone). Copyright © 2000-2001 Juliusz Chroboczek +Copyright © 1998 Egbert Eich Copyright © 2006-2007 Intel Corporation Copyright © 2006 Nokia Corporation Copyright © 2006-2008 Peter Hutterer Copyright © 1999 Keith Packard +Copyright © 2007-2008 Red Hat, Inc. Copyright © 2005-2007 Daniel Stone Copyright © 2006-2008 Simon Thum Copyright © 2006 Luc Verhaegen @@ -88,30 +90,6 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 2005 Kean Johnston -Copyright 1999 by The XFree86 Project, Inc. - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the names of The XFree86 Project, Inc -and Kean Johnston not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -The XFree86 Project, Inc and Kean Johnston make no representations -about the suitability of this software for any purpose. It is provided -"as is" without express or implied warranty. - -THE XFREE86 PROJECT, INC AND KEAN JOHNSTON DISCLAIM ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THOMAS ROELL, DAVID WEXELBLAT -OR KEAN JOHNSTON BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL -DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - Copyright 1985-1998, 2001 The Open Group Copyright 2002 Red Hat Inc., Durham, North Carolina. @@ -161,6 +139,7 @@ in this Software without prior written authorization from the X Consortium. Copyright © 1999-2000 SuSE, Inc. +Copyright © 2007 Red Hat, Inc. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that @@ -180,28 +159,6 @@ OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright © 2005 Novell, Inc. - -Permission to use, copy, modify, distribute, and sell this software -and its documentation for any purpose is hereby granted without -fee, provided that the above copyright notice appear in all copies -and that both that copyright notice and this permission notice -appear in supporting documentation, and that the name of -Novell, Inc. not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -Novell, Inc. makes no representations about the suitability of this -software for any purpose. It is provided "as is" without express or -implied warranty. - -NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN -NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA. All Rights Reserved @@ -228,32 +185,6 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA. -All Rights Reserved - -Permission to use, copy, modify, and distribute this -software and its documentation for any purpose and without -fee is hereby granted, provided that the above copyright no- -tice appear in all copies and that both that copyright no- -tice and this permission notice appear in supporting docu- -mentation, and that the names of Sun or The Open Group -not be used in advertising or publicity pertaining to -distribution of the software without specific prior -written permission. Sun and The Open Group make no -representations about the suitability of this software for -any purpose. It is provided "as is" without any express or -implied warranty. - -SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT- -NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI- -ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH -THE USE OR PERFORMANCE OF THIS SOFTWARE. - - Copyright © 2006 Sun Microsystems Permission to use, copy, modify, distribute, and sell this software and its @@ -321,26 +252,6 @@ OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1987-1992 by Digital Equipment Corp., Maynard, MA -X11R6 Changes Copyright (c) 1994 by Robert Chesler of Absol-Puter, Hudson, NH. - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Digital not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -DIGITAL AND ABSOL-PUTER DISCLAIM ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS, IN NO EVENT SHALL DIGITAL OR ABSOL-PUTER BE LIABLE FOR ANY -SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - Copyright 1997 Digital Equipment Corporation. All rights reserved. @@ -545,7 +456,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Copyright 2005 Red Hat, Inc. +Copyright © 2008 Red Hat, Inc. +Partly based on code Copyright © 2000 SuSE, Inc. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without @@ -558,14 +470,31 @@ Hat makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. -RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +Red Hat DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN -NO EVENT SHALL RED HAT BE LIABLE FOR ANY SPECIAL, INDIRECT OR +NO EVENT SHALL Red Hat BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of SuSE not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. SuSE makes no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE +BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + Copyright (c) 2006, Red Hat, Inc. @@ -590,7 +519,7 @@ used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from Red Hat. -Copyright © 2006 Red Hat, Inc +Copyright © 2006, 2007 Red Hat, Inc Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without @@ -693,26 +622,6 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Copyright IBM Corporation 1987,1988,1989 -All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of IBM not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - - (C) Copyright IBM Corporation 2003 All Rights Reserved. @@ -931,29 +840,6 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 2000 Intel Corporation. All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sub license, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice (including the -next paragraph) shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. -IN NO EVENT SHALL INTEL, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - Copyright © 2004 Nokia Permission to use, copy, modify, distribute, and sell this software and its @@ -975,30 +861,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1998-2003 VIA Technologies, Inc. -Copyright 2001-2003 S3 Graphics, Inc. -All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sub license, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice (including the -next paragraph) shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - - (c)Copyright 1988,1991 Adobe Systems Incorporated. All rights reserved. @@ -1106,60 +968,26 @@ Copyright © 1999 Keith Packard Copyright © 2000 Compaq Computer Corporation Copyright © 2002 MontaVista Software Inc. Copyright © 2005 OpenedHand Ltd. +Copyright © 2006 Nokia Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting -documentation, and that the name of Keith Packard or Compaq not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Keith Packard and Compaq makes no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. +documentation, and that the name of the authors and/or copyright holders +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. The authors and/or +copyright holders make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. -KEITH PACKARD AND COMPAQ DISCLAIM ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, -IN NO EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Michael Taht or MontaVista not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Michael Taht and Montavista make no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -MICHAEL TAHT AND MONTAVISTA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, -IN NO EVENT SHALL EITHER BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Matthew Allum or OpenedHand not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Matthew Allum and OpenedHand make no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -MATTHEW ALLUM AND OPENEDHAND DISCLAIM ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, -IN NO EVENT SHALL EITHER BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. +THE AUTHORS AND/OR COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL THE AUTHORS AND/OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Copyright 1993 by Davor Matic @@ -1173,31 +1001,6 @@ the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. -(c) Copyright 1996 by Sebastien Marineau - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -HOLGER VEIT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -Except as contained in this notice, the name of Sebastien Marineau shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from Sebastien Marineau. - - Copyright (C) 2001-2004 Harold L Hunt II All Rights Reserved. @@ -1270,29 +1073,6 @@ CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany -Copyright 1993 by David Dawes - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the names of Thomas Roell and David Dawes -not be used in advertising or publicity pertaining to distribution of -the software without specific, written prior permission. Thomas Roell and -David Dawes makes no representations about the suitability of this -software for any purpose. It is provided "as is" without express or -implied warranty. - -THOMAS ROELL AND DAVID DAWES DISCLAIMS ALL WARRANTIES WITH REGARD TO -THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS, IN NO EVENT SHALL THOMAS ROELL OR DAVID DAWES BE LIABLE FOR -ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - Copyright 1990,91,92,93 by Thomas Roell, Germany. Copyright 1991,92,93 by SGCS (Snitily Graphics Consulting Services), USA. @@ -1316,124 +1096,6 @@ CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 2001-2005 by Kean Johnston -Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany -Copyright 1993 by David Wexelblat - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the names of Thomas Roell, David Wexelblat -and Kean Johnston not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -Thomas Roell, David Wexelblat and Kean Johnston make no representations -about the suitability of this software for any purpose. It is provided -"as is" without express or implied warranty. - -THOMAS ROELL, DAVID WEXELBLAT AND KEAN JOHNSTON DISCLAIM ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THOMAS ROELLm DAVID WEXELBLAT -OR KEAN JOHNSTON BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL -DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -Copyright 2001-2005 by Kean Johnston -Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany -Copyright 1993 by David Dawes -Copyright 1993 by David Wexelblat - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the names of Thomas Roell, David Dawes -and Kean Johnston not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -Thomas Roell, David Dawes and Kean Johnston make no representations -about the suitability of this software for any purpose. It is provided -"as is" without express or implied warranty. - -THOMAS ROELL, DAVID DAWES AND KEAN JOHNSTON DISCLAIM ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THOMAS ROELLm DAVID WEXELBLAT -OR KEAN JOHNSTON BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL -DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -Copyright (c) 2001-2003 Torrey T. Lyons. -All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -TORREY T. LYONS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -Except as contained in this notice, the name(s) of the above copyright -holders shall not be used in advertising or otherwise to promote the sale, -use or other dealings in this Software without prior written authorization. - - -Copyright © 2004 David Reveman - -Permission to use, copy, modify, distribute, and sell this software -and its documentation for any purpose is hereby granted without -fee, provided that the above copyright notice appear in all copies -and that both that copyright notice and this permission notice -appear in supporting documentation, and that the name of -David Reveman not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -David Reveman makes no representations about the suitability of this -software for any purpose. It is provided "as is" without express or -implied warranty. - -DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN -NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -Copyright 1993 Gerrit Jan Akkerman - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Gerrit Jan Akkerman not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -GERRIT JAN AKKERMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, -IN NO EVENT SHALL GERRIT JAN AKKERMAN BE LIABLE FOR ANY SPECIAL, INDIRECT -OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright 1998 by Alan Hourihane, Wigan, England. Copyright 2000-2002 by Alan Hourihane, Flint Mountain, North Wales. @@ -1504,27 +1166,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1993 by Thomas Mueller - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Thomas Mueller not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Thomas Mueller makes no representations -about the suitability of this software for any purpose. It is provided -"as is" without express or implied warranty. - -THOMAS MUELLER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL THOMAS MUELLER BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright 2004, Egbert Eich Permission is hereby granted, free of charge, to any person obtaining a copy @@ -1662,27 +1303,6 @@ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Copyright 2001,2005 by Kean Johnston - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name Kean Johnston not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Kean Johnston makes no -representations about the suitability of this software for any purpose. -It is provided "as is" without express or implied warranty. - -KEAN JOHNSTON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL KEAN JOHNSTON BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright 1992 by Rich Murphey Copyright 1993 by David Wexelblat @@ -1729,69 +1349,6 @@ CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright © 2004 Franco Catrin - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Franco Catrin not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Franco Catrin makes no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -FRANCO CATRIN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL FRANCO CATRIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - -Copyright © 2004 Ralph Thomas - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Ralph Thomas not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Ralph Thomas makes no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -RALPH THOMAS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL RALPH THOMAS BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - -Copyright © 2004 Damien Ciabrini - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Anders Carlsson not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Anders Carlsson makes no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -DAMIEN CIABRINI DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL ANDERS CARLSSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright © 2003-2004 Anders Carlsson Permission to use, copy, modify, distribute, and sell this software and its @@ -1836,31 +1393,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan. -Copyright 2003 Eric Anholt -All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sub license, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice (including the -next paragraph) shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. - - Copyright © 2004 PillowElephantBadgerBankPond Permission to use, copy, modify, distribute, and sell this software and its @@ -1882,27 +1414,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 2004 by Costas Stylianou +44(0)7850 394095 - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Costas Sylianou not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Costas Stylianou makes no representations -about the suitability of this software for any purpose. It is provided -"as is" without express or implied warranty. - -COSTAS STYLIANOU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL COSTAS STYLIANOU BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright (c) 1998 Todd C. Miller Permission to use, copy, modify, and distribute this software for any @@ -1918,32 +1429,6 @@ OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright (C) 1995 Pascal Haible. All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -PASCAL HAIBLE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -Except as contained in this notice, the name of Pascal Haible shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from -Pascal Haible. - - Copyright © 2003-2004 Philip Blundell Permission to use, copy, modify, distribute, and sell this software and its @@ -2005,16 +1490,19 @@ Copyright © 2004, 2005 Red Hat, Inc. Copyright © 2004 Nicholas Miell Copyright © 2005 Trolltech AS Copyright © 2006 Intel Corporation +Copyright © 2006-2007 Keith Packard +Copyright © 2008 Red Hat, Inc +Copyright © 2008 George Sapountzis Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Red Hat not be used in advertising or +the above copyright notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting documentation, and +that the name of the copyright holders not be used in advertising or publicity pertaining to distribution of the software without specific, -written prior permission. Red Hat makes no representations about the -suitability of this software for any purpose. It is provided "as is" -without express or implied warranty. +written prior permission. The copyright holders make no representations +about the suitability of this software for any purpose. It is provided "as +is" without express or implied warranty. THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND @@ -2053,7 +1541,8 @@ Copyright 1987, 1998 The Open Group Copyright © 1998-1999, 2001 The XFree86 Project, Inc. Copyright © 2000 VA Linux Systems, Inc. Copyright (c) 2000, 2001 Nokia Home Communications -Copyright 2003-2006 Sun Microsystems, Inc. +Copyright 2003-2006, 2008 Sun Microsystems, Inc. +Copyright © 2007, 2008 Red Hat, Inc. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a @@ -2082,33 +1571,6 @@ or other dealings in this Software without prior written authorization of the copyright holder. -Copyright (c) 1998-1999 Shunsuke Akiyama . -Copyright (c) 1998-1999 X-TrueType Server Project -Copyright (c) 1999 Lennart Augustsson -All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - - Copyright 1996 by Thomas E. Dickey All Rights Reserved @@ -2131,45 +1593,14 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996, 2004 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. -Copyright (c) 2003-2005 Roland Mainz - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. - - Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. Copyright (c) 2001 Andreas Monitzer. Copyright (c) 2001-2004 Greg Parker. Copyright (c) 2001-2004 Torrey T. Lyons Copyright (c) 2002-2003 Apple Computer, Inc. Copyright (c) 2004-2005 Alexander Gottwald -Copyright (c) 2002-2007 Apple Inc. +Copyright (c) 2002-2009 Apple Inc. +Copyright (c) 2007 Jeremy Huddleston All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a @@ -2196,6 +1627,8 @@ use or other dealings in this Software without prior written authorization. Copyright (C) 1999,2000 by Eric Sunshine +Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria. + All rights reserved. Redistribution and use in source and binary forms, with or without @@ -2274,6 +1707,7 @@ the author(s). Copyright (C) 1996-1999 SciTech Software, Inc. Copyright (C) David Mosberger-Tang Copyright (C) 1999 Egbert Eich +Copyright (C) 2008 Bart Trojanowski, Symbio Technologies, LLC Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, @@ -2360,26 +1794,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1994 by Glenn G. Lai -All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyr notice and this permission notice appear in -supporting documentation, and that the name of Glenn G. Lai not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -Glenn G. Lai DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - - Copyright 1990, 1991 by Thomas Roell, Dinkelscherben, Germany Copyright 1992 by David Dawes Copyright 1992 by Jim Tsillas @@ -2453,28 +1867,6 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Copyright (C) 1996 David S. Miller (davem@redhat.com) -Copyright (C) 1999 Jakub Jelinek (jj@ultra.linux.cz) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -JAKUB JELINEK OR DAVID MILLER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - - Copyright 1997,1998 by UCHIYAMA Yasushi Permission to use, copy, modify, distribute, and sell this software and its @@ -2557,28 +1949,10 @@ AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Copyright © 2006-2007 Keith Packard - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that copyright -notice and this permission notice appear in supporting documentation, and -that the name of the copyright holders not be used in advertising or -publicity pertaining to distribution of the software without specific, -written prior permission. The copyright holders make no representations -about the suitability of this software for any purpose. It is provided "as -is" without express or implied warranty. - -THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -OF THIS SOFTWARE. Copyright 2006 Adam Jackson. +Copyright 2007 Red Hat, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), @@ -2597,3 +1971,58 @@ FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Copyright © 2007 OpenedHand Ltd + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of OpenedHand Ltd not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. OpenedHand Ltd makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +OpenedHand Ltd DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL OpenedHand Ltd BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright (c) 1989, 1990, 1993, 1994 + The Regents of the University of California. All rights reserved. + +This code is derived from software contributed to Berkeley by +Chris Torek. + +This code is derived from software contributed to Berkeley by +Michael Rendell of Memorial University of Newfoundland. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. From f3c61377d0fb1f09a18833995556fc9ffd11e097 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Tue, 12 May 2009 18:27:09 -0700 Subject: [PATCH 44/89] COPYING file updates for git master changes since 1.6 branch Signed-off-by: Alan Coopersmith --- COPYING | 45 ++++++++++++--------------------------------- 1 file changed, 12 insertions(+), 33 deletions(-) diff --git a/COPYING b/COPYING index f92d653d9..b2cf8b26c 100644 --- a/COPYING +++ b/COPYING @@ -11,10 +11,11 @@ Copyright © 1998 Egbert Eich Copyright © 2006-2007 Intel Corporation Copyright © 2006 Nokia Corporation Copyright © 2006-2008 Peter Hutterer +Copyright © 2009 NVIDIA Corporation Copyright © 1999 Keith Packard -Copyright © 2007-2008 Red Hat, Inc. -Copyright © 2005-2007 Daniel Stone -Copyright © 2006-2008 Simon Thum +Copyright © 2007-2009 Red Hat, Inc. +Copyright © 2005-2008 Daniel Stone +Copyright © 2006-2009 Simon Thum Copyright © 2006 Luc Verhaegen Permission is hereby granted, free of charge, to any person obtaining a @@ -45,6 +46,7 @@ licenses. Copyright (C) 1994-2003 The XFree86 Project, Inc. All Rights Reserved. +Copyright (C) Colin Harrison 2005-2008 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in @@ -68,16 +70,16 @@ be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the XFree86 Project. -Copyright 1997-2003 by The XFree86 Project, Inc. +Copyright 1997 by The XFree86 Project, Inc. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting -documentation, and that the names of Orest Zborowski and David Wexelblat +documentation, and that the name of the XFree86 Project, Inc. not be used in advertising or publicity pertaining to distribution of -the software without specific, written prior permission. Orest Zborowski -and David Wexelblat make no representations about the suitability of this +the software without specific, written prior permission. The Xfree86 +Project, Inc. makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. @@ -597,7 +599,7 @@ authorization from the X Consortium. Copyright 1998-2000 Precision Insight, Inc., Cedar Park, Texas. Copyright 2000 VA Linux Systems, Inc. -Copyright (c) 2002 Apple Computer, Inc. +Copyright (c) 2002, 2008, 2009 Apple Computer, Inc. Copyright (c) 2003-2004 Torrey T. Lyons. All Rights Reserved. @@ -1001,8 +1003,8 @@ the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. -Copyright (C) 2001-2004 Harold L Hunt II -All Rights Reserved. +Copyright (C) 2001-2004 Harold L Hunt II All Rights Reserved. +Copyright (C) Colin Harrison 2005-2008 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -1280,29 +1282,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright (C) 1999 Jeff Hartmann -Copyright (C) 1999 Precision Insight, Inc. -Copyright (C) 1999 Xi Graphics, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - Copyright 1992 by Rich Murphey Copyright 1993 by David Wexelblat From fc3ce861cdab8606610726ce7c53f57d950c2407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Thu, 14 May 2009 11:35:25 +0200 Subject: [PATCH 45/89] randr12: Fix calculation of gamma ramp values. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The reciprocal gamma value was missed in the first copy and this mistake was propagated to the second one. Signed-off-by: Michel Dänzer --- hw/xfree86/modes/xf86Crtc.c | 6 +++--- hw/xfree86/modes/xf86RandR12.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c index 1b241cd33..0ab2f3df9 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c @@ -2228,19 +2228,19 @@ xf86CrtcSetInitialGamma(xf86CrtcPtr crtc, float gamma_red, float gamma_green, red[i] = i << 8; else red[i] = (CARD16)(pow((double)i/(double)(size - 1), - (double)gamma_red) * (double)(size - 1) * 256); + 1. / (double)gamma_red) * (double)(size - 1) * 256); if (gamma_green == 1.0) green[i] = i << 8; else green[i] = (CARD16)(pow((double)i/(double)(size - 1), - (double)gamma_green) * (double)(size - 1) * 256); + 1. / (double)gamma_green) * (double)(size - 1) * 256); if (gamma_blue == 1.0) blue[i] = i << 8; else blue[i] = (CARD16)(pow((double)i/(double)(size - 1), - (double)gamma_blue) * (double)(size - 1) * 256); + 1. / (double)gamma_blue) * (double)(size - 1) * 256); } /* Default size is 256, so anything else is failure. */ diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c index f941a3b4a..c71cfe5c3 100644 --- a/hw/xfree86/modes/xf86RandR12.c +++ b/hw/xfree86/modes/xf86RandR12.c @@ -1703,7 +1703,7 @@ gamma_to_ramp(float gamma, CARD16 *ramp, int size) if (gamma == 1.0) ramp[i] = i << 8; else - ramp[i] = (CARD16)(pow((double)i / (double)(size - 1), gamma) + ramp[i] = (CARD16)(pow((double)i / (double)(size - 1), 1. / gamma) * (double)(size - 1) * 256); } } From 2c1190f888515292de01e60fe74657c34b99fd9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Thu, 14 May 2009 11:39:16 +0200 Subject: [PATCH 46/89] randr12: Initialize and keep track of updates to VidMode extension gamma value. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This way clients querying the gamma value via the VidMode extension at least get the last value set via the same, rather than always something bogus. Signed-off-by: Michel Dänzer --- hw/xfree86/common/xf86Helper.c | 10 +++++----- hw/xfree86/modes/xf86RandR12.c | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c index 0db77178a..61b3390e2 100644 --- a/hw/xfree86/common/xf86Helper.c +++ b/hw/xfree86/common/xf86Helper.c @@ -919,11 +919,6 @@ Bool xf86SetGamma(ScrnInfoPtr scrp, Gamma gamma) { MessageType from = X_DEFAULT; - /* Pretend we succeeded if we support better a gamma system. - * This avoids a confusing message. - */ - if (xf86_crtc_supports_gamma(scrp)) - return TRUE; #if 0 xf86MonPtr DDC = (xf86MonPtr)(scrp->monitor->DDC); #endif @@ -955,6 +950,11 @@ xf86SetGamma(ScrnInfoPtr scrp, Gamma gamma) scrp->gamma.green = 1.0; scrp->gamma.blue = 1.0; } + /* Pretend we succeeded if we support better a gamma system. + * This avoids a confusing message. + */ + if (xf86_crtc_supports_gamma(scrp)) + return TRUE; xf86DrvMsg(scrp->scrnIndex, from, "Using gamma correction (%.1f, %.1f, %.1f)\n", scrp->gamma.red, scrp->gamma.green, scrp->gamma.blue); diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c index c71cfe5c3..1e3b70c09 100644 --- a/hw/xfree86/modes/xf86RandR12.c +++ b/hw/xfree86/modes/xf86RandR12.c @@ -1740,6 +1740,8 @@ xf86RandR12ChangeGamma(int scrnIndex, Gamma gamma) xfree(points); + pScrn->gamma = gamma; + return Success; } From 2075d4bf9e53b8baef0b919da6c44771220cd4a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Thu, 14 May 2009 11:46:41 +0200 Subject: [PATCH 47/89] glx: If a destroyed window is bound to the current context, make it not current. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avoids subsequent crashes due to stale pointers to the DrawableRec, see https://bugs.freedesktop.org/show_bug.cgi?id=21132#c15 and previous comments. Signed-off-by: Michel Dänzer --- glx/glxext.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/glx/glxext.c b/glx/glxext.c index 93391e9fd..6bc7bef8e 100644 --- a/glx/glxext.c +++ b/glx/glxext.c @@ -126,6 +126,10 @@ static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid) __GLXcontext *c; for (c = glxAllContexts; c; c = c->next) { + if (c->isCurrent && (c->drawPriv == glxPriv || c->readPriv == glxPriv)) { + (*c->loseCurrent)(c); + __glXFlushContextCache(); + } if (c->drawPriv == glxPriv) c->drawPriv = NULL; if (c->readPriv == glxPriv) From c66cf7b64c7bcb31c81b9fde27cc40c1440753b1 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Thu, 14 May 2009 06:53:08 -0400 Subject: [PATCH 48/89] Update several of my and/or Red Hat's licenses to standard form. --- COPYING | 70 +---------------------------- dix/window.c | 29 ++++++------ hw/xfree86/ddc/interpret_edid.c | 21 ++++----- hw/xfree86/ddc/print_edid.c | 21 ++++----- hw/xfree86/xf8_16bpp/cfb8_16.h | 15 ++++--- hw/xfree86/xf8_16bpp/xf8_16module.c | 15 ++++--- mi/mibstore.c | 21 ++++----- os/backtrace.c | 21 ++++----- 8 files changed, 75 insertions(+), 138 deletions(-) diff --git a/COPYING b/COPYING index b2cf8b26c..09f330e0f 100644 --- a/COPYING +++ b/COPYING @@ -11,6 +11,7 @@ Copyright © 1998 Egbert Eich Copyright © 2006-2007 Intel Corporation Copyright © 2006 Nokia Corporation Copyright © 2006-2008 Peter Hutterer +Copyright © 2006 Adam Jackson Copyright © 2009 NVIDIA Corporation Copyright © 1999 Keith Packard Copyright © 2007-2009 Red Hat, Inc. @@ -498,51 +499,6 @@ OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright (c) 2006, Red Hat, Inc. - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -RED HAT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of Red Hat shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from Red Hat. - - -Copyright © 2006, 2007 Red Hat, Inc - -Permission to use, copy, modify, distribute, and sell this software -and its documentation for any purpose is hereby granted without -fee, provided that the above copyright notice appear in all copies -and that both that copyright notice and this permission notice -appear in supporting documentation, and that the name of Red Hat, -Inc not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior -permission. Red Hat, Inc makes no representations about the -suitability of this software for any purpose. It is provided "as -is" without express or implied warranty. - -RED HAT, INC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN -NO EVENT SHALL RED HAT, INC BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - Copyright © 2006 Red Hat, Inc. (C) Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. All Rights Reserved. @@ -1928,30 +1884,6 @@ AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -Copyright 2006 Adam Jackson. -Copyright 2007 Red Hat, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -on the rights to use, copy, modify, merge, publish, distribute, sub -license, and/or sell copies of the Software, and to permit persons to whom -the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice (including the next -paragraph) shall be included in all copies or substantial portions of the -Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - Copyright © 2007 OpenedHand Ltd Permission to use, copy, modify, distribute, and sell this software and its diff --git a/dix/window.c b/dix/window.c index 324ddb71e..df8ac53f7 100644 --- a/dix/window.c +++ b/dix/window.c @@ -2,25 +2,24 @@ Copyright (c) 2006, Red Hat, Inc. -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -RED HAT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of Red Hat shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from Red Hat. +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. Copyright 1987, 1998 The Open Group diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c index c0e3df96c..3edfd1fb5 100644 --- a/hw/xfree86/ddc/interpret_edid.c +++ b/hw/xfree86/ddc/interpret_edid.c @@ -3,22 +3,23 @@ * Copyright 2007 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software") - * to deal in the software without restriction, including without limitation - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, and/or sell copies of the Software, and to permit persons to whom - * them Software is furnished to do so, subject to the following conditions: + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTIBILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. * * interpret_edid.c: interpret a primary EDID block */ diff --git a/hw/xfree86/ddc/print_edid.c b/hw/xfree86/ddc/print_edid.c index 7b6e2989a..e16dcbb9a 100644 --- a/hw/xfree86/ddc/print_edid.c +++ b/hw/xfree86/ddc/print_edid.c @@ -3,22 +3,23 @@ * Copyright 2007 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software") - * to deal in the software without restriction, including without limitation - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, and/or sell copies of the Software, and to permit persons to whom - * them Software is furnished to do so, subject to the following conditions: + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTIBILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. * * print_edid.c: print out all information retrieved from display device */ diff --git a/hw/xfree86/xf8_16bpp/cfb8_16.h b/hw/xfree86/xf8_16bpp/cfb8_16.h index d847a60c1..b6ab955f3 100644 --- a/hw/xfree86/xf8_16bpp/cfb8_16.h +++ b/hw/xfree86/xf8_16bpp/cfb8_16.h @@ -4,9 +4,9 @@ * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the @@ -14,10 +14,11 @@ * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. */ #ifndef _CFB8_16_H diff --git a/hw/xfree86/xf8_16bpp/xf8_16module.c b/hw/xfree86/xf8_16bpp/xf8_16module.c index dd4f011b1..6a4529ae8 100644 --- a/hw/xfree86/xf8_16bpp/xf8_16module.c +++ b/hw/xfree86/xf8_16bpp/xf8_16module.c @@ -4,9 +4,9 @@ * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the @@ -14,10 +14,11 @@ * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. */ #ifdef HAVE_XORG_CONFIG_H diff --git a/mi/mibstore.c b/mi/mibstore.c index ef89a76c7..262b4944d 100644 --- a/mi/mibstore.c +++ b/mi/mibstore.c @@ -2,22 +2,23 @@ * Copyright 2007 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software") - * to deal in the software without restriction, including without limitation - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, and/or sell copies of the Software, and to permit persons to whom - * them Software is furnished to do so, subject to the following conditions: + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTIBILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. */ #ifdef HAVE_DIX_CONFIG_H diff --git a/os/backtrace.c b/os/backtrace.c index 19ff58d7a..3cfae3e16 100644 --- a/os/backtrace.c +++ b/os/backtrace.c @@ -2,22 +2,23 @@ * Copyright 2008 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software") - * to deal in the software without restriction, including without limitation - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, and/or sell copies of the Software, and to permit persons to whom - * them Software is furnished to do so, subject to the following conditions: + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTIBILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. */ #ifdef HAVE_DIX_CONFIG_H From ed9aecf8517bf74e943e3e5dd3ee407524e8f122 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Thu, 14 May 2009 06:55:21 -0400 Subject: [PATCH 49/89] COPYING: SGI FreeB 1.1 -> SGI FreeB 2.0 --- COPYING | 89 ++++++++++++--------------------------------------------- 1 file changed, 19 insertions(+), 70 deletions(-) diff --git a/COPYING b/COPYING index 09f330e0f..e2a71d60d 100644 --- a/COPYING +++ b/COPYING @@ -310,79 +310,28 @@ dealings in this Software without prior written authorization from Digital Equipment Corporation. -Copyright (c) 1993-1997 by Silicon Graphics Computer Systems, Inc. +SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved. -Permission to use, copy, modify, and distribute this -software and its documentation for any purpose and without -fee is hereby granted, provided that the above copyright -notice appear in all copies and that both that copyright -notice and this permission notice appear in supporting -documentation, and that the name of Silicon Graphics not be -used in advertising or publicity pertaining to distribution -of the software without specific prior written permission. -Silicon Graphics makes no representation about the suitability -of this software for any purpose. It is provided "as is" -without any express or implied warranty. +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: -SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON -GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL -DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH -THE USE OR PERFORMANCE OF THIS SOFTWARE. +The above copyright notice including the dates of first publication and +either this permission notice or a reference to +http://oss.sgi.com/projects/FreeB/ +shall be included in all copies or substantial portions of the Software. - -License Applicability. Except to the extent portions of this file are -made subject to an alternative license as permitted in the SGI Free -Software License B, Version 1.1 (the "License"), the contents of this -file are subject only to the provisions of the License. You may not use -this file except in compliance with the License. You may obtain a copy -of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 -Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: - -http://oss.sgi.com/projects/FreeB - -Note that, as provided in the License, the Software is distributed on an -"AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS -DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND -CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A -PARTICULAR PURPOSE, AND NON-INFRINGEMENT. - -Original Code. The Original Code is: OpenGL Sample Implementation, -Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, -Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc. -Copyright in any portions created by third parties is as indicated -elsewhere herein. All Rights Reserved. - -Additional Notice Provisions: The application programming interfaces -established by SGI in conjunction with the Original Code are The -OpenGL(R) Graphics System: A Specification (Version 1.2.1), released -April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version -1.3), released November 4, 1998; and OpenGL(R) Graphics with the X -Window System(R) (Version 1.3), released October 19, 1998. This software -was created using the OpenGL(R) version 1.2.1 Sample Implementation -published by SGI, but has not been independently verified as being -compliant with the OpenGL(R) version 1.2.1 Specification. - - -The contents of this file are subject to the GLX Public License Version 1.0 -(the "License"). You may not use this file except in compliance with the -License. You may obtain a copy of the License at Silicon Graphics, Inc., -attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA 94043 -or at http://www.sgi.com/software/opensource/glx/license.html. - -Software distributed under the License is distributed on an "AS IS" -basis. ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY -IMPLIED WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR -PURPOSE OR OF NON- INFRINGEMENT. See the License for the specific -language governing rights and limitations under the License. - -The Original Software is GLX version 1.2 source code, released February, -1999. The developer of the Original Software is Silicon Graphics, Inc. -Those portions of the Subject Software created by Silicon Graphics, Inc. -are Copyright (c) 1991-9 Silicon Graphics, Inc. All Rights Reserved. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. Copyright (c) 1994, 1995 Hewlett-Packard Company From 4cc33190ef1a4207c0f8fc74201cdf2568a239c2 Mon Sep 17 00:00:00 2001 From: Julien Cristau Date: Thu, 14 May 2009 17:01:57 +0200 Subject: [PATCH 50/89] xfree86: Add two __FreeBSD_kernel__ checks Debian bug#525475 Reported-by: Petr Salinger Signed-off-by: Julien Cristau --- hw/xfree86/os-support/bus/Pci.h | 3 ++- hw/xfree86/os-support/shared/stdResource.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/hw/xfree86/os-support/bus/Pci.h b/hw/xfree86/os-support/bus/Pci.h index 7623e9738..79b38f015 100644 --- a/hw/xfree86/os-support/bus/Pci.h +++ b/hw/xfree86/os-support/bus/Pci.h @@ -168,7 +168,8 @@ #endif /* !defined(DEBUGPCI) */ -#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || \ +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ + defined(__OpenBSD__) || defined(__NetBSD__) || \ defined(__DragonFly__) || defined(__sun) || defined(__GNU__) #define ARCH_PCI_INIT bsdPciInit #endif diff --git a/hw/xfree86/os-support/shared/stdResource.c b/hw/xfree86/os-support/shared/stdResource.c index a4c162d97..9db349bc0 100644 --- a/hw/xfree86/os-support/shared/stdResource.c +++ b/hw/xfree86/os-support/shared/stdResource.c @@ -43,7 +43,8 @@ /* Avoid Imakefile changes */ #include "bus/Pci.h" -#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \ +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ + defined(__NetBSD__) || defined(__OpenBSD__) || \ defined(__DragonFly__) || defined(__sun) || defined(__GNU__) #define xf86StdAccResFromOS xf86AccResFromOS #endif From c1bbac2708bbccbec01cecba39cdf2b8160c1dc3 Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Thu, 14 May 2009 16:00:41 -0400 Subject: [PATCH 51/89] Fix mem_barrier() on Alpha Some clean up (da086901c6579e41b28b1418fa12ebb82744fc87) went a bit too far and removed the needed mem_barrier macro on Alpha. This re-adds it. --- hw/xfree86/common/compiler.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h index 2601693ca..40b463efb 100644 --- a/hw/xfree86/common/compiler.h +++ b/hw/xfree86/common/compiler.h @@ -357,7 +357,8 @@ static __inline__ void stw_u(unsigned long r5, unsigned short * r11) # endif } -# define write_mem_barrier() __asm__ __volatile__("wmb" : : : "memory") +# define mem_barrier() __asm__ __volatile__("mb" : : : "memory") +# define write_mem_barrier() __asm__ __volatile__("wmb" : : : "memory") # elif defined(linux) && defined(__ia64__) From 850675d4de4373e5df95507dbf2cd9affaaf54bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Fri, 15 May 2009 15:48:37 +0200 Subject: [PATCH 52/89] EXA: Take GC client clip type into account for migration. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes http://bugs.freedesktop.org/show_bug.cgi?id=18950 . Signed-off-by: Michel Dänzer --- exa/exa_accel.c | 35 +++++++++++++++++------------------ exa/exa_priv.h | 10 ++++++---- exa/exa_render.c | 2 +- exa/exa_unaccel.c | 2 +- 4 files changed, 25 insertions(+), 24 deletions(-) diff --git a/exa/exa_accel.c b/exa/exa_accel.c index d284ff560..39f343784 100644 --- a/exa/exa_accel.c +++ b/exa/exa_accel.c @@ -406,7 +406,8 @@ exaHWCopyNtoN (DrawablePtr pSrcDrawable, xfree(rects); if (!pGC || !exaGCReadsDestination(pDstDrawable, pGC->planemask, - pGC->fillStyle, pGC->alu)) { + pGC->fillStyle, pGC->alu, + pGC->clientClipType)) { dstregion = REGION_CREATE(pScreen, NullBox, 0); REGION_COPY(pScreen, dstregion, srcregion); REGION_TRANSLATE(pScreen, dstregion, dst_off_x - dx - src_off_x, @@ -734,7 +735,8 @@ exaPolySegment (DrawablePtr pDrawable, GCPtr pGC, int nseg, } static Bool exaFillRegionSolid (DrawablePtr pDrawable, RegionPtr pRegion, - Pixel pixel, CARD32 planemask, CARD32 alu); + Pixel pixel, CARD32 planemask, CARD32 alu, + unsigned int clientClipType); static void exaPolyFillRect(DrawablePtr pDrawable, @@ -787,10 +789,11 @@ exaPolyFillRect(DrawablePtr pDrawable, if (((pGC->fillStyle == FillSolid || pGC->tileIsPixel) && exaFillRegionSolid(pDrawable, pReg, pGC->fillStyle == FillSolid ? pGC->fgPixel : pGC->tile.pixel, pGC->planemask, - pGC->alu)) || + pGC->alu, pGC->clientClipType)) || (pGC->fillStyle == FillTiled && !pGC->tileIsPixel && exaFillRegionTiled(pDrawable, pReg, pGC->tile.pixmap, &pGC->patOrg, - pGC->planemask, pGC->alu))) { + pGC->planemask, pGC->alu, + pGC->clientClipType))) { goto out; } } @@ -952,11 +955,8 @@ exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc) } static Bool -exaFillRegionSolid (DrawablePtr pDrawable, - RegionPtr pRegion, - Pixel pixel, - CARD32 planemask, - CARD32 alu) +exaFillRegionSolid (DrawablePtr pDrawable, RegionPtr pRegion, Pixel pixel, + CARD32 planemask, CARD32 alu, unsigned int clientClipType) { ExaScreenPriv(pDrawable->pScreen); PixmapPtr pPixmap = exaGetDrawablePixmap (pDrawable); @@ -969,7 +969,8 @@ exaFillRegionSolid (DrawablePtr pDrawable, pixmaps[0].as_src = FALSE; pixmaps[0].pPix = pPixmap; pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillSolid, - alu) ? NULL : pRegion; + alu, clientClipType) + ? NULL : pRegion; exaGetDrawableDeltas(pDrawable, pPixmap, &xoff, &yoff); REGION_TRANSLATE(pScreen, pRegion, xoff, yoff); @@ -1032,12 +1033,9 @@ out: * Based on fbFillRegionTiled(), fbTile(). */ Bool -exaFillRegionTiled (DrawablePtr pDrawable, - RegionPtr pRegion, - PixmapPtr pTile, - DDXPointPtr pPatOrg, - CARD32 planemask, - CARD32 alu) +exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile, + DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu, + unsigned int clientClipType) { ExaScreenPriv(pDrawable->pScreen); PixmapPtr pPixmap; @@ -1060,13 +1058,14 @@ exaFillRegionTiled (DrawablePtr pDrawable, if (tileWidth == 1 && tileHeight == 1) return exaFillRegionSolid(pDrawable, pRegion, exaGetPixmapFirstPixel (pTile), planemask, - alu); + alu, clientClipType); pixmaps[0].as_dst = TRUE; pixmaps[0].as_src = FALSE; pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable); pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillTiled, - alu) ? NULL : pRegion; + alu, clientClipType) + ? NULL : pRegion; pixmaps[1].as_dst = FALSE; pixmaps[1].as_src = TRUE; pixmaps[1].pPix = pTile; diff --git a/exa/exa_priv.h b/exa/exa_priv.h index 9efbbc98c..874e7e987 100644 --- a/exa/exa_priv.h +++ b/exa/exa_priv.h @@ -415,11 +415,12 @@ ExaCheckAddTraps (PicturePtr pPicture, static _X_INLINE Bool exaGCReadsDestination(DrawablePtr pDrawable, unsigned long planemask, - unsigned int fillStyle, unsigned char alu) + unsigned int fillStyle, unsigned char alu, + unsigned int clientClipType) { - return ((alu != GXcopy && alu != GXclear &&alu != GXset && + return ((alu != GXcopy && alu != GXclear && alu != GXset && alu != GXcopyInverted) || fillStyle == FillStippled || - !EXA_PM_IS_SOLID(pDrawable, planemask)); + clientClipType != CT_NONE || !EXA_PM_IS_SOLID(pDrawable, planemask)); } void @@ -427,7 +428,8 @@ exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc); Bool exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile, - DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu); + DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu, + unsigned int clientClipType); void exaGetImage (DrawablePtr pDrawable, int x, int y, int w, int h, diff --git a/exa/exa_render.c b/exa/exa_render.c index a9344977f..14d710b57 100644 --- a/exa/exa_render.c +++ b/exa/exa_render.c @@ -945,7 +945,7 @@ exaComposite(CARD8 op, ret = exaFillRegionTiled(pDst->pDrawable, ®ion, (PixmapPtr)pSrc->pDrawable, - &patOrg, FB_ALLONES, GXcopy); + &patOrg, FB_ALLONES, GXcopy, CT_NONE); REGION_UNINIT(pDst->pDrawable->pScreen, ®ion); diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c index 4279c877c..0d53b67d8 100644 --- a/exa/exa_unaccel.c +++ b/exa/exa_unaccel.c @@ -106,7 +106,7 @@ ExaCheckPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth, EXA_GC_PROLOGUE(pGC); EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable))); if (exaGCReadsDestination(pDrawable, pGC->planemask, pGC->fillStyle, - pGC->alu)) + pGC->alu, pGC->clientClipType)) exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); else exaPrepareAccessReg (pDrawable, EXA_PREPARE_DEST, pExaPixmap->pDamage ? From 7c8327f0a75087a85864256a9cea80dd4b86def5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Fri, 15 May 2009 15:48:37 +0200 Subject: [PATCH 53/89] EXA: Always damage glyph cache pixmap manually after uploading a glyph. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michel Dänzer --- exa/exa_glyphs.c | 71 ++++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c index d2a0168b4..b8d2e52bf 100644 --- a/exa/exa_glyphs.c +++ b/exa/exa_glyphs.c @@ -354,8 +354,14 @@ exaGlyphCacheHashRemove(ExaGlyphCachePtr cache, * is to use the UploadToScreen() driver hook; this allows us to * pipeline glyph uploads and to avoid creating offscreen pixmaps for * glyphs that we'll never use again. + * + * If we can't do it with UploadToScreen (because the glyph is offscreen, etc), + * we fall back to CompositePicture. + * + * We need to damage the cache pixmap manually in either case because the damage + * layer unwrapped the picture screen before calling exaGlyphs. */ -static Bool +static void exaGlyphCacheUploadGlyph(ScreenPtr pScreen, ExaGlyphCachePtr cache, int pos, @@ -369,16 +375,16 @@ exaGlyphCacheUploadGlyph(ScreenPtr pScreen, ExaMigrationRec pixmaps[1]; if (!pExaScr->info->UploadToScreen || pExaScr->swappedOut || pExaPixmap->accel_blocked) - return FALSE; + goto composite; /* If the glyph pixmap is already uploaded, no point in doing * things this way */ if (exaPixmapIsOffscreen(pGlyphPixmap)) - return FALSE; + goto composite; /* UploadToScreen only works if bpp match */ if (pGlyphPixmap->drawable.bitsPerPixel != pCachePixmap->drawable.bitsPerPixel) - return FALSE; + goto composite; /* cache pixmap must be offscreen. */ pixmaps[0].as_dst = TRUE; @@ -388,26 +394,37 @@ exaGlyphCacheUploadGlyph(ScreenPtr pScreen, exaDoMigration (pixmaps, 1, TRUE); if (!exaPixmapIsOffscreen(pCachePixmap)) - return FALSE; + goto composite; /* CACHE_{X,Y} are in pixmap coordinates, no need for cache{X,Y}off */ - if (!pExaScr->info->UploadToScreen(pCachePixmap, - CACHE_X(pos), - CACHE_Y(pos), - pGlyph->info.width, - pGlyph->info.height, - (char *)pExaPixmap->sys_ptr, - pExaPixmap->sys_pitch)) - return FALSE; + if (pExaScr->info->UploadToScreen(pCachePixmap, + CACHE_X(pos), + CACHE_Y(pos), + pGlyph->info.width, + pGlyph->info.height, + (char *)pExaPixmap->sys_ptr, + pExaPixmap->sys_pitch)) + goto damage; - /* This pixmap should never be bound to a window, so no need to offset coordinates. */ +composite: + CompositePicture (PictOpSrc, + pGlyphPicture, + None, + cache->picture, + 0, 0, + 0, 0, + CACHE_X(pos), + CACHE_Y(pos), + pGlyph->info.width, + pGlyph->info.height); + +damage: + /* The cache pixmap isn't a window, so no need to offset coordinates. */ exaPixmapDirty (pCachePixmap, CACHE_X(pos), CACHE_Y(pos), - CACHE_X(pos) + pGlyph->info.width, - CACHE_Y(pos) + pGlyph->info.height); - - return TRUE; + CACHE_X(pos) + cache->glyphWidth, + CACHE_Y(pos) + cache->glyphHeight); } static ExaGlyphCacheResult @@ -483,23 +500,7 @@ exaGlyphCacheBufferGlyph(ScreenPtr pScreen, cache->evictionPosition = rand() % cache->size; } - /* Now actually upload the glyph into the cache picture; if - * we can't do it with UploadToScreen (because the glyph is - * offscreen, etc), we fall back to CompositePicture. - */ - if (!exaGlyphCacheUploadGlyph(pScreen, cache, pos, pGlyph)) { - CompositePicture (PictOpSrc, - GlyphPicture(pGlyph)[pScreen->myNum], - None, - cache->picture, - 0, 0, - 0, 0, - CACHE_X(pos), - CACHE_Y(pos), - pGlyph->info.width, - pGlyph->info.height); - } - + exaGlyphCacheUploadGlyph(pScreen, cache, pos, pGlyph); } buffer->mask = cache->picture; From 2be5eecb4b0f30b9c55d12521415edbb88c1f8fd Mon Sep 17 00:00:00 2001 From: Julien Cristau Date: Fri, 15 May 2009 17:29:32 +0200 Subject: [PATCH 54/89] xfree86: add edid quirk for Samsung Syncmaster 2333HD It reports vertical size in cm in the detailed mode. X.Org bug#21750 Reported-by: Peter Poklop Signed-off-by: Julien Cristau --- hw/xfree86/modes/xf86EdidModes.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c index 9e6a666f7..4340edd1f 100644 --- a/hw/xfree86/modes/xf86EdidModes.c +++ b/hw/xfree86/modes/xf86EdidModes.c @@ -160,6 +160,11 @@ static Bool quirk_detailed_v_in_cm (int scrnIndex, xf86MonPtr DDC) DDC->vendor.prod_id == 47360) return TRUE; + /* Bug #21750: Samsung Syncmaster 2333HD */ + if (memcmp (DDC->vendor.name, "SAM", 4) == 0 && + DDC->vendor.prod_id == 1157) + return TRUE; + return FALSE; } From 94c5093c8bc803d0b14429b5a4d07ae46da865cc Mon Sep 17 00:00:00 2001 From: David Marx Date: Wed, 13 May 2009 17:53:30 -0700 Subject: [PATCH 55/89] Solaris: Make sure non-inline versions of asm routines end with ret statements Signed-off-by: Alan Coopersmith --- hw/xfree86/os-support/solaris/solaris-amd64.S | 2 +- hw/xfree86/os-support/solaris/solaris-ia32.S | 2 +- hw/xfree86/os-support/solaris/solaris-sparcv8plus.S | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/xfree86/os-support/solaris/solaris-amd64.S b/hw/xfree86/os-support/solaris/solaris-amd64.S index 9f5e58cb0..4a0e0f48a 100644 --- a/hw/xfree86/os-support/solaris/solaris-amd64.S +++ b/hw/xfree86/os-support/solaris/solaris-amd64.S @@ -32,7 +32,7 @@ #define _ASM #include #define FUNCTION_START(f,n) ENTRY(f) -#define FUNCTION_END(f) SET_SIZE(f) +#define FUNCTION_END(f) ret; SET_SIZE(f) #endif FUNCTION_START(inb,4) diff --git a/hw/xfree86/os-support/solaris/solaris-ia32.S b/hw/xfree86/os-support/solaris/solaris-ia32.S index e2d9cf60a..280154bab 100644 --- a/hw/xfree86/os-support/solaris/solaris-ia32.S +++ b/hw/xfree86/os-support/solaris/solaris-ia32.S @@ -32,7 +32,7 @@ #define _ASM #include #define FUNCTION_START(f,n) ENTRY(f) -#define FUNCTION_END(f) SET_SIZE(f) +#define FUNCTION_END(f) ret; SET_SIZE(f) #endif FUNCTION_START(inb,4) diff --git a/hw/xfree86/os-support/solaris/solaris-sparcv8plus.S b/hw/xfree86/os-support/solaris/solaris-sparcv8plus.S index fb23942ef..dbaa0308b 100644 --- a/hw/xfree86/os-support/solaris/solaris-sparcv8plus.S +++ b/hw/xfree86/os-support/solaris/solaris-sparcv8plus.S @@ -33,7 +33,7 @@ #define _ASM #include #define FUNCTION_START(f,n) ENTRY(f) -#define FUNCTION_END(f) SET_SIZE(f) +#define FUNCTION_END(f) retl; nop; SET_SIZE(f) #endif /* Converted from common/compiler.h gcc inline format to Sun cc inline From 8609a4e883e917d1652fbe810108de99bc89713f Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Fri, 15 May 2009 11:22:32 -0700 Subject: [PATCH 56/89] Correct some Sun license notices to Sun's standard X11 license format Signed-off-by: Alan Coopersmith --- COPYING | 21 --------------------- composite/compalloc.c | 41 ++++++++++++++++++++++++----------------- composite/compext.c | 41 ++++++++++++++++++++++++----------------- composite/compinit.c | 41 ++++++++++++++++++++++++----------------- composite/compint.h | 41 ++++++++++++++++++++++++----------------- composite/compoverlay.c | 41 ++++++++++++++++++++++++----------------- composite/compwindow.c | 41 ++++++++++++++++++++++++----------------- xfixes/cursor.c | 41 ++++++++++++++++++++++++----------------- xfixes/xfixes.c | 41 ++++++++++++++++++++++++----------------- xfixes/xfixesint.h | 41 ++++++++++++++++++++++++----------------- 10 files changed, 216 insertions(+), 174 deletions(-) diff --git a/COPYING b/COPYING index e2a71d60d..5dc8c1dfb 100644 --- a/COPYING +++ b/COPYING @@ -188,27 +188,6 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright © 2006 Sun Microsystems - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Sun Microsystems not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Sun Microsystems makes no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright 1987-1991, 1993 by Digital Equipment Corporation, Maynard, Massachusetts. Copyright 1991 Massachusetts Institute of Technology, Cambridge, Massachusetts. Copyright 1991, 1993 Olivetti Research Limited, Cambridge, England. diff --git a/composite/compalloc.c b/composite/compalloc.c index 1bac9a417..3f427dbe1 100644 --- a/composite/compalloc.c +++ b/composite/compalloc.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/composite/compext.c b/composite/compext.c index 829c90fbf..608f29a8a 100644 --- a/composite/compext.c +++ b/composite/compext.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/composite/compinit.c b/composite/compinit.c index ee269afa0..dfc3929ee 100644 --- a/composite/compinit.c +++ b/composite/compinit.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/composite/compint.h b/composite/compint.h index fd2fea153..852c277c2 100644 --- a/composite/compint.h +++ b/composite/compint.h @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/composite/compoverlay.c b/composite/compoverlay.c index 68b4f1288..e213ce71e 100644 --- a/composite/compoverlay.c +++ b/composite/compoverlay.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/composite/compwindow.c b/composite/compwindow.c index 577fa733e..4267a51c7 100644 --- a/composite/compwindow.c +++ b/composite/compwindow.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/xfixes/cursor.c b/xfixes/cursor.c index 6fa2dff8e..534c82605 100644 --- a/xfixes/cursor.c +++ b/xfixes/cursor.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2002 Keith Packard * diff --git a/xfixes/xfixes.c b/xfixes/xfixes.c index 3b8ed5a13..25c92ea93 100644 --- a/xfixes/xfixes.c +++ b/xfixes/xfixes.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2002 Keith Packard * diff --git a/xfixes/xfixesint.h b/xfixes/xfixesint.h index 04117a46c..d7c53ee07 100644 --- a/xfixes/xfixesint.h +++ b/xfixes/xfixesint.h @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2002 Keith Packard * From c1d7deca9281ba1df0df1abcea1fe7f841b10ff9 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 12 May 2009 21:24:07 +1000 Subject: [PATCH 57/89] mi: un-deprecate miPointerWarpCursor This function was deprecated in ef68273f5bdb27a492ec0b69548ec4fbede46c08 because it didn't take a device argument. The device argument was added in 1c7568b8a1417257fa67c7fca69aa253099b9461 though, so the deprecation is obsolete. Signed-off-by: Peter Hutterer --- mi/mipointer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mi/mipointer.h b/mi/mipointer.h index 8b13f0848..7dc1ae7cc 100644 --- a/mi/mipointer.h +++ b/mi/mipointer.h @@ -108,7 +108,7 @@ extern _X_EXPORT void miPointerWarpCursor( ScreenPtr /*pScreen*/, int /*x*/, int /*y*/ -) _X_DEPRECATED; +); /* Deprecated in favour of miPointerSetPosition. */ extern _X_EXPORT void miPointerAbsoluteCursor( From 6f9e22049862ee9ac7f604411d005d8bb1b2dd1c Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 11 May 2009 12:51:40 +1000 Subject: [PATCH 58/89] dix: ensure Activate/DeactivateGrab has a valid value. Xephyr doesn't manually set Activate/DeactivateGrab for new devices, resulting in a NULL-pointer dereference later when a grab is activated. Avoid the segfault by ensuring that the pointer is always valid. Signed-off-by: Peter Hutterer --- dix/devices.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dix/devices.c b/dix/devices.c index afe340b2f..6f464e7ca 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -224,6 +224,8 @@ AddInputDevice(ClientPtr client, DeviceProc deviceProc, Bool autoStart) /* device grab defaults */ dev->deviceGrab.grabTime = currentTime; + dev->deviceGrab.ActivateGrab = ActivateKeyboardGrab; + dev->deviceGrab.DeactivateGrab = DeactivateKeyboardGrab; dev->coreEvents = TRUE; From b1b5ec45c1cb650ccb8c659218f9481379c777d9 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 11 May 2009 12:53:56 +1000 Subject: [PATCH 59/89] kdrive: set Activate/Deactivate grab for input devices (#21591) X.Org Bug 21591 --- hw/kdrive/src/kinput.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c index 7ed36017f..0d216a9b8 100644 --- a/hw/kdrive/src/kinput.c +++ b/hw/kdrive/src/kinput.c @@ -915,6 +915,8 @@ KdAddKeyboard (KdKeyboardInfo *ki) return !Success; } + ki->dixdev->deviceGrab.ActivateGrab = ActivateKeyboardGrab; + ki->dixdev->deviceGrab.DeactivateGrab = DeactivateKeyboardGrab; RegisterOtherDevice(ki->dixdev); #ifdef DEBUG @@ -984,6 +986,8 @@ KdAddPointer (KdPointerInfo *pi) return BadDevice; } + pi->dixdev->deviceGrab.ActivateGrab = ActivatePointerGrab; + pi->dixdev->deviceGrab.DeactivateGrab = DeactivatePointerGrab; RegisterOtherDevice(pi->dixdev); for (prev = &kdPointers; *prev; prev = &(*prev)->next); From 2f6253376df45e508284ff7766b186cfc7fb56d6 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Sat, 9 May 2009 10:33:20 +1000 Subject: [PATCH 60/89] xfree86: Remove superfluous ifdef DEBUG checks. Signed-off-by: Peter Hutterer --- hw/xfree86/common/xf86Bus.c | 46 ++++++------------- hw/xfree86/common/xf86Config.c | 12 ++--- hw/xfree86/common/xf86Events.c | 20 ++------ hw/xfree86/common/xf86Helper.c | 46 ++++++------------- hw/xfree86/common/xf86Init.c | 18 ++------ hw/xfree86/common/xf86Mode.c | 16 ++----- hw/xfree86/common/xf86VidMode.c | 18 +++----- hw/xfree86/common/xf86fbman.c | 36 +++++---------- hw/xfree86/common/xf86sbusBus.c | 14 ++---- hw/xfree86/os-support/linux/int10/linux.c | 36 ++++----------- .../os-support/linux/int10/vm86/linux_vm86.c | 4 +- hw/xfree86/os-support/linux/lnx_acpi.c | 14 ++---- hw/xfree86/os-support/linux/lnx_apm.c | 14 ++---- hw/xfree86/os-support/linux/lnx_axp.c | 12 ++--- hw/xfree86/os-support/linux/lnx_font.c | 12 ++--- hw/xfree86/os-support/linux/lnx_video.c | 20 +++----- hw/xfree86/os-support/sco/sco_video.c | 8 +--- hw/xfree86/os-support/shared/bios_mmap.c | 4 +- hw/xfree86/os-support/shared/posix_tty.c | 21 +++------ hw/xfree86/ramdac/TI.c | 4 +- hw/xfree86/vbe/vbeModes.c | 4 +- hw/xfree86/vgahw/vgaHW.c | 40 +++++----------- 22 files changed, 118 insertions(+), 301 deletions(-) diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c index 8040f580b..8382d911a 100644 --- a/hw/xfree86/common/xf86Bus.c +++ b/hw/xfree86/common/xf86Bus.c @@ -639,9 +639,7 @@ xf86EnableAccess(ScrnInfoPtr pScrn) register xf86AccessPtr pAcc; EntityAccessPtr tmp; -#ifdef DEBUG - ErrorF("Enable access %i\n",pScrn->scrnIndex); -#endif + DebugF("Enable access %i\n",pScrn->scrnIndex); /* Entity is not under access control or currently enabled */ if (!pScrn->access) { @@ -844,10 +842,8 @@ checkConflictBlock(resRange *range, resPtr pRes) case ResBlock: if (range->rBegin < pRes->block_end && range->rEnd > pRes->block_begin) { -#ifdef DEBUG - ErrorF("b-b conflict w: %lx %lx\n", + DebugF("b-b conflict w: %lx %lx\n", pRes->block_begin,pRes->block_end); -#endif return pRes->block_end < range->rEnd ? pRes->block_end : range->rEnd; } @@ -856,12 +852,10 @@ checkConflictBlock(resRange *range, resPtr pRes) if (pRes->sparse_base > range->rEnd) return 0; val = (~pRes->sparse_mask | pRes->sparse_base) & getMask(range->rEnd); -#ifdef DEBUG - ErrorF("base = 0x%lx, mask = 0x%lx, begin = 0x%lx, end = 0x%lx ," + DebugF("base = 0x%lx, mask = 0x%lx, begin = 0x%lx, end = 0x%lx ," "val = 0x%lx\n", pRes->sparse_base, pRes->sparse_mask, range->rBegin, range->rEnd, val); -#endif i = sizeof(memType) * 8; tmp = prev = pRes->sparse_base; @@ -873,11 +867,9 @@ checkConflictBlock(resRange *range, resPtr pRes) prev = tmp; } if (tmp >= range->rBegin) { -#ifdef DEBUG - ErrorF("conflict found at: 0x%lx\n",tmp); - ErrorF("b-d conflict w: %lx %lx\n", + DebugF("conflict found at: 0x%lx\n",tmp); + DebugF("b-d conflict w: %lx %lx\n", pRes->sparse_base,pRes->sparse_mask); -#endif return tmp; } else @@ -902,10 +894,8 @@ checkConflictSparse(resRange *range, resPtr pRes) case ResSparse: tmp = pRes->sparse_mask & range->rMask; if ((tmp & pRes->sparse_base) == (tmp & range->rBase)) { -#ifdef DEBUG - ErrorF("s-b conflict w: %lx %lx\n", + DebugF("s-b conflict w: %lx %lx\n", pRes->sparse_base,pRes->sparse_mask); -#endif return pRes->sparse_mask; } return 0; @@ -918,9 +908,7 @@ checkConflictSparse(resRange *range, resPtr pRes) tmp = prev = range->rBase; while (i) { -#ifdef DEBUG - ErrorF("tmp = 0x%lx\n",tmp); -#endif + DebugF("tmp = 0x%lx\n",tmp); tmp |= 1<< (--i) & val; if (tmp > pRes->block_end) tmp = prev; @@ -947,11 +935,9 @@ checkConflictSparse(resRange *range, resPtr pRes) m_mask = mask > m_mask ? mask : m_mask; base = base + mask + 1; } -#ifdef DEBUG - ErrorF("conflict found at: 0x%lx\n",tmp); - ErrorF("b-b conflict w: %lx %lx\n", + DebugF("conflict found at: 0x%lx\n",tmp); + DebugF("b-b conflict w: %lx %lx\n", pRes->block_begin,pRes->block_end); -#endif return ~m_mask; } } @@ -1557,12 +1543,10 @@ xf86EnterServerState(xf86State state) * We take care not to call xf86BlockSIGIO() twice. */ SetSIGIOForState(state); -#ifdef DEBUG if (state == SETUP) - ErrorF("Entering SETUP state\n"); + DebugF("Entering SETUP state\n"); else - ErrorF("Entering OPERATING state\n"); -#endif + DebugF("Entering OPERATING state\n"); /* When servicing a dumb framebuffer we don't need to do anything */ if (doFramebufferMode) return; @@ -1620,10 +1604,8 @@ xf86EnterServerState(xf86State state) xf86Screens[i]->busAccess = NULL; } -#ifdef DEBUG if (xf86Screens[i]->busAccess) - ErrorF("Screen %i setting vga route\n",i); -#endif + DebugF("Screen %i setting vga route\n",i); switch (rt) { case MEM_IO: xf86MsgVerb(X_INFO, 3, "Screen %i shares mem & io resources\n",i); @@ -1967,9 +1949,7 @@ xf86PostScreenInit(void) return; } -#ifdef DEBUG - ErrorF("PostScreenInit generation: %i\n",serverGeneration); -#endif + DebugF("PostScreenInit generation: %i\n",serverGeneration); if (serverGeneration == 1) { checkRoutingForScreens(OPERATING); for (i=0; ilist.next; } -#ifdef DEBUG - ErrorF("Found %d screens in the layout section %s", + DebugF("Found %d screens in the layout section %s", count, conf_layout->lay_identifier); -#endif if (!count) /* alloc enough storage even if no screen is specified */ count = 1; @@ -1678,10 +1676,8 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout, count++; idp = (XF86ConfInactivePtr)idp->list.next; } -#ifdef DEBUG - ErrorF("Found %d inactive devices in the layout section %s\n", + DebugF("Found %d inactive devices in the layout section %s\n", count, conf_layout->lay_identifier); -#endif gdp = xnfalloc((count + 1) * sizeof(GDevRec)); gdp[count].identifier = NULL; idp = conf_layout->lay_inactive_lst; @@ -1703,10 +1699,8 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout, count++; irp = (XF86ConfInputrefPtr)irp->list.next; } -#ifdef DEBUG - ErrorF("Found %d input devices in the layout section %s\n", + DebugF("Found %d input devices in the layout section %s\n", count, conf_layout->lay_identifier); -#endif indp = xnfcalloc((count + 1), sizeof(IDevPtr)); indp[count] = NULL; irp = conf_layout->lay_input_lst; diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c index aa818c358..e9b4dfe60 100644 --- a/hw/xfree86/common/xf86Events.c +++ b/hw/xfree86/common/xf86Events.c @@ -183,9 +183,7 @@ ProcessInputEvents (void) void xf86ProcessActionEvent(ActionEvent action, void *arg) { -#ifdef DEBUG - ErrorF("ProcessActionEvent(%d,%x)\n", (int) action, arg); -#endif + DebugF("ProcessActionEvent(%d,%x)\n", (int) action, arg); switch (action) { case ACTION_TERMINATE: if (!xf86Info.dontZap) { @@ -429,9 +427,7 @@ xf86VTSwitch(void) InputInfoPtr pInfo; IHPtr ih; -#ifdef DEBUG - ErrorF("xf86VTSwitch()\n"); -#endif + DebugF("xf86VTSwitch()\n"); #ifdef XFreeXDGA if(!DGAVTSwitch()) @@ -444,10 +440,8 @@ xf86VTSwitch(void) */ if (xf86Screens[0]->vtSema) { -#ifdef DEBUG - ErrorF("xf86VTSwitch: Leaving, xf86Exiting is %s\n", + DebugF("xf86VTSwitch: Leaving, xf86Exiting is %s\n", BOOLTOSTRING((dispatchException & DE_TERMINATE) ? TRUE : FALSE)); -#endif #ifdef DPMSExtension if (DPMSPowerLevel != DPMSModeOn) DPMSSet(serverClient, DPMSModeOn); @@ -483,9 +477,7 @@ xf86VTSwitch(void) * switch failed */ -#ifdef DEBUG - ErrorF("xf86VTSwitch: Leave failed\n"); -#endif + DebugF("xf86VTSwitch: Leave failed\n"); prevSIGIO = xf86BlockSIGIO(); xf86AccessEnter(); xf86EnterServerState(SETUP); @@ -534,9 +526,7 @@ xf86VTSwitch(void) } } else { -#ifdef DEBUG - ErrorF("xf86VTSwitch: Entering\n"); -#endif + DebugF("xf86VTSwitch: Entering\n"); if (!xf86VTSwitchTo()) return; prevSIGIO = xf86BlockSIGIO(); diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c index 61b3390e2..441efb098 100644 --- a/hw/xfree86/common/xf86Helper.c +++ b/hw/xfree86/common/xf86Helper.c @@ -212,15 +212,13 @@ xf86AllocateScreen(DriverPtr drv, int flags) xf86Screens[i]->CurrentAccess = &xf86CurrentAccess; xf86Screens[i]->resourceType = MEM_IO; -#ifdef DEBUG /* OOps -- What's this ? */ - ErrorF("xf86AllocateScreen - xf86Screens[%d]->pScreen = %p\n", + DebugF("xf86AllocateScreen - xf86Screens[%d]->pScreen = %p\n", i, xf86Screens[i]->pScreen ); if ( NULL != xf86Screens[i]->pScreen ) { - ErrorF("xf86Screens[%d]->pScreen->CreateWindow = %p\n", + DebugF("xf86Screens[%d]->pScreen->CreateWindow = %p\n", i, xf86Screens[i]->pScreen->CreateWindow ); } -#endif xf86Screens[i]->DriverFunc = drv->driverFunc; @@ -1735,9 +1733,7 @@ xf86MatchPciInstances(const char *driverName, int vendorID, } -#ifdef DEBUG - ErrorF("%s instances found: %d\n", driverName, allocatedInstances); -#endif + DebugF("%s instances found: %d\n", driverName, allocatedInstances); /* * Check for devices that need duplicated instances. This is required @@ -1820,9 +1816,7 @@ xf86MatchPciInstances(const char *driverName, int vendorID, instances[i].dev = dev; } } -#ifdef DEBUG - ErrorF("%s instances found: %d\n", driverName, numClaimedInstances); -#endif + DebugF("%s instances found: %d\n", driverName, numClaimedInstances); /* * Now check that a chipset or chipID override in the device section * is valid. Chipset has precedence over chipID. @@ -1926,11 +1920,9 @@ xf86MatchPciInstances(const char *driverName, int vendorID, if (instances[i].screen == 0 && !xf86CheckPciSlot( pPci )) continue; -#ifdef DEBUG - ErrorF("%s: card at %d:%d:%d is claimed by a Device section\n", + DebugF("%s: card at %d:%d:%d is claimed by a Device section\n", driverName, pPci->bus, pPci->dev, pPci->func); -#endif - + /* Allocate an entry in the lists to be returned */ numFound++; retEntities = xnfrealloc(retEntities, numFound * sizeof(int)); @@ -2621,10 +2613,8 @@ xf86RegisterRootWindowProperty(int ScrnIndex, Atom property, Atom type, int i; Bool existing = FALSE; -#ifdef DEBUG - ErrorF("xf86RegisterRootWindowProperty(%d, %ld, %ld, %d, %ld, %p)\n", + DebugF("xf86RegisterRootWindowProperty(%d, %ld, %ld, %d, %ld, %p)\n", ScrnIndex, property, type, format, len, value); -#endif if (ScrnIndex<0 || ScrnIndex>=xf86NumScreens) { return(BadMatch); @@ -2660,15 +2650,11 @@ xf86RegisterRootWindowProperty(int ScrnIndex, Atom property, Atom type, pNewProp->size = len; pNewProp->data = value; -#ifdef DEBUG - ErrorF("new property filled\n"); -#endif + DebugF("new property filled\n"); if (NULL==xf86RegisteredPropertiesTable) { -#ifdef DEBUG - ErrorF("creating xf86RegisteredPropertiesTable[] size %d\n", + DebugF("creating xf86RegisteredPropertiesTable[] size %d\n", xf86NumScreens); -#endif if ( NULL==(xf86RegisteredPropertiesTable=(RootWinPropPtr*)xnfcalloc(sizeof(RootWinProp),xf86NumScreens) )) { return(BadAlloc); } @@ -2677,12 +2663,10 @@ xf86RegisterRootWindowProperty(int ScrnIndex, Atom property, Atom type, } } -#ifdef DEBUG - ErrorF("xf86RegisteredPropertiesTable %p\n", + DebugF("xf86RegisteredPropertiesTable %p\n", (void *)xf86RegisteredPropertiesTable); - ErrorF("xf86RegisteredPropertiesTable[%d] %p\n", + DebugF("xf86RegisteredPropertiesTable[%d] %p\n", ScrnIndex, (void *)xf86RegisteredPropertiesTable[ScrnIndex]); -#endif if (!existing) { if ( xf86RegisteredPropertiesTable[ScrnIndex] == NULL) { @@ -2690,17 +2674,13 @@ xf86RegisterRootWindowProperty(int ScrnIndex, Atom property, Atom type, } else { pRegProp = xf86RegisteredPropertiesTable[ScrnIndex]; while (pRegProp->next != NULL) { -#ifdef DEBUG - ErrorF("- next %p\n", (void *)pRegProp); -#endif + DebugF("- next %p\n", (void *)pRegProp); pRegProp = pRegProp->next; } pRegProp->next = pNewProp; } } -#ifdef DEBUG - ErrorF("xf86RegisterRootWindowProperty succeeded\n"); -#endif + DebugF("xf86RegisterRootWindowProperty succeeded\n"); return(Success); } diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c index cf28ae73e..c4e5898ae 100644 --- a/hw/xfree86/common/xf86Init.c +++ b/hw/xfree86/common/xf86Init.c @@ -316,9 +316,7 @@ xf86CreateRootWindow(WindowPtr pWin) CreateWindowProcPtr CreateWindow = (CreateWindowProcPtr) dixLookupPrivate(&pScreen->devPrivates, xf86CreateRootWindowKey); -#ifdef DEBUG - ErrorF("xf86CreateRootWindow(%p)\n", pWin); -#endif + DebugF("xf86CreateRootWindow(%p)\n", pWin); if ( pScreen->CreateWindow != xf86CreateRootWindow ) { /* Can't find hook we are hung on */ @@ -365,9 +363,7 @@ xf86CreateRootWindow(WindowPtr pWin) } } -#ifdef DEBUG - ErrorF("xf86CreateRootWindow() returns %d\n", ret); -#endif + DebugF("xf86CreateRootWindow() returns %d\n", ret); return (ret); } @@ -471,10 +467,8 @@ probe_devices_from_device_sections(DriverPtr drvp) if ( (devList[i]->screen == 0) && !xf86CheckPciSlot( pPci ) ) continue; -#ifdef DEBUG - ErrorF("%s: card at %d:%d:%d is claimed by a Device section\n", + DebugF("%s: card at %d:%d:%d is claimed by a Device section\n", drvp->driverName, pPci->bus, pPci->dev, pPci->func); -#endif /* Allocate an entry in the lists to be returned */ entry = xf86ClaimPciSlot(pPci, drvp, device_id, @@ -1246,12 +1240,10 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv) FatalError("AddScreen/ScreenInit failed for driver %d\n", i); } -#ifdef DEBUG - ErrorF("InitOutput - xf86Screens[%d]->pScreen = %p\n", + DebugF("InitOutput - xf86Screens[%d]->pScreen = %p\n", i, xf86Screens[i]->pScreen ); - ErrorF("xf86Screens[%d]->pScreen->CreateWindow = %p\n", + DebugF("xf86Screens[%d]->pScreen->CreateWindow = %p\n", i, xf86Screens[i]->pScreen->CreateWindow ); -#endif dixSetPrivate(&screenInfo.screens[scr_index]->devPrivates, xf86CreateRootWindowKey, diff --git a/hw/xfree86/common/xf86Mode.c b/hw/xfree86/common/xf86Mode.c index 522d3c28b..6dcebe15e 100644 --- a/hw/xfree86/common/xf86Mode.c +++ b/hw/xfree86/common/xf86Mode.c @@ -654,10 +654,8 @@ xf86CheckModeForMonitor(DisplayModePtr mode, MonPtr monitor) return MODE_ERROR; } -#ifdef DEBUG - ErrorF("xf86CheckModeForMonitor(%p %s, %p %s)\n", + DebugF("xf86CheckModeForMonitor(%p %s, %p %s)\n", mode, mode->name, monitor, monitor->id); -#endif /* Some basic mode validity checks */ if (0 >= mode->HDisplay || mode->HDisplay > mode->HSyncStart || @@ -808,10 +806,8 @@ xf86InitialCheckModeForDriver(ScrnInfoPtr scrp, DisplayModePtr mode, return MODE_ERROR; } -#ifdef DEBUG - ErrorF("xf86InitialCheckModeForDriver(%p, %p %s, %p, 0x%x, %d, %d, %d)\n", + DebugF("xf86InitialCheckModeForDriver(%p, %p %s, %p, 0x%x, %d, %d, %d)\n", scrp, mode, mode->name , clockRanges, strategy, maxPitch, virtualX, virtualY); -#endif /* Some basic mode validity checks */ if (0 >= mode->HDisplay || mode->HDisplay > mode->HSyncStart || @@ -1210,14 +1206,12 @@ xf86ValidateModes(ScrnInfoPtr scrp, DisplayModePtr availModes, range vrefresh[MAX_VREFRESH]; Bool inferred_virtual = FALSE; -#ifdef DEBUG - ErrorF("xf86ValidateModes(%p, %p, %p, %p,\n\t\t %p, %d, %d, %d, %d, %d, %d, %d, %d, 0x%x)\n", + DebugF("xf86ValidateModes(%p, %p, %p, %p,\n\t\t %p, %d, %d, %d, %d, %d, %d, %d, %d, 0x%x)\n", scrp, availModes, modeNames, clockRanges, linePitches, minPitch, maxPitch, pitchInc, minHeight, maxHeight, virtualX, virtualY, apertureSize, strategy ); -#endif /* Some sanity checking */ if (scrp == NULL || scrp->name == NULL || !scrp->monitor || @@ -1860,15 +1854,13 @@ xf86SetCrtcForModes(ScrnInfoPtr scrp, int adjustFlags) do { xf86SetModeCrtc(p, adjustFlags); -#ifdef DEBUG - ErrorF("%sMode %s: %d (%d) %d %d (%d) %d %d (%d) %d %d (%d) %d\n", + DebugF("%sMode %s: %d (%d) %d %d (%d) %d %d (%d) %d %d (%d) %d\n", (p->type & M_T_DEFAULT) ? "Default " : "", p->name, p->CrtcHDisplay, p->CrtcHBlankStart, p->CrtcHSyncStart, p->CrtcHSyncEnd, p->CrtcHBlankEnd, p->CrtcHTotal, p->CrtcVDisplay, p->CrtcVBlankStart, p->CrtcVSyncStart, p->CrtcVSyncEnd, p->CrtcVBlankEnd, p->CrtcVTotal); -#endif p = p->next; } while (p != NULL && p != scrp->modes); } diff --git a/hw/xfree86/common/xf86VidMode.c b/hw/xfree86/common/xf86VidMode.c index d855bd1a8..49b86e73a 100644 --- a/hw/xfree86/common/xf86VidMode.c +++ b/hw/xfree86/common/xf86VidMode.c @@ -56,12 +56,6 @@ static Bool VidModeClose(int i, ScreenPtr pScreen); #endif -#ifdef DEBUG -# define DEBUG_P(x) ErrorF(x"\n"); -#else -# define DEBUG_P(x) /**/ -#endif - Bool VidModeExtensionInit(ScreenPtr pScreen) { @@ -69,7 +63,7 @@ VidModeExtensionInit(ScreenPtr pScreen) VidModePtr pVidMode; if (!xf86GetVidModeEnabled()) { - DEBUG_P("!xf86GetVidModeEnabled()"); + DebugF("!xf86GetVidModeEnabled()\n"); return FALSE; } @@ -77,7 +71,7 @@ VidModeExtensionInit(ScreenPtr pScreen) if (!dixSetPrivate(&pScreen->devPrivates, VidModeKey, xcalloc(sizeof(VidModeRec), 1))) { - DEBUG_P("xcalloc failed"); + DebugF("xcalloc failed\n"); return FALSE; } @@ -89,7 +83,7 @@ VidModeExtensionInit(ScreenPtr pScreen) VidModeCount++; return TRUE; #else - DEBUG_P("no vidmode extension"); + DebugF("no vidmode extension\n"); return FALSE; #endif } @@ -123,13 +117,13 @@ VidModeAvailable(int scrnIndex) VidModePtr pVidMode; if (VidModeKey == NULL) { - DEBUG_P("VidModeKey == NULL"); + DebugF("VidModeKey == NULL\n"); return FALSE; } pScrn = xf86Screens[scrnIndex]; if (pScrn == NULL) { - DEBUG_P("pScrn == NULL"); + DebugF("pScrn == NULL\n"); return FALSE; } @@ -137,7 +131,7 @@ VidModeAvailable(int scrnIndex) if (pVidMode) return TRUE; else { - DEBUG_P("pVidMode == NULL"); + DebugF("pVidMode == NULL\n"); return FALSE; } } diff --git a/hw/xfree86/common/xf86fbman.c b/hw/xfree86/common/xf86fbman.c index 510c3d8c4..5b8871723 100644 --- a/hw/xfree86/common/xf86fbman.c +++ b/hw/xfree86/common/xf86fbman.c @@ -802,10 +802,10 @@ LinearRemoveCBWrapper(FBAreaPtr area) xfree(pLink); } -#ifdef DEBUG static void -Dump(FBLinearLinkPtr pLink) +DumpDebug(FBLinearLinkPtr pLink) { +#ifdef DEBUG if (!pLink) ErrorF("MMmm, PLINK IS NULL!\n"); while (pLink) { @@ -817,8 +817,8 @@ Dump(FBLinearLinkPtr pLink) pLink = pLink->next; } -} #endif +} static FBLinearPtr AllocateLinear( @@ -889,9 +889,7 @@ AllocateLinear( linear->linear.RemoveLinearCallback = NULL; linear->linear.devPrivate.ptr = NULL; -#ifdef DEBUG - Dump(offman->LinearAreas); -#endif + DumpDebug(offman->LinearAreas); return &(linear->linear); } @@ -916,15 +914,11 @@ localAllocateOffscreenLinear( xf86FBScreenKey); /* Try to allocate from linear memory first...... */ -#ifdef DEBUG - ErrorF("ALLOCATING LINEAR\n"); -#endif + DebugF("ALLOCATING LINEAR\n"); if ((linear = AllocateLinear(offman, length, gran, privData))) return linear; -#ifdef DEBUG - ErrorF("NOPE, ALLOCATING AREA\n"); -#endif + DebugF("NOPE, ALLOCATING AREA\n"); if(!(link = xalloc(sizeof(FBLinearLink)))) return NULL; @@ -978,9 +972,7 @@ localAllocateOffscreenLinear( } else xfree(link); -#ifdef DEBUG - Dump(offman->LinearAreas); -#endif + DumpDebug(offman->LinearAreas); return linear; } @@ -1005,17 +997,13 @@ localFreeOffscreenLinear(FBLinearPtr linear) } if(pLink->area) { /* really an XY area */ -#ifdef DEBUG - ErrorF("FREEING AREA\n"); -#endif + DebugF("FREEING AREA\n"); localFreeOffscreenArea(pLink->area); if(pLinkPrev) pLinkPrev->next = pLink->next; else offman->LinearAreas = pLink->next; xfree(pLink); -#ifdef DEBUG - Dump(offman->LinearAreas); -#endif + DumpDebug(offman->LinearAreas); return; } @@ -1037,10 +1025,8 @@ localFreeOffscreenLinear(FBLinearPtr linear) } } -#ifdef DEBUG - ErrorF("FREEING LINEAR\n"); - Dump(offman->LinearAreas); -#endif + DebugF("FREEING LINEAR\n"); + DumpDebug(offman->LinearAreas); } diff --git a/hw/xfree86/common/xf86sbusBus.c b/hw/xfree86/common/xf86sbusBus.c index 924c2bcb6..4936e75be 100644 --- a/hw/xfree86/common/xf86sbusBus.c +++ b/hw/xfree86/common/xf86sbusBus.c @@ -435,9 +435,7 @@ xf86MatchSbusInstances(const char *driverName, int sbusDevId, return actualcards; } -#ifdef DEBUG - ErrorF("%s instances found: %d\n", driverName, allocatedInstances); -#endif + DebugF("%s instances found: %d\n", driverName, allocatedInstances); for (i = 0; i < allocatedInstances; i++) { char *promPath = NULL; @@ -494,9 +492,7 @@ xf86MatchSbusInstances(const char *driverName, int sbusDevId, xfree(promPath); } -#ifdef DEBUG - ErrorF("%s instances found: %d\n", driverName, numClaimedInstances); -#endif + DebugF("%s instances found: %d\n", driverName, numClaimedInstances); /* * Of the claimed instances, check that another driver hasn't already @@ -510,11 +506,9 @@ xf86MatchSbusInstances(const char *driverName, int sbusDevId, if (!xf86CheckSbusSlot(psdp->fbNum)) continue; -#ifdef DEBUG - ErrorF("%s: card at fb%d %08x is claimed by a Device section\n", + DebugF("%s: card at fb%d %08x is claimed by a Device section\n", driverName, psdp->fbNum, psdp->node.node); -#endif - + /* Allocate an entry in the lists to be returned */ numFound++; retEntities = xnfrealloc(retEntities, numFound * sizeof(int)); diff --git a/hw/xfree86/os-support/linux/int10/linux.c b/hw/xfree86/os-support/linux/int10/linux.c index 8274bbbfb..0cf3507c3 100644 --- a/hw/xfree86/os-support/linux/int10/linux.c +++ b/hw/xfree86/os-support/linux/int10/linux.c @@ -115,9 +115,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) if ((!vidMem) || (!sysMem)) { if ((fd = open(DEV_MEM, O_RDWR, 0)) >= 0) { if (!sysMem) { -#ifdef DEBUG - ErrorF("Mapping sys bios area\n"); -#endif + DebugF("Mapping sys bios area\n"); if ((sysMem = mmap((void *)(SYS_BIOS), BIOS_SIZE, PROT_READ | PROT_EXEC, MAP_SHARED | MAP_FIXED, fd, SYS_BIOS)) @@ -128,9 +126,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) } } if (!vidMem) { -#ifdef DEBUG - ErrorF("Mapping VRAM area\n"); -#endif + DebugF("Mapping VRAM area\n"); if ((vidMem = mmap((void *)(V_RAM), VRAM_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_SHARED | MAP_FIXED, fd, V_RAM)) @@ -162,9 +158,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) (pointer)xnfcalloc(1, ALLOC_ENTRIES(pagesize)); if (!xf86IsEntityPrimary(entityIndex)) { -#ifdef DEBUG - ErrorF("Mapping high memory area\n"); -#endif + DebugF("Mapping high memory area\n"); if ((high_mem = shmget(counter++, HIGH_MEM_SIZE, IPC_CREAT | SHM_R | SHM_W)) == -1) { if (errno == ENOSYS) @@ -176,9 +170,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) goto error1; } } else { -#ifdef DEBUG - ErrorF("Mapping Video BIOS\n"); -#endif + DebugF("Mapping Video BIOS\n"); videoBiosMapped = TRUE; if ((fd = open(DEV_MEM, O_RDWR, 0)) >= 0) { if ((vMem = mmap((void *)(V_BIOS), SYS_BIOS - V_BIOS, @@ -195,9 +187,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) } ((linuxInt10Priv*)pInt->private)->highMem = high_mem; -#ifdef DEBUG - ErrorF("Mapping 640kB area\n"); -#endif + DebugF("Mapping 640kB area\n"); if ((low_mem = shmget(counter++, V_RAM, IPC_CREAT | SHM_R | SHM_W)) == -1) { xf86DrvMsg(screen, X_ERROR, @@ -229,16 +219,12 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) Int10Current = pInt; -#ifdef DEBUG - ErrorF("Mapping int area\n"); -#endif + DebugF("Mapping int area\n"); if (xf86ReadBIOS(0, 0, (unsigned char *)0, LOW_PAGE_SIZE) < 0) { xf86DrvMsg(screen, X_ERROR, "Cannot read int vect\n"); goto error3; } -#ifdef DEBUG - ErrorF("done\n"); -#endif + DebugF("done\n"); /* * Read in everything between V_BIOS and SYS_BIOS as some system BIOSes * have executable code there. Note that xf86ReadBIOS() can only bring in @@ -246,17 +232,13 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) */ if (!videoBiosMapped) { memset((pointer)V_BIOS, 0, SYS_BIOS - V_BIOS); -#ifdef DEBUG - ErrorF("Reading BIOS\n"); -#endif + DebugF("Reading BIOS\n"); for (cs = V_BIOS; cs < SYS_BIOS; cs += V_BIOS_SIZE) if (xf86ReadBIOS(cs, 0, (pointer)cs, V_BIOS_SIZE) < V_BIOS_SIZE) xf86DrvMsg(screen, X_WARNING, "Unable to retrieve all of segment 0x%06lX.\n", (long)cs); -#ifdef DEBUG - ErrorF("done\n"); -#endif + DebugF("done\n"); } if (xf86IsEntityPrimary(entityIndex) && !(initPrimary(options))) { diff --git a/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c b/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c index 9412b07a4..34afd9502 100644 --- a/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c +++ b/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c @@ -172,9 +172,7 @@ vm86_GP_fault(xf86Int10InfoPtr pInt) break; case 0xf4: -#ifdef DEBUG - ErrorF("hlt at %p\n", lina); -#endif + DebugF("hlt at %p\n", lina); return FALSE; case 0x0f: diff --git a/hw/xfree86/os-support/linux/lnx_acpi.c b/hw/xfree86/os-support/linux/lnx_acpi.c index 8e11f4a59..5fad19451 100644 --- a/hw/xfree86/os-support/linux/lnx_acpi.c +++ b/hw/xfree86/os-support/linux/lnx_acpi.c @@ -135,15 +135,11 @@ lnxACPIOpen(void) int r = -1; static int warned = 0; -#ifdef DEBUG - ErrorF("ACPI: OSPMOpen called\n"); -#endif + DebugF("ACPI: OSPMOpen called\n"); if (ACPIihPtr || !xf86Info.pmFlag) return NULL; -#ifdef DEBUG - ErrorF("ACPI: Opening device\n"); -#endif + DebugF("ACPI: Opening device\n"); if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) > -1) { memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; @@ -172,10 +168,8 @@ static void lnxCloseACPI(void) { int fd; - -#ifdef DEBUG - ErrorF("ACPI: Closing device\n"); -#endif + + DebugF("ACPI: Closing device\n"); if (ACPIihPtr) { fd = xf86RemoveGeneralHandler(ACPIihPtr); shutdown(fd, 2); diff --git a/hw/xfree86/os-support/linux/lnx_apm.c b/hw/xfree86/os-support/linux/lnx_apm.c index 9dae00e57..4ccc7d662 100644 --- a/hw/xfree86/os-support/linux/lnx_apm.c +++ b/hw/xfree86/os-support/linux/lnx_apm.c @@ -160,15 +160,11 @@ lnxAPMOpen(void) { int fd, pfd; -#ifdef DEBUG - ErrorF("APM: OSPMOpen called\n"); -#endif + DebugF("APM: OSPMOpen called\n"); if (APMihPtr || !xf86Info.pmFlag) return NULL; -#ifdef DEBUG - ErrorF("APM: Opening device\n"); -#endif + DebugF("APM: Opening device\n"); if ((fd = open( APM_DEVICE, O_RDWR )) > -1) { if (access( APM_PROC, R_OK ) || ((pfd = open( APM_PROC, O_RDONLY)) == -1)) { @@ -191,10 +187,8 @@ static void lnxCloseAPM(void) { int fd; - -#ifdef DEBUG - ErrorF("APM: Closing device\n"); -#endif + + DebugF("APM: Closing device\n"); if (APMihPtr) { fd = xf86RemoveGeneralHandler(APMihPtr); close(fd); diff --git a/hw/xfree86/os-support/linux/lnx_axp.c b/hw/xfree86/os-support/linux/lnx_axp.c index f7151c8f4..d25999924 100644 --- a/hw/xfree86/os-support/linux/lnx_axp.c +++ b/hw/xfree86/os-support/linux/lnx_axp.c @@ -69,21 +69,15 @@ lnxGetAXP(void) switch (count) { case 1: sscanf(res, "cpu model : %s",cpu); -#ifdef DEBUG - ErrorF("CPU %s\n",cpu); -#endif + DebugF("CPU %s\n",cpu); break; case 5: sscanf(res, "system type : %s",systype); -#ifdef DEBUG - ErrorF("system type : %s\n",systype); -#endif + DebugF("system type : %s\n",systype); break; case 6: sscanf(res, "system variation : %s",sysvari); -#ifdef DEBUG - ErrorF("system variation: %s\n",sysvari); -#endif + DebugF("system variation: %s\n",sysvari); break; } count++; diff --git a/hw/xfree86/os-support/linux/lnx_font.c b/hw/xfree86/os-support/linux/lnx_font.c index e9a5b6aef..5b2696af5 100644 --- a/hw/xfree86/os-support/linux/lnx_font.c +++ b/hw/xfree86/os-support/linux/lnx_font.c @@ -65,9 +65,7 @@ getfont(int *width, int *height, op.flags = 0; SYSCALL(result = ioctl(xf86Info.consoleFd, KDFONTOP, &op)); -#ifdef DEBUG - ErrorF("Console font read: h: %i count: %i\n",op.height,op.charcount); -#endif + DebugF("Console font read: h: %i count: %i\n",op.height,op.charcount); if (!result) { @@ -130,9 +128,7 @@ lnx_savefont(void) int fd; int width = 32, height = 32, charcount = 2048; -#ifdef DEBUG - ErrorF("SAVE font\n"); -#endif + DebugF("SAVE font\n"); #if CHECK_OS_VERSION /* Check if the kernel has full support for this */ @@ -247,9 +243,7 @@ lnx_restorefont(void) { if (lnxfont.data == NULL) return FALSE; -#ifdef DEBUG - ErrorF("RESTORE font\n"); -#endif + DebugF("RESTORE font\n"); #if 0 /* must wack the height to make the kernel reprogram the VGA registers */ if (!setfont(lnxfont.width, lnxfont.height + 1, lnxfont.charcount, diff --git a/hw/xfree86/os-support/linux/lnx_video.c b/hw/xfree86/os-support/linux/lnx_video.c index ed3576638..73409dfba 100644 --- a/hw/xfree86/os-support/linux/lnx_video.c +++ b/hw/xfree86/os-support/linux/lnx_video.c @@ -292,9 +292,7 @@ mtrr_add_wc_region(int screenNum, unsigned long base, unsigned long size, lbase = lbase >> 1, d_size <<= 1); while (d_size > n_size) d_size = d_size >> 1; -#ifdef DEBUG - ErrorF("WC_BASE: 0x%lx WC_END: 0x%lx\n",base,base+d_size-1); -#endif + DebugF("WC_BASE: 0x%lx WC_END: 0x%lx\n",base,base+d_size-1); n_base += d_size; n_size -= d_size; if (n_size) { @@ -424,11 +422,9 @@ mapVidMem(int ScreenNum, unsigned long Base, unsigned long Size, int flags) realBase = Base & ~(getpagesize() - 1); alignOff = Base - realBase; -#ifdef DEBUG - ErrorF("base: %lx, realBase: %lx, alignOff: %lx \n", + DebugF("base: %lx, realBase: %lx, alignOff: %lx \n", Base,realBase,alignOff); -#endif - + #if defined(__ia64__) || defined(__arm__) || defined(__s390__) #ifndef MAP_WRITECOMBINED #define MAP_WRITECOMBINED 0x00010000 @@ -469,9 +465,7 @@ mapVidMem(int ScreenNum, unsigned long Base, unsigned long Size, int flags) " (0x%08lx,0x%lx) (%s)\n", Base, Size, strerror(errno)); } -#ifdef DEBUG - ErrorF("base: %lx aligned base: %lx\n",base, base + alignOff); -#endif + DebugF("base: %lx aligned base: %lx\n",base, base + alignOff); return (char *)base + alignOff; } #endif /* !(__sparc__) */ @@ -481,10 +475,8 @@ unmapVidMem(int ScreenNum, pointer Base, unsigned long Size) { memType alignOff = (memType)Base - ((memType)Base & ~(getpagesize() - 1)); - -#ifdef DEBUG - ErrorF("alignment offset: %lx\n",alignOff); -#endif + + DebugF("alignment offset: %lx\n",alignOff); munmap((caddr_t)((memType)Base - alignOff), (Size + alignOff)); } diff --git a/hw/xfree86/os-support/sco/sco_video.c b/hw/xfree86/os-support/sco/sco_video.c index 7edf71db3..f63b71df8 100644 --- a/hw/xfree86/os-support/sco/sco_video.c +++ b/hw/xfree86/os-support/sco/sco_video.c @@ -124,9 +124,7 @@ mapVidMemMMAP(int ScreenNum, unsigned long Base, unsigned long Size, int flags) realBase = Base & ~(getpagesize() - 1); alignOff = Base - realBase; -#ifdef DEBUG - ErrorF("base: %lx, realBase: %lx, alignOff: %lx\n", Base,realBase,alignOff); -#endif + DebugF("base: %lx, realBase: %lx, alignOff: %lx\n", Base,realBase,alignOff); base = mmap((caddr_t)0, Size + alignOff, (flags & VIDMEM_READONLY) ? PROT_READ : (PROT_READ | PROT_WRITE), @@ -138,9 +136,7 @@ mapVidMemMMAP(int ScreenNum, unsigned long Base, unsigned long Size, int flags) return 0; /* NOTREACHED */ } -#ifdef DEBUG - ErrorF("base: %lx aligned base: %lx\n",base, base + alignOff); -#endif + DebugF("base: %lx aligned base: %lx\n",base, base + alignOff); return (pointer)((char *)base + alignOff); } diff --git a/hw/xfree86/os-support/shared/bios_mmap.c b/hw/xfree86/os-support/shared/bios_mmap.c index 96d56bf1c..40afd5b8e 100644 --- a/hw/xfree86/os-support/shared/bios_mmap.c +++ b/hw/xfree86/os-support/shared/bios_mmap.c @@ -68,10 +68,8 @@ xf86ReadBIOS(unsigned long Base, unsigned long Offset, unsigned char *Buf, close(fd); return(-1); } -#ifdef DEBUG - ErrorF("xf86ReadBIOS: BIOS at 0x%08x has signature 0x%04x\n", + DebugF("xf86ReadBIOS: BIOS at 0x%08x has signature 0x%04x\n", Base, ptr[0] | (ptr[1] << 8)); -#endif (void)memcpy(Buf, (void *)(ptr + Offset), Len); (void)munmap((caddr_t)ptr, mlen); (void)close(fd); diff --git a/hw/xfree86/os-support/shared/posix_tty.c b/hw/xfree86/os-support/shared/posix_tty.c index 697d0e51c..bf1bb03a3 100644 --- a/hw/xfree86/os-support/shared/posix_tty.c +++ b/hw/xfree86/os-support/shared/posix_tty.c @@ -400,17 +400,14 @@ int xf86ReadSerial (int fd, void *buf, int count) { int r; -#ifdef DEBUG int i; -#endif + SYSCALL (r = read (fd, buf, count)); -#ifdef DEBUG - ErrorF("ReadingSerial: 0x%x", + DebugF("ReadingSerial: 0x%x", (unsigned char)*(((unsigned char *)buf))); for (i = 1; i < r; i++) - ErrorF(", 0x%x",(unsigned char)*(((unsigned char *)buf) + i)); - ErrorF("\n"); -#endif + DebugF(", 0x%x",(unsigned char)*(((unsigned char *)buf) + i)); + DebugF("\n"); return (r); } @@ -418,14 +415,12 @@ int xf86WriteSerial (int fd, const void *buf, int count) { int r; -#ifdef DEBUG int i; - ErrorF("WritingSerial: 0x%x",(unsigned char)*(((unsigned char *)buf))); + DebugF("WritingSerial: 0x%x",(unsigned char)*(((unsigned char *)buf))); for (i = 1; i < count; i++) ErrorF(", 0x%x",(unsigned char)*(((unsigned char *)buf) + i)); - ErrorF("\n"); -#endif + DebugF("\n"); SYSCALL (r = write (fd, buf, count)); return (r); } @@ -482,9 +477,7 @@ xf86FlushInput(int fd) struct timeval timeout; char c[4]; -#ifdef DEBUG - ErrorF("FlushingSerial\n"); -#endif + DebugF("FlushingSerial\n"); if (tcflush(fd, TCIFLUSH) == 0) return 0; diff --git a/hw/xfree86/ramdac/TI.c b/hw/xfree86/ramdac/TI.c index f421fc39a..1c541d76b 100644 --- a/hw/xfree86/ramdac/TI.c +++ b/hw/xfree86/ramdac/TI.c @@ -115,10 +115,8 @@ TIramdacCalculateMNPForClock( VCO = 8.0 * IntRef * best_m / best_n; ActualClock = VCO / ( 1 << p ); -#ifdef DEBUG - ErrorF( "f_out=%ld f_vco=%.1f n=%d m=%d p=%d\n", + DebugF( "f_out=%ld f_vco=%.1f n=%d m=%d p=%d\n", ActualClock, VCO, *rN, *rM, *rP); -#endif return (ActualClock); } diff --git a/hw/xfree86/vbe/vbeModes.c b/hw/xfree86/vbe/vbeModes.c index fb730a708..1a4d2407c 100644 --- a/hw/xfree86/vbe/vbeModes.c +++ b/hw/xfree86/vbe/vbeModes.c @@ -414,11 +414,9 @@ VBESetModeParameters(ScrnInfoPtr pScrn, vbeInfoPtr pVbe) data->block->PixelClock = best->Clock * 1000; /* XXX May not have this. */ clock = VBEGetPixelClock(pVbe, data->mode, data->block->PixelClock); -#ifdef DEBUG - ErrorF("Setting clock %.2fMHz, closest is %.2fMHz\n", + DebugF("Setting clock %.2fMHz, closest is %.2fMHz\n", (double)data->block->PixelClock / 1000000.0, (double)clock / 1000000.0); -#endif if (clock) data->block->PixelClock = clock; data->mode |= (1 << 11); diff --git a/hw/xfree86/vgahw/vgaHW.c b/hw/xfree86/vgahw/vgaHW.c index 9d466e3dc..004376b75 100644 --- a/hw/xfree86/vgahw/vgaHW.c +++ b/hw/xfree86/vgahw/vgaHW.c @@ -1025,32 +1025,24 @@ vgaHWSaveMode(ScrnInfoPtr scrninfp, vgaRegPtr save) for (i = 0; i < save->numCRTC; i++) { save->CRTC[i] = hwp->readCrtc(hwp, i); -#ifdef DEBUG - ErrorF("CRTC[0x%02x] = 0x%02x\n", i, save->CRTC[i]); -#endif + DebugF("CRTC[0x%02x] = 0x%02x\n", i, save->CRTC[i]); } hwp->enablePalette(hwp); for (i = 0; i < save->numAttribute; i++) { save->Attribute[i] = hwp->readAttr(hwp, i); -#ifdef DEBUG - ErrorF("Attribute[0x%02x] = 0x%02x\n", i, save->Attribute[i]); -#endif + DebugF("Attribute[0x%02x] = 0x%02x\n", i, save->Attribute[i]); } hwp->disablePalette(hwp); for (i = 0; i < save->numGraphics; i++) { save->Graphics[i] = hwp->readGr(hwp, i); -#ifdef DEBUG - ErrorF("Graphics[0x%02x] = 0x%02x\n", i, save->Graphics[i]); -#endif + DebugF("Graphics[0x%02x] = 0x%02x\n", i, save->Graphics[i]); } for (i = 1; i < save->numSequencer; i++) { save->Sequencer[i] = hwp->readSeq(hwp, i); -#ifdef DEBUG - ErrorF("Sequencer[0x%02x] = 0x%02x\n", i, save->Sequencer[i]); -#endif + DebugF("Sequencer[0x%02x] = 0x%02x\n", i, save->Sequencer[i]); } } @@ -1088,18 +1080,16 @@ vgaHWSaveColormap(ScrnInfoPtr scrninfp, vgaRegPtr save) hwp->writeDacReadAddr(hwp, 0x00); for (i = 0; i < 6; i++) { save->DAC[i] = hwp->readDacData(hwp); -#ifdef DEBUG switch (i % 3) { case 0: - ErrorF("DAC[0x%02x] = 0x%02x, ", i / 3, save->DAC[i]); + DebugF("DAC[0x%02x] = 0x%02x, ", i / 3, save->DAC[i]); break; case 1: - ErrorF("0x%02x, ", save->DAC[i]); + DebugF("0x%02x, ", save->DAC[i]); break; case 2: - ErrorF("0x%02x\n", save->DAC[i]); + DebugF("0x%02x\n", save->DAC[i]); } -#endif } /* @@ -1131,18 +1121,16 @@ vgaHWSaveColormap(ScrnInfoPtr scrninfp, vgaRegPtr save) for (i = 6; i < 768; i++) { save->DAC[i] = hwp->readDacData(hwp); DACDelay(hwp); -#ifdef DEBUG switch (i % 3) { case 0: - ErrorF("DAC[0x%02x] = 0x%02x, ", i / 3, save->DAC[i]); + DebugF("DAC[0x%02x] = 0x%02x, ", i / 3, save->DAC[i]); break; case 1: - ErrorF("0x%02x, ", save->DAC[i]); + DebugF("0x%02x, ", save->DAC[i]); break; case 2: - ErrorF("0x%02x\n", save->DAC[i]); + DebugF("0x%02x\n", save->DAC[i]); } -#endif } } @@ -1772,9 +1760,7 @@ vgaHWMapMem(ScrnInfoPtr scrp) * XXX This is not correct but we do it * for now. */ -#ifdef DEBUG - ErrorF("Mapping VGAMem\n"); -#endif + DebugF("Mapping VGAMem\n"); hwp->Base = xf86MapDomainMemory(scr_index, VIDMEM_MMIO_32BIT, hwp->dev, hwp->MapPhys, hwp->MapSize); return hwp->Base != NULL; @@ -1790,9 +1776,7 @@ vgaHWUnmapMem(ScrnInfoPtr scrp) if (hwp->Base == NULL) return; -#ifdef DEBUG - ErrorF("Unmapping VGAMem\n"); -#endif + DebugF("Unmapping VGAMem\n"); xf86UnMapVidMem(scr_index, hwp->Base, hwp->MapSize); hwp->Base = NULL; } From 8331bde0adeccefb275c4d707e7b2cb1d95b1581 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Fri, 15 May 2009 21:36:28 +0100 Subject: [PATCH 61/89] Cygwin/X: link with libmain.a to provide main() Commit 987579c930bda803427a28cb82773c389f5110d6 moves main.c into into libmain.a to be linked with separately, and updates the various DDXs to link with libmain.a, except Xwin, which also needs this change. Signed-off-by: Jon TURNEY --- hw/xwin/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xwin/Makefile.am b/hw/xwin/Makefile.am index 504c2a6cd..4f9513088 100644 --- a/hw/xwin/Makefile.am +++ b/hw/xwin/Makefile.am @@ -147,7 +147,7 @@ XWin_SOURCES = $(SRCS) INCLUDES = -I$(top_srcdir)/miext/rootless XWin_DEPENDENCIES = $(XWIN_LIBS) -XWin_LDADD = $(XWIN_LIBS) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XWIN_SYS_LIBS) +XWin_LDADD = $(XWIN_LIBS) $(MAIN_LIB) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XWIN_SYS_LIBS) .rc.o: $(WINDRES) --use-temp-file -i $< --input-format=rc -o $@ -O coff -DPROJECT_NAME=\"$(VENDOR_NAME_SHORT)\" From 510cbd43cd4e34bd459e8f74ab2855714b4ca95d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Mon, 18 May 2009 17:48:57 +0200 Subject: [PATCH 62/89] EXA: Defragment offscreen memory. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit At most once per second, under the following circumstances: * We can't satisfy an offscreen memory allocation, but there seems to be enough offscreen memory available in total. or * The server has been idle for at least 100ms, and there is more than one available offscreen area. Signed-off-by: Michel Dänzer --- exa/exa.c | 53 ++++++++++ exa/exa.h | 13 +++ exa/exa_offscreen.c | 231 ++++++++++++++++++++++++++++++++++++++++++-- exa/exa_priv.h | 8 ++ 4 files changed, 297 insertions(+), 8 deletions(-) diff --git a/exa/exa.c b/exa/exa.c index 2de348a8d..089350b24 100644 --- a/exa/exa.c +++ b/exa/exa.c @@ -1048,6 +1048,50 @@ exaCreateScreenResources(ScreenPtr pScreen) return TRUE; } +static void +ExaBlockHandler(int screenNum, pointer blockData, pointer pTimeout, + pointer pReadmask) +{ + ScreenPtr pScreen = screenInfo.screens[screenNum]; + ExaScreenPriv(pScreen); + + unwrap(pExaScr, pScreen, BlockHandler); + (*pScreen->BlockHandler) (screenNum, blockData, pTimeout, pReadmask); + wrap(pExaScr, pScreen, BlockHandler, ExaBlockHandler); + + /* Try and keep the offscreen memory area tidy every now and then (at most + * once per second) when the server has been idle for at least 100ms. + */ + if (pExaScr->numOffscreenAvailable > 1) { + CARD32 now = GetTimeInMillis(); + + pExaScr->nextDefragment = now + + max(100, (INT32)(pExaScr->lastDefragment + 1000 - now)); + AdjustWaitForDelay(pTimeout, pExaScr->nextDefragment - now); + } +} + +static void +ExaWakeupHandler(int screenNum, pointer wakeupData, unsigned long result, + pointer pReadmask) +{ + ScreenPtr pScreen = screenInfo.screens[screenNum]; + ExaScreenPriv(pScreen); + + unwrap(pExaScr, pScreen, WakeupHandler); + (*pScreen->WakeupHandler) (screenNum, wakeupData, result, pReadmask); + wrap(pExaScr, pScreen, WakeupHandler, ExaWakeupHandler); + + if (result == 0 && pExaScr->numOffscreenAvailable > 1) { + CARD32 now = GetTimeInMillis(); + + if ((int)(now - pExaScr->nextDefragment) > 0) { + ExaOffscreenDefragment(pScreen); + pExaScr->lastDefragment = now; + } + } +} + /** * exaCloseScreen() unwraps its wrapped screen functions and tears down EXA's * screen private, before calling down to the next CloseSccreen. @@ -1063,6 +1107,10 @@ exaCloseScreen(int i, ScreenPtr pScreen) if (ps->Glyphs == exaGlyphs) exaGlyphsFini(pScreen); + if (pScreen->BlockHandler == ExaBlockHandler) + unwrap(pExaScr, pScreen, BlockHandler); + if (pScreen->WakeupHandler == ExaWakeupHandler) + unwrap(pExaScr, pScreen, WakeupHandler); unwrap(pExaScr, pScreen, CreateGC); unwrap(pExaScr, pScreen, CloseScreen); unwrap(pExaScr, pScreen, GetImage); @@ -1223,6 +1271,11 @@ exaDriverInit (ScreenPtr pScreen, /* * Replace various fb screen functions */ + if ((pExaScr->info->flags & EXA_OFFSCREEN_PIXMAPS) && + !(pExaScr->info->flags & EXA_HANDLES_PIXMAPS)) { + wrap(pExaScr, pScreen, BlockHandler, ExaBlockHandler); + wrap(pExaScr, pScreen, WakeupHandler, ExaWakeupHandler); + } wrap(pExaScr, pScreen, CreateGC, exaCreateGC); wrap(pExaScr, pScreen, CloseScreen, exaCloseScreen); wrap(pExaScr, pScreen, GetImage, exaGetImage); diff --git a/exa/exa.h b/exa/exa.h index 3e1f1c75a..0701ec98f 100644 --- a/exa/exa.h +++ b/exa/exa.h @@ -66,6 +66,9 @@ struct _ExaOffscreenArea { ExaOffscreenArea *next; unsigned eviction_cost; + + ExaOffscreenArea *prev; /* Double-linked list for defragmentation */ + int align; /* required alignment */ }; /** @@ -744,6 +747,16 @@ typedef struct _ExaDriver { */ #define EXA_SUPPORTS_PREPARE_AUX (1 << 4) +/** + * EXA_SUPPORTS_OFFSCREEN_OVERLAPS indicates to EXA that the driver Copy hooks + * can handle the source and destination occupying overlapping offscreen memory + * areas. This allows the offscreen memory defragmentation code to defragment + * areas where the defragmented position overlaps the fragmented position. + * + * Typically this is supported by traditional 2D engines but not by 3D engines. + */ +#define EXA_SUPPORTS_OFFSCREEN_OVERLAPS (1 << 5) + /** @} */ /* in exa.c */ diff --git a/exa/exa_offscreen.c b/exa/exa_offscreen.c index d7198cbdc..043fd83ae 100644 --- a/exa/exa_offscreen.c +++ b/exa/exa_offscreen.c @@ -172,7 +172,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, { ExaOffscreenArea *area; ExaScreenPriv (pScreen); - int tmp, real_size = 0; + int tmp, real_size = 0, free_total = 0, largest_avail = 0; #if DEBUG_OFFSCREEN static int number = 0; ErrorF("================= ============ allocating a new pixmap %d\n", ++number); @@ -213,6 +213,35 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, /* does it fit? */ if (real_size <= area->size) break; + + free_total += area->size; + + if (area->size > largest_avail) + largest_avail = area->size; + } + + if (!area && free_total >= size) { + CARD32 now = GetTimeInMillis(); + + /* Don't defragment more than once per second, to avoid adding more + * overhead than we're trying to prevent + */ + if (abs((INT32) (now - pExaScr->lastDefragment)) > 1000) { + area = ExaOffscreenDefragment(pScreen); + pExaScr->lastDefragment = now; + + if (area) { + /* adjust size to match alignment requirement */ + real_size = size; + tmp = area->base_offset % align; + if (tmp) + real_size += (align - tmp); + + /* does it fit? */ + if (real_size > area->size) + area = NULL; + } + } } if (!area) @@ -255,16 +284,31 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, if (!new_area) return NULL; new_area->base_offset = area->base_offset + real_size; + +#if DEBUG_OFFSCREEN + if (new_area->base_offset >= pExaScr->info->memorySize) + ErrorF("new_area->base_offset = 0x%08x >= memorySize!\n", + new_area->base_offset); +#endif + new_area->offset = new_area->base_offset; + new_area->align = 0; new_area->size = area->size - real_size; new_area->state = ExaOffscreenAvail; new_area->save = NULL; new_area->last_use = 0; new_area->eviction_cost = 0; new_area->next = area->next; + if (area->next) + area->next->prev = new_area; + else + pExaScr->info->offScreenAreas->prev = new_area; area->next = new_area; + new_area->prev = area; area->size = real_size; - } + } else + pExaScr->numOffscreenAvailable--; + /* * Mark this area as in use */ @@ -277,6 +321,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, area->last_use = pExaScr->offScreenCounter++; area->offset = (area->base_offset + align - 1); area->offset -= area->offset % align; + area->align = align; ExaOffscreenValidate (pScreen); @@ -391,7 +436,7 @@ exaEnableDisableFBAccess (int index, Bool enable) /* merge the next free area into this one */ static void -ExaOffscreenMerge (ExaOffscreenArea *area) +ExaOffscreenMerge (ExaScreenPrivPtr pExaScr, ExaOffscreenArea *area) { ExaOffscreenArea *next = area->next; @@ -399,7 +444,13 @@ ExaOffscreenMerge (ExaOffscreenArea *area) area->size += next->size; /* frob pointer */ area->next = next->next; + if (area->next) + area->next->prev = area; + else + pExaScr->info->offScreenAreas->prev = area; xfree (next); + + pExaScr->numOffscreenAvailable--; } /** @@ -436,19 +487,19 @@ exaOffscreenFree (ScreenPtr pScreen, ExaOffscreenArea *area) if (area == pExaScr->info->offScreenAreas) prev = NULL; else - for (prev = pExaScr->info->offScreenAreas; prev; prev = prev->next) - if (prev->next == area) - break; + prev = area->prev; + + pExaScr->numOffscreenAvailable++; /* link with next area if free */ if (next && next->state == ExaOffscreenAvail) - ExaOffscreenMerge (area); + ExaOffscreenMerge (pExaScr, area); /* link with prev area if free */ if (prev && prev->state == ExaOffscreenAvail) { area = prev; - ExaOffscreenMerge (area); + ExaOffscreenMerge (pExaScr, area); } ExaOffscreenValidate (pScreen); @@ -468,6 +519,167 @@ ExaOffscreenMarkUsed (PixmapPtr pPixmap) pExaPixmap->area->last_use = pExaScr->offScreenCounter++; } +/** + * Defragment offscreen memory by compacting allocated areas at the end of it, + * leaving the total amount of memory available as a single area at the + * beginning (when there are no pinned allocations). + */ +_X_HIDDEN ExaOffscreenArea* +ExaOffscreenDefragment (ScreenPtr pScreen) +{ + ExaScreenPriv (pScreen); + ExaOffscreenArea *area, *largest_available = NULL; + int largest_size = 0; + PixmapPtr pDstPix; + ExaPixmapPrivPtr pExaDstPix; + + pDstPix = (*pScreen->CreatePixmap) (pScreen, 0, 0, 0, 0); + + if (!pDstPix) + return NULL; + + pExaDstPix = ExaGetPixmapPriv (pDstPix); + pExaDstPix->offscreen = TRUE; + + for (area = pExaScr->info->offScreenAreas->prev; + area != pExaScr->info->offScreenAreas; + ) + { + ExaOffscreenArea *prev = area->prev; + PixmapPtr pSrcPix; + ExaPixmapPrivPtr pExaSrcPix; + Bool save_offscreen; + int save_pitch; + + if (area->state != ExaOffscreenAvail || + prev->state == ExaOffscreenLocked || + (prev->state == ExaOffscreenRemovable && + prev->save != exaPixmapSave)) { + area = prev; + continue; + } + + if (prev->state == ExaOffscreenAvail) { + if (area == largest_available) { + largest_available = prev; + largest_size += prev->size; + } + area = prev; + ExaOffscreenMerge (pExaScr, area); + continue; + } + + if (area->size > largest_size) { + largest_available = area; + largest_size = area->size; + } + + pSrcPix = prev->privData; + pExaSrcPix = ExaGetPixmapPriv (pSrcPix); + + pExaDstPix->fb_ptr = pExaScr->info->memoryBase + + area->base_offset + area->size - prev->size + prev->base_offset - + prev->offset; + pExaDstPix->fb_ptr -= (unsigned long)pExaDstPix->fb_ptr % prev->align; + + if (pExaDstPix->fb_ptr <= pExaSrcPix->fb_ptr) { + area = prev; + continue; + } + + if (!(pExaScr->info->flags & EXA_SUPPORTS_OFFSCREEN_OVERLAPS) && + (pExaSrcPix->fb_ptr + prev->size) > pExaDstPix->fb_ptr) { + area = prev; + continue; + } + + save_offscreen = pExaSrcPix->offscreen; + save_pitch = pSrcPix->devKind; + + pExaSrcPix->offscreen = TRUE; + pSrcPix->devKind = pExaSrcPix->fb_pitch; + + pDstPix->drawable.width = pSrcPix->drawable.width; + pDstPix->devKind = pSrcPix->devKind; + pDstPix->drawable.height = pSrcPix->drawable.height; + pDstPix->drawable.depth = pSrcPix->drawable.depth; + pDstPix->drawable.bitsPerPixel = pSrcPix->drawable.bitsPerPixel; + + if (!pExaScr->info->PrepareCopy (pSrcPix, pDstPix, -1, -1, GXcopy, ~0)) { + pExaSrcPix->offscreen = save_offscreen; + pSrcPix->devKind = save_pitch; + area = prev; + continue; + } + + pExaScr->info->Copy (pDstPix, 0, 0, 0, 0, pDstPix->drawable.width, + pDstPix->drawable.height); + pExaScr->info->DoneCopy (pDstPix); + exaMarkSync (pScreen); + + DBG_OFFSCREEN(("Before swap: prev=0x%08x-0x%08x-0x%08x area=0x%08x-0x%08x-0x%08x\n", + prev->base_offset, prev->offset, prev->base_offset + prev->size, + area->base_offset, area->offset, area->base_offset + area->size)); + + /* Calculate swapped area offsets and sizes */ + area->base_offset = prev->base_offset; + area->offset = area->base_offset; + prev->offset += pExaDstPix->fb_ptr - pExaSrcPix->fb_ptr; + assert(prev->offset >= pExaScr->info->offScreenBase && + prev->offset < pExaScr->info->memorySize); + prev->base_offset = prev->offset; + if (area->next) + prev->size = area->next->base_offset - prev->base_offset; + else + prev->size = pExaScr->info->memorySize - prev->base_offset; + area->size = prev->base_offset - area->base_offset; + + DBG_OFFSCREEN(("After swap: area=0x%08x-0x%08x-0x%08x prev=0x%08x-0x%08x-0x%08x\n", + area->base_offset, area->offset, area->base_offset + area->size, + prev->base_offset, prev->offset, prev->base_offset + prev->size)); + + /* Swap areas in list */ + if (area->next) + area->next->prev = prev; + else + pExaScr->info->offScreenAreas->prev = prev; + if (prev->prev->next) + prev->prev->next = area; + else + pExaScr->info->offScreenAreas = area; + prev->next = area->next; + area->next = prev; + area->prev = prev->prev; + prev->prev = area; + if (!area->prev->next) + pExaScr->info->offScreenAreas = area; + +#if DEBUG_OFFSCREEN + if (prev->prev == prev || prev->next == prev) + ErrorF("Whoops, prev points to itself!\n"); + + if (area->prev == area || area->next == area) + ErrorF("Whoops, area points to itself!\n"); +#endif + + pExaSrcPix->fb_ptr = pExaDstPix->fb_ptr; + pExaSrcPix->offscreen = save_offscreen; + pSrcPix->devKind = save_pitch; + } + + pDstPix->drawable.width = 0; + pDstPix->drawable.height = 0; + pDstPix->drawable.depth = 0; + pDstPix->drawable.bitsPerPixel = 0; + + (*pScreen->DestroyPixmap) (pDstPix); + + if (area->state == ExaOffscreenAvail && area->size > largest_size) + return area; + + return largest_available; +} + /** * exaOffscreenInit initializes the offscreen memory manager. * @@ -491,15 +703,18 @@ exaOffscreenInit (ScreenPtr pScreen) area->state = ExaOffscreenAvail; area->base_offset = pExaScr->info->offScreenBase; area->offset = area->base_offset; + area->align = 0; area->size = pExaScr->info->memorySize - area->base_offset; area->save = NULL; area->next = NULL; + area->prev = area; area->last_use = 0; area->eviction_cost = 0; /* Add it to the free areas */ pExaScr->info->offScreenAreas = area; pExaScr->offScreenCounter = 1; + pExaScr->numOffscreenAvailable = 1; ExaOffscreenValidate (pScreen); diff --git a/exa/exa_priv.h b/exa/exa_priv.h index 874e7e987..b3df1a586 100644 --- a/exa/exa_priv.h +++ b/exa/exa_priv.h @@ -145,6 +145,8 @@ typedef struct { typedef void (*EnableDisableFBAccessProcPtr)(int, Bool); typedef struct { ExaDriverPtr info; + ScreenBlockHandlerProcPtr SavedBlockHandler; + ScreenWakeupHandlerProcPtr SavedWakeupHandler; CreateGCProcPtr SavedCreateGC; CloseScreenProcPtr SavedCloseScreen; GetImageProcPtr SavedGetImage; @@ -170,6 +172,9 @@ typedef struct { unsigned disableFbCount; Bool optimize_migration; unsigned offScreenCounter; + unsigned numOffscreenAvailable; + CARD32 lastDefragment; + CARD32 nextDefragment; /* Store all accessed pixmaps, so we can check for duplicates. */ PixmapPtr prepare_access[6]; @@ -460,6 +465,9 @@ ExaOffscreenSwapOut (ScreenPtr pScreen); void ExaOffscreenSwapIn (ScreenPtr pScreen); +ExaOffscreenArea* +ExaOffscreenDefragment (ScreenPtr pScreen); + Bool exaOffscreenInit(ScreenPtr pScreen); From 4addfcd633484b7f53b5df1b92bfca8bfc1dc48d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Mon, 18 May 2009 17:53:35 +0200 Subject: [PATCH 63/89] EXA: Allocate from the end of free offscreen memory rather than from the start. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This way we don't always need to scan over previously allocated areas when looking for an available one, and there might be less fragmentation. Signed-off-by: Michel Dänzer --- exa/exa_offscreen.c | 45 ++++++++++++++------------------------------- 1 file changed, 14 insertions(+), 31 deletions(-) diff --git a/exa/exa_offscreen.c b/exa/exa_offscreen.c index 043fd83ae..eb53b2a30 100644 --- a/exa/exa_offscreen.c +++ b/exa/exa_offscreen.c @@ -93,7 +93,7 @@ exaFindAreaToEvict(ExaScreenPrivPtr pExaScr, int size, int align) { ExaOffscreenArea *begin, *end, *best; unsigned cost, best_cost; - int avail, real_size, tmp; + int avail, real_size; best_cost = UINT_MAX; begin = end = pExaScr->info->offScreenAreas; @@ -111,10 +111,7 @@ exaFindAreaToEvict(ExaScreenPrivPtr pExaScr, int size, int align) break; /* adjust size needed to account for alignment loss for this area */ - real_size = size; - tmp = begin->base_offset % align; - if (tmp) - real_size += (align - tmp); + real_size = size + (begin->base_offset + begin->size - size) % align; while (avail < real_size && end != NULL) { @@ -172,7 +169,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, { ExaOffscreenArea *area; ExaScreenPriv (pScreen); - int tmp, real_size = 0, free_total = 0, largest_avail = 0; + int real_size = 0, free_total = 0, largest_avail = 0; #if DEBUG_OFFSCREEN static int number = 0; ErrorF("================= ============ allocating a new pixmap %d\n", ++number); @@ -205,10 +202,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, continue; /* adjust size to match alignment requirement */ - real_size = size; - tmp = area->base_offset % align; - if (tmp) - real_size += (align - tmp); + real_size = size + (area->base_offset + area->size - size) % align; /* does it fit? */ if (real_size <= area->size) @@ -232,10 +226,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, if (area) { /* adjust size to match alignment requirement */ - real_size = size; - tmp = area->base_offset % align; - if (tmp) - real_size += (align - tmp); + real_size = size + (area->base_offset + area->size - size) % align; /* does it fit? */ if (real_size > area->size) @@ -257,10 +248,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, } /* adjust size needed to account for alignment loss for this area */ - real_size = size; - tmp = area->base_offset % align; - if (tmp) - real_size += (align - tmp); + real_size = size + (area->base_offset + area->size - size) % align; /* * Kick out first area if in use @@ -283,13 +271,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, ExaOffscreenArea *new_area = xalloc (sizeof (ExaOffscreenArea)); if (!new_area) return NULL; - new_area->base_offset = area->base_offset + real_size; - -#if DEBUG_OFFSCREEN - if (new_area->base_offset >= pExaScr->info->memorySize) - ErrorF("new_area->base_offset = 0x%08x >= memorySize!\n", - new_area->base_offset); -#endif + new_area->base_offset = area->base_offset; new_area->offset = new_area->base_offset; new_area->align = 0; @@ -298,13 +280,14 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, new_area->save = NULL; new_area->last_use = 0; new_area->eviction_cost = 0; - new_area->next = area->next; - if (area->next) - area->next->prev = new_area; + new_area->next = area; + new_area->prev = area->prev; + if (area->prev->next) + area->prev->next = new_area; else - pExaScr->info->offScreenAreas->prev = new_area; - area->next = new_area; - new_area->prev = area; + pExaScr->info->offScreenAreas = new_area; + area->prev = new_area; + area->base_offset = new_area->base_offset + new_area->size; area->size = real_size; } else pExaScr->numOffscreenAvailable--; From 3cea176d5abcb0f14eefbdcbe17fed0847524dd4 Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Tue, 19 May 2009 19:30:33 -0400 Subject: [PATCH 64/89] xace: Fix a bad device access hook call. Add a proper access mode, and reverse the logic of the return value. Zero ("Success") is returned on success from the hook calls. Signed-off-by: Eamon Walsh --- dix/events.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dix/events.c b/dix/events.c index 157f9a8a1..b3caec8be 100644 --- a/dix/events.c +++ b/dix/events.c @@ -4088,10 +4088,10 @@ CoreFocusEvent(DeviceIntPtr dev, int type, int mode, int detail, WindowPtr pWin) { xKeymapEvent ke; ClientPtr client = clients[CLIENT_ID(pWin->drawable.id)]; - if (XaceHook(XACE_DEVICE_ACCESS, client, dev, FALSE)) - memmove((char *)&ke.map[0], (char *)&dev->key->down[1], 31); - else + if (XaceHook(XACE_DEVICE_ACCESS, client, dev, DixReadAccess)) bzero((char *)&ke.map[0], 31); + else + memmove((char *)&ke.map[0], (char *)&dev->key->down[1], 31); ke.type = KeymapNotify; DeliverEventsToWindow(dev, pWin, (xEvent *)&ke, 1, From 77e90261d5f91e1170c6e02deb0e3739c24fcfd6 Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Tue, 19 May 2009 19:36:03 -0400 Subject: [PATCH 65/89] dix/events.c: Use wClient where appropriate. Signed-off-by: Eamon Walsh --- dix/events.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/dix/events.c b/dix/events.c index b3caec8be..fd9337682 100644 --- a/dix/events.c +++ b/dix/events.c @@ -3989,8 +3989,7 @@ CoreEnterLeaveEvent( if ((type == EnterNotify) && (mask & KeymapStateMask)) { xKeymapEvent ke; - ClientPtr client = grab ? rClient(grab) - : clients[CLIENT_ID(pWin->drawable.id)]; + ClientPtr client = grab ? rClient(grab) : wClient(pWin); if (XaceHook(XACE_DEVICE_ACCESS, client, keybd, DixReadAccess)) bzero((char *)&ke.map[0], 31); else @@ -4087,7 +4086,7 @@ CoreFocusEvent(DeviceIntPtr dev, int type, int mode, int detail, WindowPtr pWin) ((pWin->eventMask | wOtherEventMasks(pWin)) & KeymapStateMask)) { xKeymapEvent ke; - ClientPtr client = clients[CLIENT_ID(pWin->drawable.id)]; + ClientPtr client = wClient(pWin); if (XaceHook(XACE_DEVICE_ACCESS, client, dev, DixReadAccess)) bzero((char *)&ke.map[0], 31); else @@ -5181,7 +5180,7 @@ DeleteWindowFromAnyEvents(WindowPtr pWin, Bool freeResources) to None */ #ifdef NOTDEF - || clients[CLIENT_ID(parent->drawable.id)]->clientGone + || wClient(parent)->clientGone #endif ); DoFocusEvents(keybd, pWin, parent, focusEventMode); From 22a33a7250f879b8f3eb84176a1dc57027d8cfe4 Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Tue, 19 May 2009 22:45:26 -0400 Subject: [PATCH 66/89] glx: Register names for the GLX resource types. Signed-off-by: Eamon Walsh --- glx/glxext.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/glx/glxext.c b/glx/glxext.c index 6bc7bef8e..bdacf8865 100644 --- a/glx/glxext.c +++ b/glx/glxext.c @@ -36,6 +36,7 @@ #include "glxserver.h" #include #include +#include #include "privates.h" #include #include "g_disptab.h" @@ -317,6 +318,10 @@ void GlxExtensionInit(void) __glXDrawableRes = CreateNewResourceType((DeleteType)DrawableGone); __glXSwapBarrierRes = CreateNewResourceType((DeleteType)SwapBarrierGone); + RegisterResourceName(__glXContextRes, "GLXContext"); + RegisterResourceName(__glXDrawableRes, "GLXDrawable"); + RegisterResourceName(__glXSwapBarrierRes, "GLXSwapBarrier"); + if (!dixRequestPrivate(glxClientPrivateKey, sizeof (__GLXclientState))) return; if (!AddCallback (&ClientStateCallback, glxClientCallback, 0)) From 79138eec1b49cbaca6a16f2bdd8579b5828aeb28 Mon Sep 17 00:00:00 2001 From: Matthias Hopf Date: Tue, 10 Mar 2009 16:03:26 +0100 Subject: [PATCH 67/89] randr: Setting gamma: inverse logic looks more sane --- hw/xfree86/modes/xf86Crtc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c index 0ab2f3df9..353b26874 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c @@ -353,7 +353,7 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati } /* Only upload when needed, to avoid unneeded delays. */ - if (!crtc->active) + if (crtc->active) crtc->funcs->gamma_set(crtc, crtc->gamma_red, crtc->gamma_green, crtc->gamma_blue, crtc->gamma_size); From a2c5ee36b21c2ee5c0468f1b251e74c1412dbecb Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Thu, 21 May 2009 10:20:48 -0400 Subject: [PATCH 68/89] EDID: Be more cautious about finding vendor blocks. Many old monitors zero-fill the detailed descriptors, so check for that to avoid a useless warning like: (WW) RADEON(0): Unknown vendor-specific block 0 --- hw/xfree86/ddc/interpret_edid.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c index 3edfd1fb5..bdcc92e64 100644 --- a/hw/xfree86/ddc/interpret_edid.c +++ b/hw/xfree86/ddc/interpret_edid.c @@ -285,6 +285,8 @@ get_std_timing_section(Uchar *c, struct std_timings *r, } } +static const unsigned char empty_block[18]; + static void get_dt_md_section(Uchar *c, struct edid_version *ver, struct detailed_monitor_section *det_mon) @@ -336,10 +338,10 @@ get_dt_md_section(Uchar *c, struct edid_version *ver, det_mon[i].type = DS_UNKOWN; break; } - if (c[3] <= 0x0F) { + if (c[3] <= 0x0F && memcmp(c, empty_block, sizeof(empty_block))) { det_mon[i].type = DS_VENDOR + c[3]; } - } else { + } else { det_mon[i].type = DT; get_detailed_timing_section(c,&det_mon[i].section.d_timings); } From a8bd1e1f96d8e5380972a7dce8d9940cd912aa09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Thu, 21 May 2009 18:21:28 -0400 Subject: [PATCH 69/89] Fix alpha map computation in miComputeCompositeRegion() According to the RENDER spec, the origin of the alpha map is interpreted relative to the origin of the drawable of the image, not the origin of drawable of the alpha map. The only use of alpha maps I have been able to find is in Qt and they don't use a non-zero alpha origin. --- render/mipict.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/render/mipict.c b/render/mipict.c index 777f111e5..fe1b8dad5 100644 --- a/render/mipict.c +++ b/render/mipict.c @@ -459,8 +459,8 @@ miComputeCompositeRegion (RegionPtr pRegion, if (pSrc->alphaMap) { if (!miClipPictureSrc (pRegion, pSrc->alphaMap, - xDst - (xSrc + pSrc->alphaOrigin.x), - yDst - (ySrc + pSrc->alphaOrigin.y))) + xDst - (xSrc - pSrc->alphaOrigin.x), + yDst - (ySrc - pSrc->alphaOrigin.y))) { pixman_region_fini (pRegion); return FALSE; @@ -477,8 +477,8 @@ miComputeCompositeRegion (RegionPtr pRegion, if (pMask->alphaMap) { if (!miClipPictureSrc (pRegion, pMask->alphaMap, - xDst - (xMask + pMask->alphaOrigin.x), - yDst - (yMask + pMask->alphaOrigin.y))) + xDst - (xMask - pMask->alphaOrigin.x), + yDst - (yMask - pMask->alphaOrigin.y))) { pixman_region_fini (pRegion); return FALSE; From cabff9007a4abad026b450a4aab155c7bcd94326 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 15 May 2009 08:33:07 +1000 Subject: [PATCH 70/89] xfree86: treat other drivers as mouse drivers in the config. Historically, if no input device was referenced in the ServerLayout, the server would pick the first "mouse" device found in the xorg.conf. This patch gives evdev, synaptics, vmmouse and void the same status. If there is a section in the config file using this driver - use it as the core pointer. Device selection is in driver-order, not in config-order. If a "mouse" device is listed after a "synaptics" device, the "mouse" device gets preference. This replicates the original behaviour. This code only takes effect if AllowEmptyInput is off and there is no core pointer in the server layout. Signed-off-by: Peter Hutterer --- hw/xfree86/common/xf86Config.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c index 73235a974..165958b07 100644 --- a/hw/xfree86/common/xf86Config.c +++ b/hw/xfree86/common/xf86Config.c @@ -1090,8 +1090,8 @@ Bool xf86DRI2Enabled(void) * 2. The "CorePointer" and "CoreKeyboard" InputDevices referred to by * the active ServerLayout. * 3. The first InputDevices marked as "CorePointer" and "CoreKeyboard". - * 4. The first InputDevices that use the 'mouse' and 'keyboard' or 'kbd' - * drivers. + * 4. The first InputDevices that use 'keyboard' or 'kbd' and a valid mouse + * driver (mouse, synaptics, evdev, vmmouse, void) * 5. Default devices with an empty (default) configuration. These defaults * will reference the 'mouse' and 'keyboard' drivers. */ @@ -1110,6 +1110,8 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout) int count = 0; MessageType from = X_DEFAULT; int found = 0; + const char *mousedrivers[] = { "mouse", "synaptics", "evdev", "vmmouse", + "void", NULL }; /* * First check if a core pointer or core keyboard have been specified @@ -1219,13 +1221,15 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout) } } - /* 4. First pointer with 'mouse' as the driver. */ + /* 4. First pointer with an allowed mouse driver. */ if (!foundPointer && !xf86Info.allowEmptyInput) { + const char **driver = mousedrivers; confInput = xf86findInput(CONF_IMPLICIT_POINTER, xf86configptr->conf_input_lst); - if (!confInput) { - confInput = xf86findInputByDriver("mouse", + while (driver && !confInput) { + confInput = xf86findInputByDriver(*driver, xf86configptr->conf_input_lst); + driver++; } if (confInput) { foundPointer = TRUE; @@ -1280,10 +1284,13 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout) * section ... deal. */ for (devs = servlayoutp->inputs; devs && *devs; devs++) { - if (!strcmp((*devs)->driver, "void") || !strcmp((*devs)->driver, "mouse") || - !strcmp((*devs)->driver, "vmmouse") || !strcmp((*devs)->driver, "evdev") || - !strcmp((*devs)->driver, "synaptics")) { - found = 1; break; + const char **driver = mousedrivers; + while(*driver) { + if (!strcmp((*devs)->driver, *driver)) { + found = 1; + break; + } + driver++; } } if (!found && !xf86Info.allowEmptyInput) { From 7db55a0806c82bd4143c8bf1b8eb2b62e456ad9a Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 20 May 2009 14:38:25 +1000 Subject: [PATCH 71/89] dix: remove superfluous loop in change_modmap. A device can only be attached to a single master device. So instead of looping and searching for the master device, we can just use dev->u.master directly. Signed-off-by: Peter Hutterer --- dix/inpututils.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/dix/inpututils.c b/dix/inpututils.c index c6300880b..152214506 100644 --- a/dix/inpututils.c +++ b/dix/inpututils.c @@ -275,14 +275,10 @@ change_modmap(ClientPtr client, DeviceIntPtr dev, KeyCode *modkeymap, do_modmap_change(client, tmp, modmap); } } - else { - for (tmp = inputInfo.devices; tmp; tmp = tmp->next) { - if (tmp->isMaster && tmp->u.lastSlave == dev) { - /* If this fails, expect the results to be weird. */ - if (check_modmap_change(client, tmp, modmap)) - do_modmap_change(client, tmp, modmap); - } - } + else if (dev->u.master && dev->u.master->u.lastSlave == dev) { + /* If this fails, expect the results to be weird. */ + if (check_modmap_change(client, dev->u.master, modmap)) + do_modmap_change(client, dev->u.master, modmap); } return Success; From 525aa17f804d37d1cfcbbf6b8e6cddb45e999b20 Mon Sep 17 00:00:00 2001 From: Tomas Janousek Date: Wed, 20 May 2009 15:03:01 +0200 Subject: [PATCH 72/89] Bug #6428, #16458, #21464: Fix crash due to uninitialized VModMap fields. In ProcXkbGetKbdByName, mrep.firstVModMapKey, .nVModMapKeys and .totalVModMapKeys were not initialized, contained random values and caused accesses to unallocated and later modified memory, causing XkbSizeVirtualModMap and XkbWriteVirtualModMap to see different number of nonzero values, resulting in writes past the end of an array in XkbSendMap. This patch initializes those values sensibly and reverts commits 5c0a2088 and 6dd4fc46, which have been plain non-sense. Signed-off-by: Tomas Janousek Signed-off-by: Peter Hutterer --- xkb/xkb.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/xkb/xkb.c b/xkb/xkb.c index 445c55ffd..ec46238b8 100644 --- a/xkb/xkb.c +++ b/xkb/xkb.c @@ -1308,7 +1308,7 @@ XkbSizeVirtualModMap(XkbDescPtr xkb,xkbGetMapReply *rep) rep->totalVModMapKeys= 0; return 0; } - for (nRtrn=i=0;inVModMapKeys-1;i++) { + for (nRtrn=i=0;inVModMapKeys;i++) { if (xkb->server->vmodmap[i+rep->firstVModMapKey]!=0) nRtrn++; } @@ -1327,7 +1327,7 @@ unsigned short * pMap; wire= (xkbVModMapWireDesc *)buf; pMap= &xkb->server->vmodmap[rep->firstVModMapKey]; - for (i=0;inVModMapKeys-1;i++,pMap++) { + for (i=0;inVModMapKeys;i++,pMap++) { if (*pMap!=0) { wire->key= i+rep->firstVModMapKey; wire->vmods= *pMap; @@ -5670,7 +5670,7 @@ ProcXkbGetKbdByName(ClientPtr client) mrep.present = 0; mrep.totalSyms = mrep.totalActs = mrep.totalKeyBehaviors= mrep.totalKeyExplicit= - mrep.totalModMapKeys= 0; + mrep.totalModMapKeys= mrep.totalVModMapKeys= 0; if (rep.reported&(XkbGBN_TypesMask|XkbGBN_ClientSymbolsMask)) { mrep.present|= XkbKeyTypesMask; mrep.firstType = 0; @@ -5696,6 +5696,8 @@ ProcXkbGetKbdByName(ClientPtr client) mrep.firstKeyExplicit = new->min_key_code; mrep.nKeyActs = mrep.nKeyBehaviors = mrep.nKeyExplicit = XkbNumKeys(new); + mrep.firstVModMapKey= new->min_key_code; + mrep.nVModMapKeys= XkbNumKeys(new); } else { mrep.virtualMods= 0; From 99e22b86c5f1a3653f3caaf01368a777d2b208d0 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Fri, 22 May 2009 12:01:55 -0400 Subject: [PATCH 73/89] EDID: Add modes from Established Timings III descriptor to mode pool EDID 1.4, section 3.10.3.9 --- hw/xfree86/ddc/edid.h | 2 +- hw/xfree86/ddc/interpret_edid.c | 1 + hw/xfree86/modes/xf86EdidModes.c | 87 ++++++++++++++++++++++++++++++-- 3 files changed, 86 insertions(+), 4 deletions(-) diff --git a/hw/xfree86/ddc/edid.h b/hw/xfree86/ddc/edid.h index b55600329..42ee9d15e 100644 --- a/hw/xfree86/ddc/edid.h +++ b/hw/xfree86/ddc/edid.h @@ -533,7 +533,7 @@ struct detailed_monitor_section { struct whitePoints wp[2]; /* 32 */ /* color management data */ struct cvt_timings cvt[4]; /* 64 */ - /* established timings III */ + Uchar est_iii[6]; /* 6 */ } section; /* max: 80 */ }; diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c index bdcc92e64..12a52545e 100644 --- a/hw/xfree86/ddc/interpret_edid.c +++ b/hw/xfree86/ddc/interpret_edid.c @@ -330,6 +330,7 @@ get_dt_md_section(Uchar *c, struct edid_version *ver, break; case ADD_EST_TIMINGS: det_mon[i].type = DS_EST_III; + memcpy(det_mon[i].section.est_iii, c + 6, 6); break; case ADD_DUMMY: det_mon[i].type = DS_DUMMY; diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c index 4340edd1f..50b669c3e 100644 --- a/hw/xfree86/modes/xf86EdidModes.c +++ b/hw/xfree86/modes/xf86EdidModes.c @@ -641,6 +641,85 @@ DDCModesFromCVT(int scrnIndex, struct cvt_timings *t) } #endif +static const struct { + short w; + short h; + short r; + short rb; +} EstIIIModes[] = { + /* byte 6 */ + { 640, 350, 85, 0 }, + { 640, 400, 85, 0 }, + { 720, 400, 85, 0 }, + { 640, 480, 85, 0 }, + { 848, 480, 60, 0 }, + { 800, 600, 85, 0 }, + { 1024, 768, 85, 0 }, + { 1152, 864, 75, 0 }, + /* byte 7 */ + { 1280, 768, 60, 1 }, + { 1280, 768, 60, 0 }, + { 1280, 768, 75, 0 }, + { 1280, 768, 85, 0 }, + { 1280, 960, 60, 0 }, + { 1280, 960, 85, 0 }, + { 1280, 1024, 60, 0 }, + { 1280, 1024, 85, 0 }, + /* byte 8 */ + { 1360, 768, 60, 0 }, + { 1440, 900, 60, 1 }, + { 1440, 900, 60, 0 }, + { 1440, 900, 75, 0 }, + { 1440, 900, 85, 0 }, + { 1400, 1050, 60, 1 }, + { 1400, 1050, 60, 0 }, + { 1400, 1050, 75, 0 }, + /* byte 9 */ + { 1400, 1050, 85, 0 }, + { 1680, 1050, 60, 1 }, + { 1680, 1050, 60, 0 }, + { 1680, 1050, 75, 0 }, + { 1680, 1050, 85, 0 }, + { 1600, 1200, 60, 0 }, + { 1600, 1200, 65, 0 }, + { 1600, 1200, 70, 0 }, + /* byte 10 */ + { 1600, 1200, 75, 0 }, + { 1600, 1200, 85, 0 }, + { 1792, 1344, 60, 0 }, + { 1792, 1344, 85, 0 }, + { 1856, 1392, 60, 0 }, + { 1856, 1392, 75, 0 }, + { 1920, 1200, 60, 1 }, + { 1920, 1200, 60, 0 }, + /* byte 11 */ + { 1920, 1200, 75, 0 }, + { 1920, 1200, 85, 0 }, + { 1920, 1440, 60, 0 }, + { 1920, 1440, 75, 0 }, +}; + +static DisplayModePtr +DDCModesFromEstIII(unsigned char *est) +{ + DisplayModePtr modes = NULL; + int i, j, m; + + for (i = 0; i < 6; i++) { + for (j = 7; j > 0; j--) { + if (est[i] & (1 << j)) { + m = (i * 8) + (7 - j); + modes = xf86ModesAdd(modes, + FindDMTMode(EstIIIModes[m].w, + EstIIIModes[m].h, + EstIIIModes[m].r, + EstIIIModes[m].rb)); + } + } + } + + return modes; +} /* * This is only valid when the sink claims to be continuous-frequency @@ -811,6 +890,7 @@ xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC) for (i = 0; i < DET_TIMINGS; i++) { struct detailed_monitor_section *det_mon = &DDC->det_mon[i]; + Mode = NULL; switch (det_mon->type) { case DT: Mode = DDCModeFromDetailedTiming(scrnIndex, @@ -818,22 +898,23 @@ xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC) preferred, quirks); preferred = FALSE; - Modes = xf86ModesAdd(Modes, Mode); break; case DS_STD_TIMINGS: Mode = DDCModesFromStandardTiming(det_mon->section.std_t, quirks, timing_level, rb); - Modes = xf86ModesAdd(Modes, Mode); break; #if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(7,0,0,0,0) case DS_CVT: Mode = DDCModesFromCVT(scrnIndex, det_mon->section.cvt); - Modes = xf86ModesAdd(Modes, Mode); break; #endif + case DS_EST_III: + Mode = DDCModesFromEstIII(det_mon->section.est_iii); + break; default: break; } + Modes = xf86ModesAdd(Modes, Mode); } /* Add established timings */ From c70511931ca1441878daed50e710fa514f6ab077 Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Sun, 24 May 2009 10:32:38 +0200 Subject: [PATCH 74/89] fix typo in cabff9007 which led to an unintialized memory read and a crash. --- hw/xfree86/common/xf86Config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c index 165958b07..24049aaa0 100644 --- a/hw/xfree86/common/xf86Config.c +++ b/hw/xfree86/common/xf86Config.c @@ -1226,7 +1226,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout) const char **driver = mousedrivers; confInput = xf86findInput(CONF_IMPLICIT_POINTER, xf86configptr->conf_input_lst); - while (driver && !confInput) { + while (*driver && !confInput) { confInput = xf86findInputByDriver(*driver, xf86configptr->conf_input_lst); driver++; From 12e725d08b4cf7dbb7f09b9ec09fa1b621156ea9 Mon Sep 17 00:00:00 2001 From: Julien Cristau Date: Fri, 22 May 2009 09:54:38 +0200 Subject: [PATCH 75/89] randr: fix server crash in RRGetScreenInfo We don't return rates to randr < 1.1 clients, so don't allocate space for them. This fixes a FatalError due to not all allocated space being used. X.Org bug#21861 Reported-by: Guillaume Quintin Signed-off-by: Julien Cristau --- randr/rrscreen.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/randr/rrscreen.c b/randr/rrscreen.c index 94bf3ce99..46890bf74 100644 --- a/randr/rrscreen.c +++ b/randr/rrscreen.c @@ -664,8 +664,9 @@ ProcRRGetScreenInfo (ClientPtr client) rep.sizeID = pData->size; rep.rate = pData->refresh; - extraLen = (rep.nSizes * sizeof (xScreenSizes) + - rep.nrateEnts * sizeof (CARD16)); + extraLen = rep.nSizes * sizeof (xScreenSizes); + if (has_rate) + extraLen += rep.nrateEnts * sizeof (CARD16); if (extraLen) { From 6583477035234e23ead2fad9db7a07e5862447a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolai=20H=C3=A4hnle?= Date: Sat, 23 May 2009 13:35:24 +0200 Subject: [PATCH 76/89] Remove reference to non-existing requestLog and requestLogIndex These fields were removed in 252ec504817e05b185e4896a2d899e9c00b8aeef. Signed-off-by: Nicolai Haehnle Signed-off-by: Peter Hutterer --- dix/dispatch.c | 6 ------ include/dixstruct.h | 4 ---- 2 files changed, 10 deletions(-) diff --git a/dix/dispatch.c b/dix/dispatch.c index ce3294d32..dbb97e05f 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -413,12 +413,6 @@ Dispatch(void) } client->sequence++; -#ifdef DEBUG - if (client->requestLogIndex == MAX_REQUEST_LOG) - client->requestLogIndex = 0; - client->requestLog[client->requestLogIndex] = MAJOROP; - client->requestLogIndex++; -#endif #ifdef XSERVER_DTRACE XSERVER_REQUEST_START(LookupMajorName(MAJOROP), MAJOROP, ((xReq *)client->requestBuffer)->length, diff --git a/include/dixstruct.h b/include/dixstruct.h index 7335fad95..696b793ff 100644 --- a/include/dixstruct.h +++ b/include/dixstruct.h @@ -37,10 +37,6 @@ SOFTWARE. * translation from client ids to server addresses. */ -#ifdef DEBUG -#define MAX_REQUEST_LOG 100 -#endif - extern _X_EXPORT CallbackListPtr ClientStateCallback; typedef struct { From d053c3b35f730fdaddd22f841dbd8ed6c9a07ba0 Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Sun, 2 Nov 2008 20:46:40 +0000 Subject: [PATCH 77/89] Xming: Slightly adjust the formatting of the logged command line Copyright (C) Colin Harrison 2005-2008 http://www.straightrunning.com/XmingNotes/ http://sourceforge.net/projects/xming/ Signed-off-by: Jon TURNEY --- hw/xwin/winprocarg.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/xwin/winprocarg.c b/hw/xwin/winprocarg.c index 38ee9a2df..f20598db9 100755 --- a/hw/xwin/winprocarg.c +++ b/hw/xwin/winprocarg.c @@ -1448,13 +1448,13 @@ winLogCommandLine (int argc, char *argv[]) for (i = 0, iCurrLen = 0; i < argc; ++i) if (argv[i]) { - /* Add a character for lines that overflow */ + /* Adds two characters for lines that overflow */ if ((strlen (argv[i]) < CHARS_PER_LINE && iCurrLen + strlen (argv[i]) > CHARS_PER_LINE) || strlen (argv[i]) > CHARS_PER_LINE) { iCurrLen = 0; - ++iSize; + iSize += 2; } /* Add space for item and trailing space */ @@ -1484,7 +1484,7 @@ winLogCommandLine (int argc, char *argv[]) iCurrLen = 0; /* Add line break if it fits */ - strncat (g_pszCommandLine, "\n", iSize - strlen (g_pszCommandLine)); + strncat (g_pszCommandLine, "\n ", iSize - strlen (g_pszCommandLine)); } strncat (g_pszCommandLine, argv[i], iSize - strlen (g_pszCommandLine)); From a72865868f03b675f86990476fcee601822894b3 Mon Sep 17 00:00:00 2001 From: Joe Krahn Date: Tue, 20 Jan 2009 17:09:43 +0000 Subject: [PATCH 78/89] Cygwin/X: Consolidate dialog initialization in winInitDialog() Changed windialogs.c to set icons via window properties rather than class properties, and use LoadImage() for small icons, because LoadIcon() can only open large icons. Since this code is redundant across the dialogs, I put it in the winCenterDialog function, along with a few other redundant instructions, and renamed in winInitDialog(). Also, don't bogusly put our dialogs at the center of the virtual desktop if we are on a multimonitor system (this causes the dialog to end up split across two monitors in a dual-monitor side-by-side setup) Corrections to use HWND_TOPMOST instead of HWND_TOP and not to use SWP_NOZORDER from Colin Harrison fd.o bugzilla #4491 Signed-off-by: Jon TURNEY --- hw/xwin/windialogs.c | 116 +++++++++++++++++++------------------------ 1 file changed, 50 insertions(+), 66 deletions(-) diff --git a/hw/xwin/windialogs.c b/hw/xwin/windialogs.c index ab06b0d00..274c04618 100755 --- a/hw/xwin/windialogs.c +++ b/hw/xwin/windialogs.c @@ -181,32 +181,64 @@ winUnoverrideURLButton (HWND hwnd, int id) /* * Center a dialog window in the desktop window + * and set small and large icons to X icons. */ static void -winCenterDialog (HWND hwndDlg) +winInitDialog (HWND hwndDlg) { HWND hwndDesk; - RECT rc, rcDlg, rcDesk; + RECT rc, rcDlg, rcDesk; + HICON hIcon, hIconSmall; hwndDesk = GetParent (hwndDlg); if (!hwndDesk || IsIconic (hwndDesk)) hwndDesk = GetDesktopWindow (); - GetWindowRect (hwndDesk, &rcDesk); - GetWindowRect (hwndDlg, &rcDlg); - CopyRect (&rc, &rcDesk); - - OffsetRect (&rcDlg, -rcDlg.left, -rcDlg.top); - OffsetRect (&rc, -rc.left, -rc.top); - OffsetRect (&rc, -rcDlg.right, -rcDlg.bottom); - - SetWindowPos (hwndDlg, - HWND_TOP, - rcDesk.left + (rc.right / 2), - rcDesk.top + (rc.bottom / 2), + /* Remove minimize and maximize buttons */ + SetWindowLong (hwndDlg, GWL_STYLE, + GetWindowLong (hwndDlg, GWL_STYLE) + & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX)); + + /* Set Window not to show in the task bar */ + SetWindowLong (hwndDlg, GWL_EXSTYLE, + GetWindowLong (hwndDlg, GWL_EXSTYLE) & ~WS_EX_APPWINDOW ); + + /* Center dialog window in the screen. Not done for multi-monitor systems, where + * it is likely to end up split across the screens. In that case, it appears + * near the Tray icon. + */ + if (GetSystemMetrics(SM_CMONITORS)>1) { + /* Still need to refresh the frame change. */ + SetWindowPos (hwndDlg, HWND_TOPMOST, 0,0,0,0, + SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED); + } else { + GetWindowRect (hwndDesk, &rcDesk); + GetWindowRect (hwndDlg, &rcDlg); + CopyRect (&rc, &rcDesk); + + OffsetRect (&rcDlg, -rcDlg.left, -rcDlg.top); + OffsetRect (&rc, -rc.left, -rc.top); + OffsetRect (&rc, -rcDlg.right, -rcDlg.bottom); + + SetWindowPos (hwndDlg, + HWND_TOPMOST, + rcDesk.left + (rc.right / 2), + rcDesk.top + (rc.bottom / 2), 0, 0, - SWP_NOSIZE | SWP_NOZORDER); + SWP_NOSIZE | SWP_FRAMECHANGED); + } + + /* Set icon to standard app icon */ + hIcon = LoadIcon (g_hInstance, MAKEINTRESOURCE(IDI_XWIN)); + hIconSmall = LoadImage (g_hInstance, + MAKEINTRESOURCE(IDI_XWIN), IMAGE_ICON, + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), + LR_SHARED); + + PostMessage (hwndDlg, WM_SETICON, ICON_BIG, (LPARAM) hIcon); + PostMessage (hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM) hIconSmall); } @@ -271,15 +303,6 @@ winDisplayExitDialog (winPrivScreenPtr pScreenPriv) winExitDlgProc, (int) pScreenPriv); - /* Drop minimize and maximize buttons */ - SetWindowLong (g_hDlgExit, GWL_STYLE, - GetWindowLong (g_hDlgExit, GWL_STYLE) - & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX)); - SetWindowLong (g_hDlgExit, GWL_EXSTYLE, - GetWindowLong (g_hDlgExit, GWL_EXSTYLE) & ~WS_EX_APPWINDOW ); - SetWindowPos (g_hDlgExit, HWND_TOPMOST, 0, 0, 0, 0, - SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE); - /* Show the dialog box */ ShowWindow (g_hDlgExit, SW_SHOW); @@ -314,14 +337,7 @@ winExitDlgProc (HWND hDialog, UINT message, /* Store pointers to private structures for future use */ s_pScreenPriv = (winPrivScreenPtr) lParam; - winCenterDialog (hDialog); - - /* Set icon to standard app icon */ - PostMessage (hDialog, - WM_SETICON, - ICON_SMALL, - (LPARAM) LoadIcon (g_hInstance, - MAKEINTRESOURCE(IDI_XWIN))); + winInitDialog (hDialog); /* Format the connected clients string */ pszConnectedClients = Xprintf (CONNECTED_CLIENTS_FORMAT, @@ -413,17 +429,6 @@ winDisplayDepthChangeDialog (winPrivScreenPtr pScreenPriv) pScreenPriv->hwndScreen, winChangeDepthDlgProc, (int) pScreenPriv); - - /* Drop minimize and maximize buttons */ - SetWindowLong (g_hDlgDepthChange, GWL_STYLE, - GetWindowLong (g_hDlgDepthChange, GWL_STYLE) - & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX)); - SetWindowLong (g_hDlgDepthChange, GWL_EXSTYLE, - GetWindowLong (g_hDlgDepthChange, GWL_EXSTYLE) - & ~WS_EX_APPWINDOW ); - SetWindowPos (g_hDlgDepthChange, 0, 0, 0, 0, 0, - SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOZORDER | SWP_NOSIZE); - /* Show the dialog box */ ShowWindow (g_hDlgDepthChange, SW_SHOW); @@ -480,13 +485,7 @@ winChangeDepthDlgProc (HWND hwndDialog, UINT message, s_pScreenPriv->dwLastWindowsBitsPixel); #endif - winCenterDialog( hwndDialog ); - - /* Set icon to standard app icon */ - PostMessage (hwndDialog, - WM_SETICON, - ICON_SMALL, - (LPARAM) LoadIcon (g_hInstance, MAKEINTRESOURCE(IDI_XWIN))); + winInitDialog( hwndDialog ); return TRUE; @@ -572,15 +571,6 @@ winDisplayAboutDialog (winPrivScreenPtr pScreenPriv) winAboutDlgProc, (int) pScreenPriv); - /* Drop minimize and maximize buttons */ - SetWindowLong (g_hDlgAbout, GWL_STYLE, - GetWindowLong (g_hDlgAbout, GWL_STYLE) - & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX)); - SetWindowLong (g_hDlgAbout, GWL_EXSTYLE, - GetWindowLong (g_hDlgAbout, GWL_EXSTYLE) & ~WS_EX_APPWINDOW); - SetWindowPos (g_hDlgAbout, 0, 0, 0, 0, 0, - SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE); - /* Show the dialog box */ ShowWindow (g_hDlgAbout, SW_SHOW); @@ -622,13 +612,7 @@ winAboutDlgProc (HWND hwndDialog, UINT message, s_pScreenInfo = s_pScreenPriv->pScreenInfo; s_pScreen = s_pScreenInfo->pScreen; - winCenterDialog (hwndDialog); - - /* Set icon to standard app icon */ - PostMessage (hwndDialog, - WM_SETICON, - ICON_SMALL, - (LPARAM) LoadIcon (g_hInstance, MAKEINTRESOURCE(IDI_XWIN))); + winInitDialog (hwndDialog); /* Override the URL buttons */ winOverrideURLButton (hwndDialog, ID_ABOUT_CHANGELOG); From 888e6961a4ee76d05d212cfb946f089caafb3f69 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Wed, 7 Jan 2009 18:29:16 +0000 Subject: [PATCH 79/89] Cygwin/X: Correctly allow for the native window frame width in ValidateSizing() Fix internal WM to correctly calculate the native window border when validating window sizing Signed-off-by: Jon TURNEY --- hw/xwin/winmultiwindowwndproc.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/hw/xwin/winmultiwindowwndproc.c b/hw/xwin/winmultiwindowwndproc.c index b5e789c2c..0dd88851f 100644 --- a/hw/xwin/winmultiwindowwndproc.c +++ b/hw/xwin/winmultiwindowwndproc.c @@ -207,6 +207,8 @@ ValidateSizing (HWND hwnd, WindowPtr pWin, WinXSizeHints sizeHints; RECT *rect; int iWidth, iHeight; + RECT rcClient, rcWindow; + int iBorderWidthX, iBorderWidthY; /* Invalid input checking */ if (pWin==NULL || lParam==0) @@ -228,19 +230,20 @@ ValidateSizing (HWND hwnd, WindowPtr pWin, iWidth = rect->right - rect->left; iHeight = rect->bottom - rect->top; - /* Now remove size of any borders */ - iWidth -= 2 * GetSystemMetrics(SM_CXSIZEFRAME); - iHeight -= (GetSystemMetrics(SM_CYCAPTION) - + 2 * GetSystemMetrics(SM_CYSIZEFRAME)); - + /* Now remove size of any borders and title bar */ + GetClientRect(hwnd, &rcClient); + GetWindowRect(hwnd, &rcWindow); + iBorderWidthX = (rcWindow.right - rcWindow.left) - (rcClient.right - rcClient.left); + iBorderWidthY = (rcWindow.bottom - rcWindow.top) - (rcClient.bottom - rcClient.top); + iWidth -= iBorderWidthX; + iHeight -= iBorderWidthY; /* Constrain the size to legal values */ ConstrainSize (sizeHints, &iWidth, &iHeight); - /* Add back the borders */ - iWidth += 2 * GetSystemMetrics(SM_CXSIZEFRAME); - iHeight += (GetSystemMetrics(SM_CYCAPTION) - + 2 * GetSystemMetrics(SM_CYSIZEFRAME)); + /* Add back the size of borders and title bar */ + iWidth += iBorderWidthX; + iHeight += iBorderWidthY; /* Adjust size according to where we're dragging from */ switch(wParam) { From 4ec110327bdc4f2617cd6116539812d7ef96b24e Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Sun, 4 Jan 2009 18:29:49 +0000 Subject: [PATCH 80/89] Xming: Prevent the mouse wheel from stalling when another window is minimized. Fix internal WM to prevent the mouse wheel from stalling when another window is minimized. Signed-off-by: Jon TURNEY --- hw/xwin/winmultiwindowwndproc.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hw/xwin/winmultiwindowwndproc.c b/hw/xwin/winmultiwindowwndproc.c index 0dd88851f..becae2949 100644 --- a/hw/xwin/winmultiwindowwndproc.c +++ b/hw/xwin/winmultiwindowwndproc.c @@ -786,6 +786,10 @@ winTopLevelWindowProc (HWND hwnd, UINT message, if (!pWin || !pWin->overrideRedirect) /* for OOo menus */ winSendMessageToWM (s_pScreenPriv->pWMInfo, &wmMsg); } + /* Prevent the mouse wheel from stalling when another window is minimized */ + if (HIWORD(wParam) == 0 && LOWORD(wParam) == WA_ACTIVE && + (HWND)lParam != NULL && (HWND)lParam != (HWND)GetParent(hwnd)) + SetFocus(hwnd); return 0; case WM_ACTIVATEAPP: From 71ba9856a4f01aa7a42f1178c8da98a2e5ac23ae Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Tue, 3 Feb 2009 15:52:11 +0000 Subject: [PATCH 81/89] Xming: Cache atom lookups in clipboard integration code Cache the CLIPBOARD atom lookups in winClipboardWindowProc() Cache atom lookups in winClipboardFlushXEvents() Recache on server regeneration Copyright (C) Colin Harrison 2005-2008 http://www.straightrunning.com/XmingNotes/ http://sourceforge.net/projects/xming/ Signed-off-by: Jon TURNEY --- hw/xwin/winclipboardwndproc.c | 26 +++++++++++++------------- hw/xwin/winclipboardxevents.c | 27 +++++++++++++++------------ 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/hw/xwin/winclipboardwndproc.c b/hw/xwin/winclipboardwndproc.c index 04c0c586a..65faedf65 100644 --- a/hw/xwin/winclipboardwndproc.c +++ b/hw/xwin/winclipboardwndproc.c @@ -36,6 +36,7 @@ #include #include #include "winclipboard.h" +#include "misc.h" extern void winFixClipboardChain(); @@ -261,6 +262,8 @@ winClipboardWindowProc (HWND hwnd, UINT message, case WM_DRAWCLIPBOARD: { + static Atom atomClipboard; + static int generation; static Bool s_fProcessingDrawClipboard = FALSE; Display *pDisplay = g_pClipboardDisplay; Window iWindow = g_iClipboardWindow; @@ -268,6 +271,12 @@ winClipboardWindowProc (HWND hwnd, UINT message, winDebug ("winClipboardWindowProc - WM_DRAWCLIPBOARD: Enter\n"); + if (generation != serverGeneration) + { + generation = serverGeneration; + atomClipboard = XInternAtom (pDisplay, "CLIPBOARD", False); + } + /* * We've occasionally seen a loop in the clipboard chain. * Try and fix it on the first hint of recursion. @@ -355,17 +364,13 @@ winClipboardWindowProc (HWND hwnd, UINT message, /* Release CLIPBOARD selection if owned */ iReturn = XGetSelectionOwner (pDisplay, - XInternAtom (pDisplay, - "CLIPBOARD", - False)); + atomClipboard); if (iReturn == g_iClipboardWindow) { winDebug ("winClipboardWindowProc - WM_DRAWCLIPBOARD - " "CLIPBOARD selection is owned by us.\n"); XSetSelectionOwner (pDisplay, - XInternAtom (pDisplay, - "CLIPBOARD", - False), + atomClipboard, None, CurrentTime); } @@ -399,17 +404,12 @@ winClipboardWindowProc (HWND hwnd, UINT message, /* Reassert ownership of the CLIPBOARD */ iReturn = XSetSelectionOwner (pDisplay, - XInternAtom (pDisplay, - "CLIPBOARD", - False), + atomClipboard, iWindow, CurrentTime); if (iReturn == BadAtom || iReturn == BadWindow || - XGetSelectionOwner (pDisplay, - XInternAtom (pDisplay, - "CLIPBOARD", - False)) != iWindow) + XGetSelectionOwner (pDisplay, atomClipboard) != iWindow) { winErrorFVerb (1, "winClipboardWindowProc - WM_DRAWCLIPBOARD - " "Could not reassert ownership of CLIPBOARD\n"); diff --git a/hw/xwin/winclipboardxevents.c b/hw/xwin/winclipboardxevents.c index 95e86b1dc..ab8d5e42f 100644 --- a/hw/xwin/winclipboardxevents.c +++ b/hw/xwin/winclipboardxevents.c @@ -34,6 +34,7 @@ #include #endif #include "winclipboard.h" +#include "misc.h" /* @@ -53,18 +54,20 @@ winClipboardFlushXEvents (HWND hwnd, Display *pDisplay, Bool fUseUnicode) { - Atom atomLocalProperty = XInternAtom (pDisplay, - WIN_LOCAL_PROPERTY, - False); - Atom atomUTF8String = XInternAtom (pDisplay, - "UTF8_STRING", - False); - Atom atomCompoundText = XInternAtom (pDisplay, - "COMPOUND_TEXT", - False); - Atom atomTargets = XInternAtom (pDisplay, - "TARGETS", - False); + static Atom atomLocalProperty; + static Atom atomCompoundText; + static Atom atomUTF8String; + static Atom atomTargets; + static int generation; + + if (generation != serverGeneration) + { + generation = serverGeneration; + atomLocalProperty = XInternAtom (pDisplay, WIN_LOCAL_PROPERTY, False); + atomUTF8String = XInternAtom (pDisplay, "UTF8_STRING", False); + atomCompoundText = XInternAtom (pDisplay, "COMPOUND_TEXT", False); + atomTargets = XInternAtom (pDisplay, "TARGETS", False); + } /* Process all pending events */ while (XPending (pDisplay)) From fbe9ed27b1c2f932a74aa6ced134ecec021a3fc1 Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Thu, 29 Jan 2009 10:55:38 +0000 Subject: [PATCH 82/89] Xming: Avoid log spam if a windows application won't provide CF_UNICODETEXT clipboard format Signed-off-by: Jon TURNEY --- hw/xwin/winclipboardxevents.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/hw/xwin/winclipboardxevents.c b/hw/xwin/winclipboardxevents.c index ab8d5e42f..0a64ba6db 100644 --- a/hw/xwin/winclipboardxevents.c +++ b/hw/xwin/winclipboardxevents.c @@ -191,8 +191,13 @@ winClipboardFlushXEvents (HWND hwnd, if (fUseUnicode && !IsClipboardFormatAvailable (CF_UNICODETEXT)) { - ErrorF ("winClipboardFlushXEvents - CF_UNICODETEXT is not " - "available from Win32 clipboard. Aborting.\n"); + static int count; /* Hack to stop acroread spamming the log */ + static HWND lasthwnd; /* I've not seen any other client get here repeatedly? */ + if (hwnd != lasthwnd) count = 0; + count++; + if (count < 6) ErrorF ("winClipboardFlushXEvents - CF_UNICODETEXT is not " + "available from Win32 clipboard. Aborting %d.\n", count); + lasthwnd = hwnd; /* Abort */ fAbort = TRUE; From d190a27a33ab8c198568baf184fad14df57e24ad Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Thu, 29 Jan 2009 11:00:49 +0000 Subject: [PATCH 83/89] Xming: Various tidy ups in winClipboardFlushXEvents() Signed-off-by: Jon TURNEY --- hw/xwin/winclipboardxevents.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/hw/xwin/winclipboardxevents.c b/hw/xwin/winclipboardxevents.c index 0a64ba6db..ec40814db 100644 --- a/hw/xwin/winclipboardxevents.c +++ b/hw/xwin/winclipboardxevents.c @@ -311,6 +311,7 @@ winClipboardFlushXEvents (HWND hwnd, /* Initialize the text property */ xtpText.value = NULL; + xtpText.nitems = 0; /* Create the text property from the text list */ if (fUseUnicode) @@ -371,10 +372,13 @@ winClipboardFlushXEvents (HWND hwnd, /* Release the clipboard data */ GlobalUnlock (hGlobal); pszGlobalData = NULL; + fCloseClipboard = FALSE; + CloseClipboard (); /* Clean up */ XFree (xtpText.value); xtpText.value = NULL; + xtpText.nitems = 0; /* Setup selection notify event */ eventSelection.type = SelectionNotify; @@ -405,7 +409,11 @@ winClipboardFlushXEvents (HWND hwnd, winClipboardFlushXEvents_SelectionRequest_Done: /* Free allocated resources */ if (xtpText.value) + { XFree (xtpText.value); + xtpText.value = NULL; + xtpText.nitems = 0; + } if (pszConvertData) free (pszConvertData); if (hGlobal && pszGlobalData) @@ -446,7 +454,10 @@ winClipboardFlushXEvents (HWND hwnd, /* Close clipboard if it was opened */ if (fCloseClipboard) + { + fCloseClipboard = FALSE; CloseClipboard (); + } break; @@ -628,6 +639,7 @@ winClipboardFlushXEvents (HWND hwnd, /* Conversion succeeded or some unconvertible characters */ if (ppszTextList != NULL) { + iReturnDataLen = 0; for (i = 0; i < iCount; i++) { iReturnDataLen += strlen(ppszTextList[i]); @@ -673,6 +685,7 @@ winClipboardFlushXEvents (HWND hwnd, ppszTextList = NULL; XFree (xtpText.value); xtpText.value = NULL; + xtpText.nitems = 0; /* Convert the X clipboard string to DOS format */ winClipboardUNIXtoDOS (&pszReturnData, strlen (pszReturnData)); @@ -786,7 +799,11 @@ winClipboardFlushXEvents (HWND hwnd, if (ppszTextList) XFreeStringList (ppszTextList); if (xtpText.value) + { XFree (xtpText.value); + xtpText.value = NULL; + xtpText.nitems = 0; + } if (pszConvertData) free (pszConvertData); if (pwszUnicodeStr) From 966c8fccf16e77c8f459b4b175718323f2ec5d58 Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Mon, 5 Jan 2009 18:04:42 +0000 Subject: [PATCH 84/89] Xming: Fix some log spam Signed-off-by: Jon TURNEY --- hw/xwin/winmultiwindowwm.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/xwin/winmultiwindowwm.c b/hw/xwin/winmultiwindowwm.c index ea9dfca36..194dbf64c 100644 --- a/hw/xwin/winmultiwindowwm.c +++ b/hw/xwin/winmultiwindowwm.c @@ -1359,7 +1359,9 @@ winMultiWindowXMsgProcErrorHandler (Display *pDisplay, XErrorEvent *pErr) pErr->error_code, pszErrorMsg, sizeof (pszErrorMsg)); +#if CYGMULTIWINDOW_DEBUG ErrorF ("winMultiWindowXMsgProcErrorHandler - ERROR: %s\n", pszErrorMsg); +#endif return 0; } From 9955252564922e7e8702dfb6eab52c75605a4a22 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Mon, 5 Jan 2009 17:55:58 +0000 Subject: [PATCH 85/89] Cygwin/X: Remove unused TimeSinceLastInputEvent() Signed-off-by: Jon TURNEY --- hw/xwin/InitInput.c | 10 ---------- hw/xwin/win.h | 1 - hw/xwin/winmouse.c | 1 - 3 files changed, 12 deletions(-) diff --git a/hw/xwin/InitInput.c b/hw/xwin/InitInput.c index 76c1715cf..2eaa024a8 100644 --- a/hw/xwin/InitInput.c +++ b/hw/xwin/InitInput.c @@ -48,7 +48,6 @@ DISPATCH_PROC(winProcSetSelectionOwner); * Local global declarations */ -CARD32 g_c32LastInputEventTime = 0; DeviceIntPtr g_pwinPointer; DeviceIntPtr g_pwinKeyboard; @@ -110,15 +109,6 @@ void DDXRingBell(int volume, int pitch, int duration) } -int -TimeSinceLastInputEvent () -{ - if (g_c32LastInputEventTime == 0) - g_c32LastInputEventTime = GetTickCount (); - return GetTickCount () - g_c32LastInputEventTime; -} - - /* See Porting Layer Definition - p. 17 */ void InitInput (int argc, char *argv[]) diff --git a/hw/xwin/win.h b/hw/xwin/win.h index 8005d5b33..9009df29b 100644 --- a/hw/xwin/win.h +++ b/hw/xwin/win.h @@ -636,7 +636,6 @@ extern DevPrivateKey g_iGCPrivateKey; extern DevPrivateKey g_iPixmapPrivateKey; extern DevPrivateKey g_iWindowPrivateKey; extern unsigned long g_ulServerGeneration; -extern CARD32 g_c32LastInputEventTime; extern DWORD g_dwEnginesSupported; extern HINSTANCE g_hInstance; extern int g_copyROP[]; diff --git a/hw/xwin/winmouse.c b/hw/xwin/winmouse.c index 188126b3a..9cfc945f8 100644 --- a/hw/xwin/winmouse.c +++ b/hw/xwin/winmouse.c @@ -354,7 +354,6 @@ winMouseButtonsHandle (ScreenPtr pScreen, void winEnqueueMotion(int x, int y) { miPointerSetPosition(g_pwinPointer, &x, &y); - g_c32LastInputEventTime = GetTickCount(); int i, nevents; int valuators[2]; From 996357e905c1082479bb238110b93bc170b8cb84 Mon Sep 17 00:00:00 2001 From: Joe Krahn Date: Tue, 20 Jan 2009 17:22:37 +0000 Subject: [PATCH 86/89] Cygwin/X: Update icons directly, rather than modifying the window's class Update icons directly to windows rather than modifying the window's class. Respect custom icons overriden via the configuration file. fd.o bugzilla #4491 Signed-off-by: Jon TURNEY --- hw/xwin/winmultiwindowicons.c | 58 ++++++++++++++------------------ hw/xwin/winprefs.c | 35 +++++++++---------- hw/xwin/winwin32rootlesswindow.c | 8 ++--- 3 files changed, 46 insertions(+), 55 deletions(-) diff --git a/hw/xwin/winmultiwindowicons.c b/hw/xwin/winmultiwindowicons.c index 88416bb70..8200aad88 100644 --- a/hw/xwin/winmultiwindowicons.c +++ b/hw/xwin/winmultiwindowicons.c @@ -364,43 +364,37 @@ void winUpdateIcon (Window id) { WindowPtr pWin; - HICON hIcon, hiconOld; + HICON hIcon, hIconSmall=NULL, hIconOld; pWin = (WindowPtr) LookupIDByType (id, RT_WINDOW); if (!pWin) return; - hIcon = winOverrideIcon ((unsigned long)pWin); - - if (!hIcon) - hIcon = winXIconToHICON (pWin, GetSystemMetrics(SM_CXICON)); - - if (hIcon) - { - winWindowPriv(pWin); - - if (pWinPriv->hWnd) - { - hiconOld = (HICON) SetClassLong (pWinPriv->hWnd, - GCL_HICON, - (int) hIcon); - - /* Delete the icon if its not the default */ - winDestroyIcon(hiconOld); - } + winWindowPriv(pWin); + if (pWinPriv->hWnd) { + hIcon = winOverrideIcon ((unsigned long)pWin); + if (!hIcon) { + hIcon = winXIconToHICON (pWin, GetSystemMetrics(SM_CXICON)); + if (!hIcon) { + hIcon = g_hIconX; + hIconSmall = g_hSmallIconX; + } else { + /* Leave undefined if not found */ + hIconSmall = winXIconToHICON (pWin, GetSystemMetrics(SM_CXSMICON)); + } } - - hIcon = winXIconToHICON (pWin, GetSystemMetrics(SM_CXSMICON)); - if (hIcon) - { - winWindowPriv(pWin); - if (pWinPriv->hWnd) - { - hiconOld = (HICON) SetClassLong (pWinPriv->hWnd, - GCL_HICONSM, - (int) hIcon); - winDestroyIcon (hiconOld); - } - } + /* Set the large icon */ + hIconOld = (HICON) SendMessage (pWinPriv->hWnd, + WM_SETICON, ICON_BIG, (LPARAM) hIcon); + + /* Delete the icon if its not the default */ + winDestroyIcon(hIconOld); + + /* Same for the small icon */ + hIconOld = (HICON) SendMessage (pWinPriv->hWnd, + WM_SETICON, ICON_SMALL, (LPARAM) hIconSmall); + winDestroyIcon(hIconOld); + + } } void winInitGlobalIcons (void) diff --git a/hw/xwin/winprefs.c b/hw/xwin/winprefs.c index 8152064cb..fe49ae224 100644 --- a/hw/xwin/winprefs.c +++ b/hw/xwin/winprefs.c @@ -189,35 +189,28 @@ ReloadEnumWindowsProc (HWND hwnd, LPARAM lParam) /* It's our baby, either clean or dirty it */ if (lParam==FALSE) { - hicon = (HICON)GetClassLong(hwnd, GCL_HICON); + /* Reset the window's icon to undefined. */ + hicon = (HICON)SendMessage(hwnd, WM_SETICON, ICON_BIG, 0); - /* Unselect any icon in the class structure */ - SetClassLong (hwnd, GCL_HICON, (LONG)LoadIcon (NULL, IDI_APPLICATION)); - - /* If it's generated on-the-fly, get rid of it, will regen */ + /* If the old icon is generated on-the-fly, get rid of it, will regen */ winDestroyIcon (hicon); - - hicon = (HICON)GetClassLong(hwnd, GCL_HICONSM); - /* Unselect any icon in the class structure */ - SetClassLong (hwnd, GCL_HICONSM, 0); - - /* If it's generated on-the-fly, get rid of it, will regen */ + /* Same for the small icon */ + hicon = (HICON)SendMessage(hwnd, WM_SETICON, ICON_SMALL, 0); winDestroyIcon (hicon); - - /* Remove any menu additions, use bRevert flag */ + + /* Remove any menu additions; bRevert=TRUE destroys any modified menus */ GetSystemMenu (hwnd, TRUE); - /* This window is now clean of our taint */ + /* This window is now clean of our taint (but with undefined icons) */ } else { - /* Make the icon default, dynamic, or from xwinrc */ - SetClassLong (hwnd, GCL_HICON, (LONG)g_hIconX); - SetClassLong (hwnd, GCL_HICONSM, (LONG)g_hSmallIconX); + /* winUpdateIcon() will set the icon default, dynamic, or from xwinrc */ wid = (Window)GetProp (hwnd, WIN_WID_PROP); if (wid) winUpdateIcon (wid); + /* Update the system menu for this window */ SetupSysMenu ((unsigned long)hwnd); @@ -241,8 +234,12 @@ ReloadPrefs (void) int i; #ifdef XWIN_MULTIWINDOW - /* First, iterate over all windows replacing their icon with system */ - /* default one and deleting any custom system menus */ + /* First, iterate over all windows, deleting their icons and custom menus. + * This is really only needed because winDestroyIcon() will try to + * destroy the old global icons, which will have changed. + * It is probably better to set a windows USER_DATA to flag locally defined + * icons, and use that to accurately know when to destroy old icons. + */ EnumThreadWindows (g_dwCurrentThreadID, ReloadEnumWindowsProc, FALSE); #endif diff --git a/hw/xwin/winwin32rootlesswindow.c b/hw/xwin/winwin32rootlesswindow.c index 3f521d600..2b2f63010 100755 --- a/hw/xwin/winwin32rootlesswindow.c +++ b/hw/xwin/winwin32rootlesswindow.c @@ -177,12 +177,12 @@ winMWExtWMUpdateIcon (Window id) if (pRLWinPriv->hWnd) { - hiconOld = (HICON) SetClassLong (pRLWinPriv->hWnd, - GCL_HICON, - (int) hIcon); - + + hiconOld = (HICON) SendMessage (pRLWinPriv->hWnd, + WM_SETICON, ICON_BIG, (LPARAM) hIcon); winDestroyIcon(hiconOld); } + hIcon=NULL; } } From f1441b83538e6ba8a1557c4f5ea50c53a1837087 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Wed, 27 May 2009 10:06:10 -0700 Subject: [PATCH 87/89] XQuartz: More localization updates (cherry picked from commit b107390c9f30571902556b4d053e62d345a06254) --- .../Resources/Dutch.lproj/locversion.plist | 2 +- .../Dutch.lproj/main.nib/designable.nib | 127 +- .../Dutch.lproj/main.nib/keyedobjects.nib | Bin 46175 -> 46115 bytes .../Resources/French.lproj/locversion.plist | 2 +- .../Resources/German.lproj/locversion.plist | 2 +- .../German.lproj/main.nib/designable.nib | 317 +-- .../German.lproj/main.nib/keyedobjects.nib | Bin 50746 -> 53122 bytes .../Resources/Italian.lproj/locversion.plist | 2 +- .../Resources/Japanese.lproj/locversion.plist | 2 +- .../Resources/Spanish.lproj/locversion.plist | 2 +- .../Spanish.lproj/main.nib/designable.nib | 221 +- .../Spanish.lproj/main.nib/keyedobjects.nib | Bin 53308 -> 53745 bytes .../Resources/da.lproj/locversion.plist | 2 +- .../da.lproj/main.nib/designable.nib | 2 +- .../da.lproj/main.nib/keyedobjects.nib | Bin 49367 -> 49339 bytes .../Resources/fi.lproj/locversion.plist | 2 +- .../fi.lproj/main.nib/designable.nib | 494 +++-- .../fi.lproj/main.nib/keyedobjects.nib | Bin 50882 -> 53312 bytes .../Resources/ko.lproj/locversion.plist | 2 +- .../ko.lproj/main.nib/designable.nib | 34 +- .../ko.lproj/main.nib/keyedobjects.nib | Bin 46775 -> 46678 bytes .../Resources/no.lproj/locversion.plist | 2 +- .../Resources/pl.lproj/locversion.plist | 2 +- .../pl.lproj/main.nib/designable.nib | 435 ++-- .../pl.lproj/main.nib/keyedobjects.nib | Bin 49985 -> 52417 bytes .../Resources/pt.lproj/locversion.plist | 2 +- .../pt.lproj/main.nib/designable.nib | 44 +- .../pt.lproj/main.nib/keyedobjects.nib | Bin 50446 -> 50446 bytes .../Resources/pt_PT.lproj/locversion.plist | 2 +- .../pt_PT.lproj/main.nib/designable.nib | 1968 +++++------------ .../pt_PT.lproj/main.nib/keyedobjects.nib | Bin 51308 -> 51384 bytes .../Resources/ru.lproj/locversion.plist | 2 +- .../Resources/sv.lproj/locversion.plist | 2 +- .../sv.lproj/main.nib/designable.nib | 602 +++-- .../sv.lproj/main.nib/keyedobjects.nib | Bin 50165 -> 52576 bytes .../Resources/zh_CN.lproj/locversion.plist | 2 +- .../Resources/zh_TW.lproj/locversion.plist | 2 +- .../zh_TW.lproj/main.nib/designable.nib | 20 +- .../zh_TW.lproj/main.nib/keyedobjects.nib | Bin 41976 -> 42003 bytes 39 files changed, 1731 insertions(+), 2567 deletions(-) diff --git a/hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist b/hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist index 51e3827a3..151315080 100644 --- a/hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib index 05eca0db4..ab78847d0 100644 --- a/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib @@ -1,18 +1,17 @@ - + 1050 - 10A222 - 708 - 994.5 - 404.00 + 10A314 + 718 + 1013 + 415.00 com.apple.InterfaceBuilder.CocoaPlugin - 708 + 718 YES - YES @@ -20,7 +19,7 @@ YES - + YES @@ -194,7 +193,7 @@ - UHJvZ3JhbW1hJ3M + Programma's 1048576 2147483647 @@ -202,7 +201,7 @@ submenuAction: - UHJvZ3JhbW1hJ3M + Programma's YES @@ -398,10 +397,10 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} - + 256 YES @@ -461,9 +460,7 @@ 67239424 4194304 - QWxzIHUgZGV6ZSBvcHRpZSBpbnNjaGFrZWx0LCBrYW4gaGV0IGdlYnJ1aWsgdmFuIHRvZXRzY29tYmlu -YXRpZXMgdm9vciBtZW51Y29tbWFkbydzIGNvbmZsaWN0ZXJlbiBtZXQgWDExLXByb2dyYW1tYSdzIGRp -ZSBkZSBNZXRhLW1vZGlmaWVyIGdlYnJ1aWtlbi4 + Als u deze optie inschakelt, kan het gebruik van toetscombinaties voor menucommado's conflicteren met X11-programma's die de Meta-modifier gebruiken. LucidaGrande 11 @@ -475,9 +472,9 @@ ZSBkZSBNZXRhLW1vZGlmaWVyIGdlYnJ1aWtlbi4 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NjY3AA @@ -619,9 +616,7 @@ ZW4uCg 67239424 4194304 - Vm9vciBYMTEtZ2VsdWlkc3NpZ25hbGVuIHdvcmR0IGhldCB3YWFyc2NodXdpbmdzc2lnbmFhbCB2YW4g -aGV0IHN5c3RlZW0gZ2VicnVpa3QsIHpvYWxzIGluZ2VzdGVsZCBpbiBoZXQgdGFiYmxhZCAnR2VsdWlk -c2VmZmVjdGVuJyB2YW4gaGV0IHN5c3RlZW12b29ya2V1cmVucGFuZWVsICdHZWx1aWQnLg + Voor X11-geluidssignalen wordt het waarschuwingssignaal van het systeem gebruikt, zoals ingesteld in het tabblad 'Geluidseffecten' van het systeemvoorkeurenpaneel 'Geluid'. @@ -861,9 +856,7 @@ c2VmZmVjdGVuJyB2YW4gaGV0IHN5c3RlZW12b29ya2V1cmVucGFuZWVsICdHZWx1aWQnLg 67239424 4194304 - SGllcm1lZSBzY2hha2VsdCB1IGhldCBtZW51b25kZXJkZWVsICJrb3BpZWVyIiBpbiBlbiBtYWFrdCB1 -IHN5bmNocm9uaXNhdGllIG1vZ2VsaWprIHR1c3NlbiBoZXQga2xlbWJvcmQgdmFuIE9TIFggZW4gZGUg -Q0xJUEJPQVJELSBlbiBQUklNQVJZLWJ1ZmZlciB2YW4gWDExLg + Hiermee schakelt u het menuonderdeel "kopieer" in en maakt u synchronisatie mogelijk tussen het klembord van OS X en de CLIPBOARD- en PRIMARY-buffer van X11. @@ -983,8 +976,7 @@ Q0xJUEJPQVJELSBlbiBQUklNQVJZLWJ1ZmZlciB2YW4gWDExLg 67239424 4194304 - VmFud2VnZSBiZXBlcmtpbmdlbiBpbiBoZXQgWDExLXByb3RvY29sIHdlcmt0IGRlemUgb3B0aWUgbW9n -ZWxpamsgbmlldCBhbHRpamQgaW4gYWxsZSBwcm9ncmFtbWEncy4 + Vanwege beperkingen in het X11-protocol werkt deze optie mogelijk niet altijd in alle programma's. @@ -1114,7 +1106,7 @@ ZWxpamsgbmlldCBhbHRpamQgaW4gYWxsZSBwcm9ncmFtbWEncy4 67239424 4194304 - Indien ingeschakeld, wordt bij aanmaak van een nieuw X11-venster X11.app op de voorgrond geplaatst (in plaats van Finder.app, Terminal.app, enz.) + Indien ingeschakeld, wordt bij aanmaak van een nieuw X11-venster X11.app op de voorgrond geplaatst (in plaats van Finder.app, Terminal.app, enz.). @@ -1187,10 +1179,7 @@ ZWxpamsgbmlldCBhbHRpamQgaW4gYWxsZSBwcm9ncmFtbWEncy4 67239424 4194304 - V2FubmVlciB1IFgxMSBzdGFydCwgd29yZGVuIGVyIFhhdXRob3JpdHktdG9lZ2FuZ3Njb250cm9sZXNs -ZXV0ZWxzIGFhbmdlbWFha3QuIEFscyBoZXQgSVAtYWRyZXMgdmFuIGhldCBzeXN0ZWVtIHdvcmR0IGdl -d2lqemlnZCwgd29yZGVuIGRlemUgdG9ldHNlbiBvbmdlbGRpZyB3YWFyZG9vciBoZXQgbW9nZWxpamsg -aXMgZGF0IFgxMS1wcm9ncmFtbWEncyBuaWV0IGt1bm5lbiB3b3JkZW4gZ2VzdGFydC4 + Wanneer u X11 start, worden er Xauthority-toegangscontrolesleutels aangemaakt. Als het IP-adres van het systeem wordt gewijzigd, worden deze toetsen ongeldig waardoor het mogelijk is dat X11-programma's niet kunnen worden gestart. @@ -1207,10 +1196,7 @@ aXMgZGF0IFgxMS1wcm9ncmFtbWEncyBuaWV0IGt1bm5lbiB3b3JkZW4gZ2VzdGFydC4 67239424 4194304 - QWxzIHUgZGV6ZSBvcHRpZSBpbnNjaGFrZWx0LCBtb2V0ICdWb2VyIGlkZW50aXRlaXRzY29udHJvbGUg -dWl0IHZvb3IgdmVyYmluZGluZ2VuJyBvb2sgd29yZGVuIGluZ2VzY2hha2VsZCB0ZXIgYmV2ZWlsaWdp -bmcgdmFuIGhldCBzeXN0ZWVtLiBBbHMgZGV6ZSBvcHRpZSBpcyB1aXRnZXNjaGFrZWxkLCB3b3JkZW4g -dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 + Als u deze optie inschakelt, moet 'Voer identiteitscontrole uit voor verbindingen' ook worden ingeschakeld ter beveiliging van het systeem. Als deze optie is uitgeschakeld, worden verbindingen van externe programma's niet toegestaan. @@ -1255,11 +1241,10 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 {564, 308} - {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs @@ -1272,7 +1257,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1361,8 +1346,8 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 62.730998992919922 1000 - 75628032 - 0 + 75628096 + 2048 Naam @@ -1399,8 +1384,8 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 40 1000 - 75628032 - 0 + 75628096 + 2048 Commando @@ -1426,8 +1411,8 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 10 1000 - 67239424 - 0 + 75628096 + 2048 Toetsen @@ -1454,7 +1439,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 6 System controlBackgroundColor - + @@ -1484,6 +1469,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 -1 0 YES + 0 {{1, 17}, {301, 198}} @@ -1567,7 +1553,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps @@ -1587,7 +1573,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 - UHJvZ3JhbW1hJ3M + Programma's 1048576 2147483647 @@ -1595,7 +1581,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 submenuAction: - UHJvZ3JhbW1hJ3M + Programma's YES @@ -1611,7 +1597,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 - UGFzIGFhbuKApg + Pas aan… 1048576 2147483647 @@ -2186,28 +2172,26 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES 0 - - YES - + -2 - - RmlsZSdzIE93bmVyA + + File's Owner -1 - + First Responder -3 - + Application @@ -2221,7 +2205,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 - + MainMenu @@ -2466,7 +2450,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 196 - + X11Controller @@ -2476,7 +2460,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES - + PrefsPanel @@ -2740,7 +2724,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES - + EditPrograms @@ -2763,7 +2747,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 - + DockMenu @@ -3317,6 +3301,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES YES + -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3606,6 +3591,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3673,9 +3659,9 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 com.apple.InterfaceBuilder.CocoaPlugin {{271, 666}, {301, 153}} - {{437, 672}, {564, 308}} + {{325, 672}, {564, 308}} com.apple.InterfaceBuilder.CocoaPlugin - {{437, 672}, {564, 308}} + {{325, 672}, {564, 308}} {{184, 290}, {481, 345}} @@ -3896,9 +3882,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES - - YES - + YES @@ -3906,9 +3890,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES - - YES - + YES @@ -3946,6 +3928,15 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 0 + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES ../X11.xcodeproj 3 diff --git a/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/keyedobjects.nib index 4aa9bb3c923b2aea8ff8b0a90107fff59838e258..ea9418ee9c022f9a4f4681c4dad5afcee8e851ca 100644 GIT binary patch literal 46115 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 Iiw?#A0Dp|-SpWb4 diff --git a/hw/xquartz/bundle/Resources/French.lproj/locversion.plist b/hw/xquartz/bundle/Resources/French.lproj/locversion.plist index 02995842e..6adec6831 100644 --- a/hw/xquartz/bundle/Resources/French.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/French.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/German.lproj/locversion.plist b/hw/xquartz/bundle/Resources/German.lproj/locversion.plist index 4e0034631..5272fed2a 100644 --- a/hw/xquartz/bundle/Resources/German.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/German.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib index d71a98a56..12517fe8f 100644 --- a/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib @@ -1,11 +1,15 @@ - + 1050 - 9C31 - 677 - 949.26 - 352.00 + 10A222 + 708 + 994.5 + 404.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 708 + YES @@ -393,7 +397,7 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -428,7 +432,7 @@ Drei Maustasten nachbilden LucidaGrande - 1.300000e+01 + 13 1044 @@ -461,7 +465,7 @@ bsO8bGVpc3RlIGRpZSBYMTEtUHJvZ3JhbW1lIHN0w7ZyZW4sIGRpZSBNZXRhLVNvbmRlcnRhc3RlbiB2 ZXJ3ZW5kZW4uA LucidaGrande - 1.100000e+01 + 11 3100 @@ -470,9 +474,9 @@ ZXJ3ZW5kZW4uA 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NwA @@ -639,7 +643,7 @@ LCB3aWUgaW4gZGVyIFN5c3RlbWVpbnN0ZWxsdW5nIOKAnlRvbmVmZmVrdGXigJwgZmVzdGdlbGVndC4< 1 LucidaGrande - 1.300000e+01 + 13 16 @@ -706,6 +710,7 @@ LCB3aWUgaW4gZGVyIFN5c3RlbWVpbnN0ZWxsdW5nIOKAnlRvbmVmZmVrdGXigJwgZmVzdGdlbGVndC4< +

3 YES @@ -1262,7 +1267,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4
{{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs
@@ -1275,7 +1280,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1360,9 +1365,9 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 YES - 1.227310e+02 - 6.273100e+01 - 1.000000e+03 + 122.73099999999999 + 62.731000000000002 + 1000 75628032 0 @@ -1398,9 +1403,9 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 - 1.000000e+02 - 4.000000e+01 - 1.000000e+03 + 100 + 40 + 1000 75628032 0 @@ -1425,9 +1430,9 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 - 6.900000e+01 - 1.000000e+01 - 1.000000e+03 + 69 + 10 + 1000 67239424 0 @@ -1447,7 +1452,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 Textzelle LucidaGrande - 1.200000e+01 + 12 16 @@ -1457,7 +1462,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 6 System controlBackgroundColor - + @@ -1467,8 +1472,8 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 - 3.000000e+00 - 2.000000e+00 + 3 + 2 6 @@ -1479,8 +1484,10 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 MC41AA - 1.700000e+01 + 17 1379958784 + + 1 -1 0 @@ -1501,7 +1508,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 _doScroller: - 9.949238e-01 + 0.99492380000000002 @@ -1511,7 +1518,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 1 _doScroller: - 6.885246e-01 + 0.68852460000000004 @@ -1568,7 +1575,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 {{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps @@ -3316,11 +3323,8 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 YES - + YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3375,7 +3379,6 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 169.editorWindowContentRectSynchronizationRect 19.IBPluginDependency 19.ImportedFromIB2 - 196.IBPluginDependency 196.ImportedFromIB2 200295.IBPluginDependency 200295.IBShouldRemoveOnLegacySave @@ -3390,6 +3393,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect 244.IBEditorWindowLastContentRect + 244.IBPluginDependency 244.IBViewEditorWindowController.showingLayoutRectangles 244.IBWindowTemplateEditedContentRect 244.ImportedFromIB2 @@ -3409,6 +3413,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 272.IBPluginDependency 272.ImportedFromIB2 285.IBEditorWindowLastContentRect + 285.IBPluginDependency 285.IBViewEditorWindowController.showingBoundsRectangles 285.IBViewEditorWindowController.showingLayoutRectangles 285.IBWindowTemplateEditedContentRect @@ -3608,14 +3613,11 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 YES + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3636,265 +3638,266 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{168, 821}, {113, 23}} com.apple.InterfaceBuilder.CocoaPlugin - + {{202, 626}, {154, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - + {{349, 858}, {315, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + {{271, 666}, {301, 153}} {{325, 198}, {613, 302}} + com.apple.InterfaceBuilder.CocoaPlugin {{325, 198}, {613, 302}} - + {{184, 290}, {481, 345}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{58, 803}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{100, 746}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{68, 585}, {512, 271}} - - + com.apple.InterfaceBuilder.CocoaPlugin + + {{68, 585}, {512, 271}} - + {{433, 406}, {486, 327}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - + {{145, 836}, {375, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + {{67, 819}, {336, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{20, 641}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + {{79, 616}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + diff --git a/hw/xquartz/bundle/Resources/German.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/German.lproj/main.nib/keyedobjects.nib index a95fee95b159798500ccdac0ff5f9bd9ad64fc4d..a017a7f401d1e90405ad02bb736e623e2c6f84e9 100644 GIT binary patch literal 53122 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 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist b/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist index 8db4f8aba..b78c7c5fe 100644 --- a/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 76 + 83 diff --git a/hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist b/hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist index 05ec1981c..068c07777 100644 --- a/hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib index d2eb1d110..adbcd6f5c 100644 --- a/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib @@ -1,14 +1,14 @@ - + 1050 - 10A222 - 708 - 994.5 - 404.00 + 10A314 + 718 + 1013 + 415.00 com.apple.InterfaceBuilder.CocoaPlugin - 708 + 718 YES @@ -19,7 +19,7 @@ YES - + YES @@ -229,7 +229,7 @@ - RWRpY2nDs24 + Edición 1048576 2147483647 @@ -237,7 +237,7 @@ submenuAction: - RWRpY2nDs24 + Edición YES @@ -314,7 +314,7 @@ - UmVjb3JyZXIgdmVudGFuYXMgYWwgcmV2w6lzA + Recorrer ventanas al revés ~ 1179914 2147483647 @@ -397,10 +397,10 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} - + 256 YES @@ -409,6 +409,7 @@ 256 {{13, 10}, {593, 292}} + YES @@ -425,11 +426,12 @@ 256 {{18, 210}, {402, 18}} + YES 67239424 0 - U2ltdWxhciByYXTDs24gZGUgdHJlcyBib3RvbmVzA + Simular ratón de tres botones LucidaGrande 13 @@ -456,13 +458,12 @@ 256 {{36, 40}, {501, 42}} + YES 67239424 4194304 - Q3VhbmRvIGVzdGEgb3BjacOzbiBlc3TDoSBhY3RpdmFkYSwgcHVlZGUgcXVlIGxvcyBlcXVpdmFsZW50 -ZXMgZGUgdGVjbGFkbyBkZSBsYSBiYXJyYSBkZSBtZW7DunMgaW50ZXJmaWVyYW4gY29uIGxhcyBhcGxp -Y2FjaW9uZXMgWDExIHF1ZSB1c2VuIGVsIG1vZGlmaWNhZG9yIE1ldGEuA + Cuando esta opción está activada, puede que los equivalentes de teclado de la barra de menús interfieran con las aplicaciones X11 que usen el modificador Meta. LucidaGrande 11 @@ -474,16 +475,16 @@ Y2FjaW9uZXMgWDExIHF1ZSB1c2VuIGVsIG1vZGlmaWNhZG9yIE1ldGEuA 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NjY3AA 6 System controlTextColor - + 3 MAA @@ -495,6 +496,7 @@ Y2FjaW9uZXMgWDExIHF1ZSB1c2VuIGVsIG1vZGlmaWNhZG9yIE1ldGEuA 256 {{36, 170}, {501, 34}} + YES 67239424 @@ -513,6 +515,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA256 {{18, 88}, {402, 18}} + YES 67239424 @@ -535,12 +538,12 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA256 {{36, 112}, {501, 28}} + YES 67239424 4194304 - UGVybWl0ZSBxdWUgbG9zIGNhbWJpb3MgZW4gZWwgbWVuw7ogZGUgdGVjbGFkbyByZWVtcGxhY2VuIGxh -IGRpc3RyaWJ1Y2nDs24gZGUgdGVjbGFzIGFjdHVhbCBkZSBYMTEuA + Permite que los cambios en el menú de teclado reemplacen la distribución de teclas actual de X11. @@ -553,11 +556,12 @@ IGRpc3RyaWJ1Y2nDs24gZGUgdGVjbGFzIGFjdHVhbCBkZSBYMTEuA 256 {{18, 146}, {402, 18}} + YES 67239424 0 - U2VndWlyIGxhIGRpc3RyaWJ1Y2nDs24gZGUgdGVjbGFkbyBkZWwgc2lzdGVtYQ + Seguir la distribución de teclado del sistema 1211912703 @@ -573,6 +577,7 @@ IGRpc3RyaWJ1Y2nDs24gZGUgdGVjbGFzIGFjdHVhbCBkZSBYMTEuA {{10, 33}, {573, 246}} + Entrada @@ -618,9 +623,7 @@ IGRpc3RyaWJ1Y2nDs24gZGUgdGVjbGFzIGFjdHVhbCBkZSBYMTEuA 67239424 4194304 - TG9zIHNvbmlkb3MgZGUgWDExIHVzYXLDoW4gZWwgc29uaWRvIGRlIGFsZXJ0YSBlc3TDoW5kYXIgZGVs -IHNpc3RlbWEgZGVmaW5pZG8gZW4gZWwgcGFuZWwg4oCcRWZlY3RvcyBkZSBzb25pZG/igJ0gZGUgUHJl -ZmVyZW5jaWFzIGRlbCBTaXN0ZW1hLg + Los sonidos de X11 usarán el sonido de alerta estándar del sistema definido en la pestaña “Efectos de sonido” del panel Sonido de Preferencias del Sistema. @@ -654,7 +657,7 @@ ZmVyZW5jaWFzIGRlbCBTaXN0ZW1hLg 75 - Los de la pantalla + Desde la pantalla 1048576 2147483647 @@ -744,8 +747,7 @@ ZmVyZW5jaWFzIGRlbCBTaXN0ZW1hLg 67239424 4194304 - RXN0YSBvcGNpw7NuIHNlcsOhIGVmZWN0aXZhIGxhIHByw7N4aW1hIHZleiBxdWUgc2UgaW5pY2llIFgx -MS4 + Esta opción será efectiva la próxima vez que se inicie X11. @@ -784,8 +786,7 @@ MS4 67239424 0 - TW9zdHJhIGJhcnJhIGRlIG1lbsO6cyBhdXRvbcOhdGljYW1lbnRlIGVuIGxhIG1vZGFsaWRhZCBkZSBw -YW50YWxsYSBjb21wbGV0YSA + Mostra barra de menús automáticamente en la modalidad de pantalla completa 1211912703 @@ -807,9 +808,7 @@ YW50YWxsYSBjb21wbGV0YSA 67239424 4194304 - QWN0aXZhIGxhIHZlbnRhbmEgcmHDrXogZGUgWDExLiBVc2UgbGEgY29tYmluYWNpw7NuIGRlIHRlY2xh -cyBDb21hbmRvICsgT3BjacOzbiArIEEgcGFyYSBlbnRyYXIgbyBzYWxpciBkZSBsYSBtb2RhbGlkYWQg -ZGUgcGFudGFsbGEgY29tcGxldGEuA + Activa la ventana raíz de X11. Use la combinación de teclas Comando + Opción + A para entrar o salir de la modalidad de pantalla completa. @@ -842,7 +841,7 @@ ZGUgcGFudGFsbGEgY29tcGxldGEuA 67239424 0 - QWN0aXZhciBzaW5jcm9uaXphY2nDs24 + Activar sincronización 1211912703 @@ -864,9 +863,7 @@ ZGUgcGFudGFsbGEgY29tcGxldGEuA 67239424 4194304 - QWN0aXZhIGVsIMOtdGVtIGRlIG1lbsO6ICJjb3BpYXIiIHkgcGVybWl0ZSBzaW5jcm9uaXphciBlbCBw -b3J0YXBhcGVsZXMgZGUgT1NYIHkgbG9zIGLDumZlcnMgQ0xJUEJPQVJEIHkgUFJJTUFSWSBkZSBYMTEu -A + Activa el ítem de menú “copiar” y permite sincronizar el portapapeles de OSX y los búfers CLIPBOARD y PRIMARY de X11. @@ -904,8 +901,7 @@ A 67239424 0 - QWN0dWFsaXphciBlbCBQUklNQVJZIChjbGljIGNvbiBlbCBib3TDs24gY2VudHJhbCkgY3VhbmRvIGNh -bWJpZSBlbCBwb3J0YXBhcGVsZXMuA + Actualizar el PRIMARY (clic con el botón central) cuando cambie el portapapeles. 1211912703 @@ -971,8 +967,7 @@ bWJpZSBlbCBwb3J0YXBhcGVsZXMuA 67239424 4194304 - RGVzYWN0aXZlIGVzdGEgb3BjacOzbiBzaSBkZXNlYSB1c2FyIHhjbGlwYm9hcmQsIGtsaXBwZXIgbyBj -dWFscXVpZXIgb3RybyBnZXN0b3IgZGUgcG9ydGFwYXBlbGVzIGRlIFgxMS4 + Desactive esta opción si desea usar xclipboard, klipper o cualquier otro gestor de portapapeles de X11. @@ -988,8 +983,7 @@ dWFscXVpZXIgb3RybyBnZXN0b3IgZGUgcG9ydGFwYXBlbGVzIGRlIFgxMS4 67239424 4194304 - QSBjYXVzYSBkZSBsYXMgbGltaXRhY2lvbmVzIGRlbCBwcm90b2NvbG8gZGUgWDExLCBwdWVkZSBxdWUg -ZXN0YSBvcGNpw7NuIG5vIGZ1bmNpb25lIHNpZW1wcmUgZW4gYWxndW5hcyBhcGxpY2FjaW9uZXMuA + A causa de las limitaciones del protocolo de X11, puede que esta opción no funcione siempre en algunas aplicaciones. @@ -1043,9 +1037,7 @@ ZXN0YSBvcGNpw7NuIG5vIGZ1bmNpb25lIHNpZW1wcmUgZW4gYWxndW5hcyBhcGxpY2FjaW9uZXMuA 67239424 4194304 - Q3VhbmRvIGVzdMOhIGFjdGl2YWRhLCBhbCBoYWNlciBjbGljIGVuIHVuYSB2ZW50YW5hIGluYWN0aXZh -LCBsYSB2ZW50YW5hIHNlIGFjdGl2YSB5IGFkZW3DoXMgZWwgY2xpYyBkZWwgcmF0w7NuIHNlIHRyYW5z -bWl0ZSBhIGVsbGEuA + Cuando está activada, al hacer clic en una ventana inactiva, la ventana se activa y además el clic del ratón se transmite a ella. @@ -1061,7 +1053,7 @@ bWl0ZSBhIGVsbGEuA 67239424 0 - RW5mb2NhciBsYSBwb3NpY2nDs24gZGVsIHJhdMOzbg + Enfocar la posición del ratón 1211912703 @@ -1121,9 +1113,7 @@ bWl0ZSBhIGVsbGEuA 67239424 4194304 - Q3VhbmRvIGVzdMOhIGFjdGl2YWRhLCBhbCBjcmVhciB1bmEgbnVldmEgdmVudGFuYSBkZSBYMTEgZWwg -YXJjaGl2byBYMTEuYXBwIHNlIHNpdMO6YSBlbiBwcmltZXIgcGxhbm8gKHBvciBlbmNpbWEgZGUgRmlu -ZGVyLmFwcCwgVGVybWluYWwuYXBwLCBldGMuKQ + Cuando está activada, al crear una nueva ventana de X11 el archivo X11.app se sitúa en primer plano (por encima de Finder.app, Terminal.app, etc.) @@ -1196,10 +1186,7 @@ ZGVyLmFwcCwgVGVybWluYWwuYXBwLCBldGMuKQ 67239424 4194304 - QWwgaW5pY2lhciBYMTEgc2UgY3JlYXLDoW4gdW5hcyBjbGF2ZXMgZGUgY29udHJvbCBkZSBhY2Nlc28g -WGF1dGhvcml0eS4gU2kgbGEgZGlyZWNjacOzbiBJUCBkZWwgc2lzdGVtYSBjYW1iaWEsIGVzdGFzIGNs -YXZlcyBkZWphcsOhbiBkZSBzZXIgdsOhbGlkYXMsIGxvIHF1ZSBpbXBlZGlyw61hIHF1ZSBwdWRpZXNl -biBlamVjdXRhcnNlIGxhcyBhcGxpY2FjaW9uZXMgWDExLg + Al iniciar X11 se crearán unas claves de control de acceso Xauthority. Si la dirección IP del sistema cambia, estas claves dejarán de ser válidas, lo que impediría que pudiesen ejecutarse las aplicaciones X11. @@ -1216,10 +1203,7 @@ biBlamVjdXRhcnNlIGxhcyBhcGxpY2FjaW9uZXMgWDExLg 67239424 4194304 - U2kgZXN0YSBvcGNpw7NuIGVzdMOhIGFjdGl2YWRhLCBsYSBvcGNpw7NuIOKAnEF1dGVudGljYXIgY29u -ZXhpb25lc+KAnSB0YW1iacOpbiBkZWJlIGVzdGFybG8gcGFyYSBnYXJhbnRpemFyIGxhIHNlZ3VyaWRh -ZCBkZWwgc2lzdGVtYS4gU2kgZXN0w6EgZGVzYWN0aXZhZGEsIGxhcyBjb25leGlvbmVzIGRlIGFwbGlj -YWNpb25lcyByZW1vdGFzIG5vIGVzdMOhbiBwZXJtaXRpZGFzLg + Si esta opción está activada, la opción “Autenticar conexiones” también debe estarlo para garantizar la seguridad del sistema. Si está desactivada, las conexiones de aplicaciones remotas no están permitidas. @@ -1236,8 +1220,7 @@ YWNpb25lcyByZW1vdGFzIG5vIGVzdMOhbiBwZXJtaXRpZGFzLg 67239424 4194304 - RXN0YXMgb3BjaW9uZXMgc2Vyw6FuIGVmZWN0aXZhcyBsYSBwcsOzeGltYSB2ZXogcXVlIHNlIGluaWNp -ZSBYMTEuA + Estas opciones serán efectivas la próxima vez que se inicie X11. @@ -1265,10 +1248,12 @@ ZSBYMTEuA {619, 308} + + {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs @@ -1276,15 +1261,15 @@ ZSBYMTEuA 2 {{302, 440}, {454, 271}} 1350041600 - TWVuw7ogZGUgYXBsaWNhY2lvbmVzIFgxMQ + Menú de aplicaciones X11 NSPanel View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} - + 256 YES @@ -1293,6 +1278,7 @@ ZSBYMTEuA 265 {{340, 191}, {110, 32}} + YES 67239424 @@ -1316,6 +1302,7 @@ ZSBYMTEuA 265 {{340, 159}, {110, 32}} + YES 67239424 @@ -1349,12 +1336,14 @@ ZSBYMTEuA 256 {301, 198} + YES 256 {301, 17} + @@ -1362,6 +1351,7 @@ ZSBYMTEuA 256 {{302, 0}, {16, 17}} + YES @@ -1370,19 +1360,22 @@ ZSBYMTEuA 62.730998992919922 1000 - 75628032 - 0 + 75628096 + 2048 Nombre 3 MC4zMzMzMzI5OQA - + 6 System - headerTextColor - + disabledControlTextColor + + 3 + MC4zMzMzMzMzMzMzAA + @@ -1405,16 +1398,16 @@ ZSBYMTEuA - 99 + 88 40 1000 - 75628032 - 0 + 75628096 + 2048 Comando - + 338820672 @@ -1433,13 +1426,13 @@ ZSBYMTEuA - 71 + 82 10 1000 - 67239424 - 0 - RnVuY2nDs24gcsOhcGlkYQ + 75628096 + 2048 + Función rápida 6 @@ -1447,7 +1440,7 @@ ZSBYMTEuA headerColor - + 338820672 @@ -1465,7 +1458,7 @@ ZSBYMTEuA 6 System controlBackgroundColor - + @@ -1496,10 +1489,12 @@ ZSBYMTEuA -1 0 YES + 0 {{1, 17}, {301, 198}} + @@ -1510,6 +1505,7 @@ ZSBYMTEuA 256 {{302, 17}, {15, 198}} + _doScroller: 0.99492377042770386 @@ -1519,10 +1515,11 @@ ZSBYMTEuA 256 {{1, 215}, {301, 15}} + 1 _doScroller: - 0.68852460384368896 + 0.99668874172185429 @@ -1533,6 +1530,7 @@ ZSBYMTEuA {{1, 0}, {301, 17}} + @@ -1542,6 +1540,7 @@ ZSBYMTEuA {{20, 20}, {318, 231}} + 50 @@ -1556,11 +1555,12 @@ ZSBYMTEuA 265 {{340, 223}, {114, 32}} + YES -2080244224 137887744 - QcOxYWRpciDDrXRlbQ + Añadir ítem -2038284033 @@ -1576,14 +1576,16 @@ ZSBYMTEuA {454, 271} + + {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps - TWVuw7o + Menú YES @@ -1623,7 +1625,7 @@ ZSBYMTEuA - UGVyc29uYWxpemFy4oCmA + Personalizar… 1048576 2147483647 @@ -2198,28 +2200,26 @@ ZSBYMTEuA YES 0 - - YES - + -2 - - RmlsZSdzIE93bmVyA + + File's Owner -1 - + First Responder -3 - + Application @@ -2233,7 +2233,7 @@ ZSBYMTEuA - + MainMenu @@ -2478,7 +2478,7 @@ ZSBYMTEuA 196 - + X11Controller @@ -2488,7 +2488,7 @@ ZSBYMTEuA YES - + PrefsPanel @@ -2752,7 +2752,7 @@ ZSBYMTEuA YES - + EditPrograms @@ -2775,7 +2775,7 @@ ZSBYMTEuA - + DockMenu @@ -3329,6 +3329,7 @@ ZSBYMTEuA YES YES + -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3618,6 +3619,7 @@ ZSBYMTEuA YES + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3685,10 +3687,10 @@ ZSBYMTEuA com.apple.InterfaceBuilder.CocoaPlugin {{271, 666}, {301, 153}} - {{438, 548}, {619, 308}} + {{300, 409}, {619, 308}} com.apple.InterfaceBuilder.CocoaPlugin - - {{438, 548}, {619, 308}} + + {{300, 409}, {619, 308}} {{184, 290}, {481, 345}} @@ -3705,11 +3707,11 @@ ZSBYMTEuA {{100, 746}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - {{68, 585}, {454, 271}} + {{68, 453}, {454, 271}} com.apple.InterfaceBuilder.CocoaPlugin - {{68, 585}, {454, 271}} + {{68, 453}, {454, 271}} {{433, 406}, {486, 327}} @@ -3910,9 +3912,7 @@ ZSBYMTEuA YES - - YES - + YES @@ -3920,9 +3920,7 @@ ZSBYMTEuA YES - - YES - + YES @@ -3960,6 +3958,15 @@ ZSBYMTEuA 0 + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES ../X11.xcodeproj 3 diff --git a/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/keyedobjects.nib index fe4b554dbe8b9c179efa8601a3bedf730bb57046..6d445d1dbf8c3f496d87c43a9c04f97384eafdf4 100644 GIT binary patch literal 53745 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 literal 53308 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 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib index 53166fe2c..e0c838bcc 100644 --- a/hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib @@ -626,7 +626,7 @@ ZXJzaWd0Lg 256 - {{74, 202}, {128, 26}} + {{70, 202}, {128, 26}} YES diff --git a/hw/xquartz/bundle/Resources/da.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/da.lproj/main.nib/keyedobjects.nib index 3b79218e1e3cf73403ad9dab8574d00715a4c181..e1c0a2eb1eb2cc4d0ea9c4acf9a01d9aca85baad 100644 GIT binary patch literal 49339 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%0D8NI^#lI$F>%f{qn*oS@?cogiqw zpc4h1BT0I(AW9s12R00$easSkrUTLeSK5-x`YCY)W#g{snbIh1y(GunfhbPOIFvnh< z(`_hs=O(W(|N5WIWBq5)q-7ov6^+x7pKR>SiduP4;9wZRSq%O()O7jx7FR-6)Y_gl zeM6Lyp3_a8-}Bo_k?Lk^t7}7$t|H00P^3W2hc9wir z)bcqE5qN@{AI3OUEm$yx9GE<7%3)(C_2qXnP=56L0#FPV(AS+-sN#li7*MC;j8g`PA{!ORQLDpPXaHm)_ zU^Pu!Y}ILgwXRp4myi{;MxB(Ut1DanEoA_Rp!O#L>nR?NiNiE&KvC6;3OwC7RP1-|=<;tZ z^3Mubjne1<_Z79;GzgLE6Gv;;1>!lRSecXMa&S6Wk_Bm~D@I3Sq2-bj@rLR@2G`(9ZT(M`!=U6(F0byVa~~*c1cpmxWcH5Ygphs$=R}_ z)-@+#vXuNmLoHr9v}sM#(=Btz3Rr&U zcMAN&qD%c<>N~I%86!=JR{tbGR@6H5Pl%EKNb~1&KSy2}G@R zr+}>ggDumJ%&y`5xiULy;n|(2{OWV_{~I(rqaL4n3ON05vDDckLt*=jxPRi32>u#n zt2BzOeF$Mzn*Wd;usYYkO+zQ2WJRqrYe~m+4>~2U|B)@@2FU6;Yah~Al~Xh#>K=pT zD)!u{bxs3{{Zy^;^w>$mfz7F%#~{bplDW>Un&qZa-)d41;0zs>Kj8J=|)oQ|p7s5RykSmfW@5e->0 zsvP8i)wrfw#(LDOsI}=77M-H$|5$L2C~Vb$k^T=3JVq%RIR$9{4?R*Hx7Xn}LIxuR zRmUacK#5a;lS`HVqkHaAq}GTZrjDr1idq{_0R*Y|MLJ{twrKnR;KpABV!Gc@ea387 z)Ed!%-Z)il`7euMVK~tBulz8r9uF(shN#Ee$6qSKqmk-n0&4ww2}0wvIziK_5JSK^ zz0Q}_5mk)))vsr3!|UJh3z9Vqp#f>8S|2fz)R*>24+@yKcZL?FWR=1nPDY{`t+nYK8;%Za~EUf5`n_c@h>&(ck}Z+a+p^J_(|03(9|s z+D*l%UFC>poo7X@oBl1R{9ju15w*shf;IndKLh}!!J3oc_5WmyHqFrNJ3Bp}GRKL1 zr9wYZ>$+1wX|)~kfBeKTw7=Weh_BY00g76K{|RZ>kU^MkG&XEnHW1=WFFs2BmULD) z&H1WTeAO{6tJPr4IE|?K)hrbmU$H1FV0EZYs`{PCTz7w}VynA9nLvwL2T#hYc;plw zje-jGqTu0fgt6)9hFxl;rh6~|5 zxDvahu|rx}57VIpHn7%kHJN~&(bav?Fc0R#3h8_7hlVNGIt4RfmNXnY#o=5+rLpwO zRJXX>DULnjP=Gz+P~>)q!(y1GT&jd%qBH_3tNX)YH8zx~PeI7-4o~%l!%9tqIZOtw zU@KWwBN@c7FFe&1?#WXQ%3En8c9y23y1^k%pM^=-0}fY^ELg*O!&<2)c7VfF>;Q+b z+W`(2NZ&xQat17ei?H(>7QhT_7K4lF8tE%_7L>sfxBD9|$KG%3{019>WGjCIdjxZx zW^bpmlsn9?$=X9eV|WbmedIZv1e1=k{0F zfVhNTjm=#bW7pqzZb#P-{0Tv_1UXBPeu7*tsEn=Ie-YU6_!A$(vr-M(f{f-L2+G_J z?PPN{S;d2Vw;(_Bt%9o9lZ_48Y2DcTX8xcc1DsZDY{BN)*r~;rbI!kWJKQ(nZw(NB zO^r5pr^7wj+TPD?ZI56ZA~v=Q(w)x|WC?a&I$iBUYIn7Nj!kgb$oP1&r#-!+eKPiU zUWUz&V+C>A-xgN&z6sLFX=YEgvOAsY0-M<9@O{|BUfscd24BnDIZf+={D6JyUt*Kn zU!5j5>{#b#CmYuPkZf2NWTYUc@tuN{2+~K8N8LvC$9N*y+4dNAvo*n9)z<{+iM^TF zt1ifKw^iL~RKJgJ<|C5)ZZvgS+-PPrH(D4ijnjW z80Q<6#s$WO1~-JU(pY6&WL#{lHZC#N7?&EC8EcJo#^uHp#(HCeaiwvUakX)cvC+8J zxX##QY&NzS*Bdt&HySq?Hyc}xZN_$Ehq2SxW$ZTg7<-L<#x2IJ#(v{A<96c?<4)r) z<8I>~<6h%{anQKWxZildc+mKr@sRPb@rd!L@q6Pj`{L%Q6@quy7_|W*s z_}KWw__Oh;@tN_t@fYI@<4fZ!K_3(Jkf4tX`h=iQ3i_0wPYZfj&}RgFR?z1JJtFAy zg1#W=i-P_^(3b>#Sr@a1q%pvu3$mI<_T6TSczb^VDkkl z6>NcEA;A_3wn(tBU}b_u1d9q*F4%d3#RQ8BmJqB$u*HHc5p1bo%LH34*b2eU7pzjS z3k17RFfN!7Y^7kU1iMJEiv?RP*d>Ck5$saIE)#66VCw|CT(BzyTQArK!LAhSD#5N6 z>>9x~3U;kv*9o>su+4&P$pmR*sgIOf2k>11zKqTUvZgt{Q}N|?>slYl#&?r_w6%}6 z_Yuo_(dv&^#%2ODOYz+;KHADh1irl+Uncp;<@onDe97^Vt9;}ZAKC9CZG6P%BlqAO zEqv6pzVngQK5`y@wtVC+Ya>4JJAB#YBSZ1;{Z?ZiZRevcePkVeKHwv_xN9N$$ahX6ac^cns_tCaKawfjL&qsRs z$Sxo4h@W=i%M={vbbQy<`rbz_#E;Ex6m5k zBS9Y>Y`x$kSNcc-FFI&g;G=&0aL`B3@sV?VWGRl}^%3qP>wTmXez)33&hSxZ^?R(9 zcx981bhK{tkqdmZk&kxp(dItd%tsdc$Q}5&flzr8-}&(Fhb&>O$4`xY=B-R{6+nKH9`bF7wf*)@-~bgfqO3 z@9x2uTk*yA5u@=5_uns8b04|FN5VKl6CcgQznMO=1aBN^J!>7oHxK$q8UF2sFW2MC zW_;Q0BNzL~r9QILN8&!x!$)G)b3U>RzqE^YU@FX4_o}z6KWd<E!9+>E`L_$@b)W`gr<#&hiZL4EK!p6nSQPW_xT;)N`Ka zLeCn{m7W_sJ3I$Gk9eN;{K4~@=R?omG9W|GFfz=H<{51=x@BZ%49qw?+P zG2^9-S2AA9cq8Lz#@iY1X1t&Ar;KA6A7y-!@oC2A8DC_4mGMo+Uo*bX_*=%08Gq0C zCF6unbf(L?s(W-@H}pn&rruO zn|{KpcpG_JdOLZ~@Md|td3$(!d9%H_-qGFy?=)|bcb0dqcZv5-??c{~y?^w6Z%9US zBg^P*3^K+WbB#sDGUEb+8!L^AjMc^(<1%BNafPwLxXSo{HQo1L6NkgV@v5z}WDpWU zAS3}o7MVauKtdRi4H;y43FN%w;y@fAF5KIqIKjJkcez;Ws;#Znx-IU#_rg`H)>W;$ z>hr_*^?ZJL{~4cUQSDKos2x$qqs~QLjk+6kKk8}J^Qf0mUnspPQIr^pfTE&kC>azj z#Xu>hm??J3V9F@UB+3-ZG|GHR8)Y@+2g=WsZIpwQbCm0p2bAZO_tdYb-%>f$WU7>! zPc>6PDnt!XgVZ6^+0?nz`P5eGLTVdzF?Bt4BXtvXGj%IWBVfqpJ zF?tvM4*fp;FZ$!??$J5XxzTyi`O$^Zrs(46(&+N&ebMKmFGgREz8ZZ!`d##g=>MWW zGrnSUWAtDoFzgH`!_5E~UPc`QWI&7nV;N&LV+~^+V*_I&;~3)v;}qiz;~e8W<09iR z;|b$A<0a#D3?;@JGa;rmrXyxu%$}GNG3R4$#N3SOin$YWFXqpfzhWN6{2lW&=6TGE zn15pajd>gMKISu%%A_+HOeQmt$!A)a1DS)E&CF@cHYURSf%!9Y3v)MfFSC=mpLv9N zjCq=QmU*6ek$IVUoB5Rap81jaiTQ;U&El~HtYnsumBlJz4Pce9%2;03DAokl6xLkU zeAaRn&I+^Eu{N+avVLa$!n(z}&AQ9F&w9Xm$a>6r!g|Jf!TK00j+Mry#VTS|v6|S7 zSZ%B>HaoU3c4X}6*rwR#*m1EFVq0P-$4-r%9@`qbJa%R5hS<%qyJ9n#c~)Kx&%tx?0=yt^2yYm#g|~p$ z##_u=%3IFc%G<`hs`S%4} z0Z$+hBnyNBkw7Al3FLwzfmr|wAVEM76buo}7qki%3Kj{L2$l)j1*-(B1#1Nx1bYNW z1Xl&u1vdp63DjY)MT?bCZ@OwI{7eLX%b| z;Yq8KRww(CMQzoR$NLiSIrmRlcnzAirN6N00Jt=>sycTvB zel6@N>?Q0Y>?{0MND;&=hMEJntXv1J@tq0A&JmX*rNWtFmOnMG!kd1Vck>*XSO9Rse zrTNnWX~DE1X~WVMr7cNYme!uOA`MMjnTDsWO9n(H=hH5xT~50z?B`t%_}mor>Lxy^2o7e#IfhNyR0_6~*6*XNrFm z|0>=p-YY&TJ}bXcc2_1Vg-Wqfrj#p{O0_amnWc0o2P(ZvpK_4WuY{Ei%8|;&%B9M7 z)TB zDznO}s!=&qE)}4HRU=fRR86X8)pXSy)e04=TB*WSr0Pf2Zq;5@r)t0Ikm|JRw(73x zzUqPMq3XTrqw16Di@LkIpE^OEsOGDa)v4-qb&-02x|_Fb$WVwX1Xpt zJ3TjjQ+j9m{`5oXN79d{KTLm|{v`c*`pfiJ>8~>=8OjWGMtX)eLzj`0k(*hO>C7CQ zIW)6Ab42Fo%vqW3nJY5U%$1o$=8u`XGxuh8X70~Cl-ZT}BJ*YDznO0{-)mV~ww9yi zYWZ4$Hd&jaZPGSt$7v^MTeOq4)3h_Rv$dr5SM6`wt=etco!TqfN7}!&&$KVJud*~* zd0DQkK-R>pd09)d$gCY%hqKOR-OGBb>!yp+(R2(QOBbh0(D8IBI+0GQlj~Hvbe&db z(FJtFbL=(Y>L=^x=;!HM^$YbKdPM(&eyx6k{wMt={bv0Z{W<*w{U!ZX{SEz1eV6`i zc0#r$J0n}0tV%E5AooJh|1Icsv(A$ysXaD{E5A{FV|5*PM{r}AEoBM4pC6}Jd$YtfSb2+(W?vC93xyN$vU zzuYf|?uKs+y$u3`!k{zc7z_rZq0nG5lo%`qo55}X4MPnh43iA)2E?$^fE!4|D#H(k zpAEklHXC*s_83kZ&KWKmE*q{HZW_7_cMSLQy5;rA`zEhHbxmW#tfs@s5j;q4MwA}z*ue^Y#eH=H;yol zHZ~f^7#A8h8@CvLH|{X*GVV2Y8u#aC`SyHQK9KLpugxEuzcL@s59hDSU!A`; ze|`Rs1&swQ11X`E@IX_9HGX}W2aX`yM62{DCCYfbA-8%>)`n@w9x z+e{ZtmrYkqH%wio+orpwj{_10Bo5#YNFE>@ARZtsPA@hWTZ?Oooy7x-fnslQb8$y8 zQXDGAi^IjMidPpuE9qAfRYEO^E@76iO4uc;5=)7##9rbm8Cc>isVkjcI=_@Cjg)?0 zx~6np>5rvbN`EiiS9+lIQ0dXq6Q!q1pOii;eNpXF9CRNR?3Ri8Y+ETTrYJb(Gs=HOMs$N&U ztNKv&sruV$ZZ)qusXC=vRNY*?qIz}pj_SkJcd9>`+2#~;q1kG#HG^iqd5F2*Ji(F2&RH&6u2`;HZdqfk$<{P$ zp0&d2vclHE)?wBL>nLlZwb?q}+G1_9F0n4Nc34p>X8p~&+j_`)!Fto$Wqn|MWPM_N zZe!a-whUW;Td~by18w!T@wN%JNw%rBdA3&DavN?VY!TaD+X35Q+cDco+iBZ5+hyB* z+XLInnqD=1YWmesYG^e{HL@CQOlOn(;L)HIr+m)y$}wRnu0pvIegqYu4BN zT(i68LCs$^k87URys3F_?{4p5?`coAr`jd+KEpk#@w6 z+A(|BzRv!meT#joeY^dV{i^+jy~}>be&7DL<10sZ$2X4Nj=m0-BhQiVC~_1#${dxB zDu>x&bwG}QqroxKG0QQ>G0)NJSm;>e*yY&c=yV)#9CDm-+;ns~?mM13-Z^_XW1K7} z+sSbzIOR^IQ|(N5YMlj6o73)eItMyE&f(4x&e6^$=UC?q=Q3xz6LE%|xO2Djl=F=9 zob!V7lJhU;Bj?}Fr_LA7FD{xZ+QoFmx;U;(*8o?EtK3!TGP_{cSl4*hMAu~3G*_D| z?25R)cdc=)cO7;ebscw|a-DUZb6s#fb0@onZjoE!PID{WYIlY^$6e$e;I4I#aF22~ zy2rT3xfi)f_bT^l_Zs(l_kQ;U_a*lg_cixT_e=Lj_h&!?qyY**1!#Z_APdL_aseYy z0GNPcpcE(vssJ-!0~~-07zlWQIsgP900xEt!+-{0B+v*n1LJ{-z+_+=FcX*q%m-S5 zHefNZ6j%;?7#2Z6)DQQ$am5;y~# z2QC7afvdoE;3m)o+y(9fe*uqyC%`k{AK(@626zvA1U>;@Jl#ECdwO~Lc)s;eJTwo( z!}72_91qvS^CWqM9+5}tk$Y60bdT1f_w@JVdGbAl9+RiUQ|77km_0U+!{hP*9+#lk$9kuF=XsZT zw|KXCcY61DJG}?IhrMUKkGwCv|9angKh)A{CAFH`oZ6CFORcTeQ(IRH*7|GV+EKNe zYJaWWQoF5oXYHQa&e{XDhii}3o~%7xd#?6k?TfnZb^Yq1>R5HWIze4ZoxDy{ms4l( z4e<^04fl=kjq)}5#`?zlCi*7(ruwG)X8LCP=K8+#E$}V!E%hz;b@&ip$cOm|U&OcC zx5l^5x52m3x5>BJx5c;3x6`-B_lIx4@1XCn@2KyD@09P1@4WA#@3QZz?}qP|?~d=D z?@!-D-(%ks-*ewTzE{3CzIVQlzE8d{U^lP_*c0px_64IrDo6(zAQNPR9FPn0z$7pQ z6oC>@1}Z=mr~xy;EKm>j2MwSREC7qZVz3OX0INVVXa(({3mgb~z&dac=m%kNFgO$( z4vqjvfsNo8a4a|;oCr<^r-IYLS>Rl7KG+Jjfs4UqU^}=1M8TCH4u-*1;A(IUxE}lw z{0aO8+zf63w}Css-QZrZ6Fdf<9Q0w(r$Jw!Zcq>C8>lzb528SHhyk&nI4A*1g!oVr zlmdw$2_%CQkP6a38Bi9K4fTiepnRwZDu&9S3aA>gLUzan0Z=XEg9br<2!@70!=MIe zBs3aog2qAo&4T7a^PvUMB4`P;99jXP&`Jo0NN5%G1GE-e5B&)J1Z{$T zg|W}uv_*s6oKi<#v^Zm*GRKLV8^DF!+f4V=@pXJy4bNmK> zzQ4#{>@V|I`m6m`zuoWjyZwN_*6;HV@(27u{}6w@zrjD&KOwLtus*Ocuqm)Pur;tf zuq&`PurF{ha3pX%a4K*%a3OFxa4m2%a651>@F4Ig@Feg&@G|f^@GkH%@EPs~e+~D7 z`@&H$4Q9YBI1WyLd2kXegvGE7R={dF1I~i8;au1V7s3PJQn&)HhOMw2cEJE#3xlv9 z4#Gp>;qXYf5pIUZ!!7U>cse{2o(<1~Tj4f%3A`L$0f%55CgJblHSl_PBfJUT3~zlWfFHq6;OFp5_%-|v{s?~#b_;$T>=o=A zj0)0%j36r*7fcB9f=NMPP#ly66+v|{BbXJ;4(0}p!NTBxU}>--SRJ$m?Lk)%2-XI{ zpg-6Zd^NcD;K1PVLtYH+Idti;YxTYA)9Q`&1M830|2Ld5938%Hc<1n|4MQ7#X}I0+ z_lRC2L?hBi{4!$y$nGN(MruY*8ATbT7*#s@NaM}MH%-Y+`X*!3jHWeBKaIIM=1Fr_ z^MGb=^XTT)%{!aVH@_K69oIhYmvOtsUmpK-!lH>e6H6urCpJ!8Iq_3VpO)yBxR&;o z?UTAsqE1>eY0ad~lS?LBCl8(ynsRCCmZ_hoJ(}KahGItXjB_*TGyBhU&m23e=d9>i ziL-38Cd{_XUN(E)Iy@b99lnks9rZ{uB1A-p6pe7MV=%7Ag_=&$a~~JO%*i0W^pXLF>^5bQIc% zjzPzv6VXZN6m&W|3!Q_`LtD`{bTPUNZAVw2D2kzBG=hGQ{(!DU*P|QJP3UHHE4mHc zf$m24qMhgg^bmR!J&vA4PowA1i|A$a8hQimLhqt~q7Tu>=u`9s`V##YeS^M7|3klo zx`nnc98+QGm=@Dx{jof(05f4FSUFaOS+E++i4DZO zm=A+67#o7sV5C4MKi6T65`;s9}& zI7XZxP7&vcE5uFWHgS)5NIWH85U+_3#Ha9A;U3|h;XdJS!}M@Wm=%r-CxivzlyGWT z7FLDR!@6*GI5%tz7lup1<7V$!)ULLvl$TnL?(L5>i2`$aGRm>c||@Ko*iEWI1UjZKQ*A zleHvB`pF@#&&ikMYw{iWf&3ErI?^XXi7+Cp2rnXt zq(nrKw1_g25y^`5j~F7xh$&JMsf<`7&WI;c7a0@@Lf|*7&Qc4l~=+O%FLU1eMhVH;_Rx2m(u3avF!-W_Q@xnPp~{C|YFz#hhIu zvVa&6^O+SR=70&rQ_fS*z?tJ2{=Zi}vpbtO&b#k^-~GSaA57?}uJGQgmtXag%1Aho z%*}lb2vA_4fC?ITA!}~06;3=6jzwqoO2#VZ^$Nv{%fc(1_}pHxCCi-RWTGXI^_yM+ z9XyLBj_&JTED0q;oCNI_g+-H`)lSK%)J;46>^d;O2YJvR2E#}g17l$VOomI~YPbn* zgWKT+coE)!H(?*V3-7@J_%pl*e}PZoGx!3&gCF51_#6C26k-q`X-$qIy-5z~L-I&I zDIkN$@uZMUB{Rr8GM_9UOG%96lS)!WR*{p)I&um*lUzV9Bo~pZ$QH7dY$H3!t>kWU z4|#++_)BW@v`XT*@en!8hKhPf;WsG^4mszY0 zYs4qM1VYzZr6QI=pywvL_5PGP6B zv)BdfQg#`;j%{Msvu$h#yOsTc-OKJ{53?uPQ|u-7GJA!+!QN#1*#Y(m`;>j5*h)7g zpd6*-DtSsjWw27HOjTwmbCq%>p(K^n%E^jQ&QdliXDjC^7b({$*DBX5+msuW8 zyOjr&2bCw37nD89Ysy|_pYmtrW96^P=gL>g_sS2--;`gJUsb9y)uY;K8?~((P`j%= z)n010dbE11nydC#hpES@dsQvHGR@mHLhPt@@Kj zG^!bzPcyZaS|=@_b=Qv6j?wb90&SRfoHjxmsg2VnYg4q@+8k}Jwn$s76>F2VWm-Z@ zYE{}A?G%k`XK3rSv$YGf3$@F%tF)`N>$T0=4caZ*4($%@KJ9+(aqS81N$pwfCG9os zb#0&auJ)n!k@mUvh4!uXo%W;lllGgg>AG&|Ep%INqj%Ih=>fgFek94)kJWSa{`z!% zhF+x4)aU4P^?CYYeTiPFC-rsu>G~P^x%zqfrTS(1wfc4XHvI;Dr+%A$yMCvBm;Rvs zq`q5!Mt@%4qraga(Ep-;tbeJ0rT?h^NDe*X-h^NAn^i+9H@~rcm?m5GAj((fxT+ex)OFUP5 zYCKy!w|I7V?(*F2dC2py=Sj~~o)`7oJTG}(_PpxZ<9SV=<9XflhG(y5pXXiApFJOV zKJk3&`NF%wd#U#_@8!5MZ?$)mcf0o%?+)*6-ut}wdmr#V?0w4nwD&ph^WGP{FT1^X zU-7;QgS@YM-^_{{nsKdhow3Qd-q>u^7+Z|3#x~;yW4m#qag%Ygaf`9TxYgKc+-BTv z++o~l+-2Nt+++N~xYxMPxZildc+hyrc-VNvc+}WsJZ3y@JYhU(JY_s>>^7b;o;98` zo;O}FUNl}ZUN&AaUN!a@uNki!Zy0YHZy9@yea73ye&ZeEkH)*kd&U9dPsaPkpN$WU z4~>tEzZf4IpBSGSpBV>@zZ#z#Ul?B+Um0H;-x%K--x=Qpc zfj-+ueALH$icj@vKHcZ>d3{+v!{_svKFim_XZ!rVmcCZL*1k5rw!U`0_P!3jj=oO5 z&b}_buD))*fUmo+hp(rvm+uJQk-npRy?xofqkYHta(sP!eSOFJa(xB90cI=n3-e3! zEAwmf8}nQ9JM(+<2lGesC-ZOS&*m@YujX$SSj3_hvlL6UG)uQUmeR@%WI$52qE>>5on-#FSTRp6vRxj%a>qzS;tGAVH9c>+B z;R3sx{4;Zq2ZYteMs}mRoot+m@>ul>B>s;$R>wN11>q6@y>tgE?>r(47>vHP~tJ=EK zy2`rRy2iTJy3X2UU2ko+YOF2RR%@GegSFkd(YndH*}BErVclx&v~II*x9+g+wC=L* zw(hb1VBKroXWef-U_EF(WIb#>Vm)f@vL3S@x1O+`w4Sn_wsu?3SkGH8S+CCO6|IUy z-nCnT2^O>f8~o4`T0v`Q18t!lw1*DR5jsI<=mK4#8w8*`^njkw3yy#z;V9@0*>E%* z13AzK`ogi0JG-!GMl6<`-K#hfN+cE)7EN`<`Xpy{LJIIPc-=|N4n?Y*M9}U~STw4* z*hwV9OTv+Ga`n`3N$R&ng+*gx(Wq0L49B901%*Y0p$bR#v!JkOd^}X)tc=CWv6b5+ zjxfKl2s^-!i&8fZ`aNJxM4^Cpf`ym>taBAQ<7!D&OHl|c1LrWq~k?dt|VNvY|ce!pqqhR!A z7!4y97Z#1FN+e?y?vFv+o;Z3;tT+~`#Rg7o9E^wK=NA^GbhiZeY;wDq2q)CQ2`~vp zEG(=Y*h$VREGlx6?wwPhkPq2ukAtZ&4W`2kD1w; zEP-Mu0SA^sDU?ANmO(j0paP;0gGyKqaY#TCs$d1IgjKK_*1%dg3D&{Ma0+k`a4MVz zr^6Yr9yY+4a29NYv*8>#7tVw8;R3i2E`p1B7VpjlKaHQk&*A6s3;0F+a()fJj&J2R z@LTvD{4Rbs{{w%RKf<5l&+}LLYy2%ivIOx7(pr$Vg0vT;s~`bEjufP~AR`1BCCCIp z3I&-VNRc4(1vycWC4!U*5*DOfkP1Pff>a8!T#$qyRf4P#WR)N%3v!AeT#!=*IZcpr z1i46%iv_t#3n`hD~q` z?0{QgC)_X}n=iq}2@ZnXEyzoPJRG#!u3eiqC?}BDZ}7UDz}kMfgL4A;1?$%R5$*sB z?u5JGZny{j0QbUua6dc%55hz6FgyZ}!Y+6W9)~C3N!SHX!)~||o`vV&dE8M>BqApp zv|AMxjfy0lcr=uB#>ApYCz_PpBNnd+MJ85+N}ZtHvao2H6A#Bq!o?G#NhiJ{6j@wY zG`cF8j74QP`I2wc_LI8JHCVq>2Wq1W%g+1^Zygs|Is3^P!5s6G@Zeh_a`8fwy<>{1`sj44>egtmOOesSA=314l6ui$I=2EK(6bJLy9b8&}g zLIL5dTp*X{ZUvkpGV33>%DXO_o0o@#6puwBC{Q{&ayJB*Rz)I-;<)2PgT-Z`XsJ^& z#2xWx_@xGZfnRYEZ3>GD!%I@P*9xh{>8mIYWAWMzPJj^TMi}S32dDg$*T5nwyi7Er z6A$r{tT}~6GsDSHS^Pv*VmP6>shcs0d*iN%L(B`t_e{G=sm z#gE{Hd^TUqSMCFgv>_^KOWKk4qyyJxEW|ix6_8BUjG z&*4Y51RH>NY#&^6RjFk<`kD#gyQ9yjdEq9 zqb0>*BROzUGL&={C)`E2lrba|sNKi_GLR4BNAfAWPa1AR_>f!3P%?}hM~0ITWF#3y zMw2mQEEz|}^S(Tf_v8KfaeO!*#YgjT{CGZ*pYSGPDg&Nf$i!MmcICPJSl&^tE@$@C zioo2wJV_~J8kxSCOotKk>(Kd@>?jj8UC2xlAhS|v!Orq|f!i6%>}W|M8IDB4(NZVg zw{PF+If!0F?n2UzEUHCt7uZDtupM^6_H<8+3X3Ktik!+&Jd}*Z7vi_E;e_P$JePO$ z;y=WQ?6E0=DI?(wg6T>SrGxl@^iui2c{7(eQ74gfki=^#IZP5H$%pX)d?+8B2Kq`q z#8oWFYO{xTur)=Ye|4ym!2W1nN?UcGgQiR`4~RdouqyAyrS}DRS~4R>19nVayvP@ zt_z;a$ERxv?8lKB1q>(>&b~q6TMIz4cTy0Ym-9-ZAvGiJb zE}z6FyK9_V6sbze1ukD0bX8{u=>o@Yig2GJ&u7e>kXLvvpU$VI=H7!(n?EfcD~*RL zDxCNp33lYb&yzR!Fg}&fNYm_IK4df5N8aW|eCFXU^SOFNH@&H4ev~mcY(6VBuj%t< zh9i}sMBl!Bn_JlD=|G=+iBc`jeb7fB4vn>{I38Fu2+i<_Al&7wx;%&5(Cd58yVXLjQ3+2LqO zm6O3Js6pG%wtN^5@)dkZYI?K-A95q@NITKavoj%Rtxx9osa{8g7$yMdkS2lG^UlO3lX53QB%iLS$ObJKB6;6D5Q!JYf ztXr%cX<2Hap_%hzv5Lba7I|kK9}YD&zX^0AJt1R$6)nLg9v*ck8MAFT9vp~56db64 zQpu}UKp3J>0#)EZeENw^bvuI=(U}?DR%4Ki}UP4#WRdw?rgs$Vcd<|b! zOW3O&m;lS*Lx@0SEia*~=&5`dU&Ys^$@&aFDP76hyNZpMD=w_&2SaNw$&O ze0|LB0^{Kah)BtvfYs7DfqTq>BqXHl56NpG>9mML1VXSHVo(Li1&P(s;$XS6x*}AW z3CwERnLZ`~ALi#SToa2`GzIc%x|!~lt=9AN7gxrerHNV#q_#H#a3xgJ7dht!@4_z( z+Wtm%OKoF`^F66fFXrbrKnHpb=v#EJ>p75?|0VoVFZTuQHm)r{px~c?^82ux?r8+& z%ec)i4%+QU$E!*MiPeduQ{f~Nfl$ecP&^Tl8f7gJR?|;XlfReN+{NYo4nGC`4R+H{8ZGW>Zu2W* z_7Io~l~5u{!~x`)(_jWngemY8%z$wafZoyv7KU;NKv?qBFqA-2vh-}ofdE9|19>O< z$P$vsN>gOF0wS_q06vuLJ`N5fpl^MwcVxOGrDA^VqT)y_;WVN+0?dGFW^&Fq@h*Hz z1LDBF%KWTl#$LUiZ}##HwZt)a;O{36)){s)qY?aSxXm}k?C!Pdce24|E0rr>0S+t! zCqoghl8|s=EqQ0qwp06}+*$3QYbTKjpl)P5J3_Lz6Zp3INhe-`UN@(1pW)VFN3&xj z5V!N2o8aH9Zyo<;`8=23l;Ynv*2)9&JR2Z&%h$_bqMRbSI>QhN92vCjP-SHzC_THu zL|H6@{}NzBp_(1XIp4v%@Y@@r<{)fgquA&S(!Z7O^zv%S9+9;3`b!^N!Qer^gSOdZ z*v*DE!p&{m<~w3`UL)FWjzTl3covL>NiZ2E!Zav?2{08V!&n$6cSB)AN)FncB_l14 zge#ZCLh+JdG8U{1C6bQ(Rv(X}*({02(frO?W#N*BC^S+GWD`HX_C5k+Bvi8#Ip@Q9 z7k*FBZkvpimPYFNe!@vddf=pomH;b(YPOVfelPFBA8LRQRt8(xGFFZVVP*V2-kIOe zAMo<~8t@{voW*N-(T{?BRwvI2{s~UY*1&F7(ga+}{9vwOo#X|1B1LjU4Yh(R2d zq;y3GB9KUJ9BIc&)`PNch4ey}OMhep!gAvwgNn~jZLDN*eIZBQPHmT&{N@Z;v-MET z&g7gw%DeC<8$xa)Y+>iHb0y?9@?E?$e~drw<+~a}?qYUHE#y8HWWNi!{yBmCy!?NH z4P6bp+4@G1dxG2i(V*RVQY2g+2$wq1s8bQB3?&lb6;5D&Z093PwIOi|$F8q}SP?8L87key&!M(^|k_@iRTFKxBOZD$} z^0((ZjL8xY*bI$kjE`oU9wOhe8>`SoNSL|!{4f~dT$G&GjupeO)`w6aRe`7zx zX7&sFmHh_KDWDLADh#$Os-h{n;(;3!FKkx~#m9bAETu)z?p9bdHXbT14M$7eAOSk3 z$H(G@vFPMjaVRpcuxO?m$y!)gG{Fg#IB_>J<1Z{49V#v_jmN5@C1YZdSX@SiMnxjA zm5G_FE1e=I;uI$_U=xc+(|5HiERr#!VkZ(Qstgr}qos4gCCM@w{2mjFR8>SrRV8C_ zClOwQQ%bImI6=F8sXlp@R*@~bo{a)aE1)=-^-#dS8L2h17AaC%Xb*^=XWUyK3uJllP!VO9< zr3X8>AhlZA(L4NI{zv`}-`o5=k5<|%$0!{Yit|)xYV6K}cH;ZpVfW8V4Lfk1G?0~i zrC^Iv;0B3gv_pcoj$G1mW)o~y+9(5*fpCM;h9BVX^FQ$ee}rq4AsA~_hO+OJVQ{l@ zoNPE;X|0S2jV#SAEJ~zen0A^_ z$3()Fxaft2MQ*cE6-h+)?DS2kXrmKNVlzQ3K|2WARnRVWK7WtDBdC9>ZI227$p2RW z;D0}9DVw(8`}n?~-FofX0yL0wQ9$Mm$O+^PT$cjNG-di0Wx5NNMZwISkm4Q6Og^MW znWfBD=I{^r_xx}BlzCt&^OXh4LS>P%SP3d8D&1kbvP3CXN)$&~s+1~au$>)Ti~)xk zxJ?|Sqs{mCAB> zPKhJsIjfSApj#^9SKy!XkNHRZFZ|P)g`pMFgigg?l@;)svI>K&N4oon`~AMod%#lG zC~K9Il%>i#$x0%zIPwh)*Uu>nCmsIDq};v*_?JI;Fu2rsio!Q597fDRh(}`a*TGV_ zvPL;oIZZi9IYU{mY*5a`xHtZY0aT=eP%;#WmCA7HC;YFr#t-t(W*14zIcT>ilbo-1 zF`4r^mwz%kH#PG4$^~1M3zQ4p;A+F2fQXP`IP7P9*ol{70l0o`elP_a`Mi%3n_@^AT9{7Y{0y?zCFNB;FZ>^^{9 zXHIhy|73I?GzP^MyJb&&va=J_If_X>vpLNqVdn>m8PY1W*3Dsr)sKn%m`u%(yD>ptBiy#s-gN+6SgZO1+jQ%L0Sl6 z`-#^ph~)~ao24i{26m{e;0Cp|>)N8WpxuIYyR~Zz`sJe7mCmiay!@O%LH@dR@1&A& znoq%bT+v~-+EMKUyHyRIRlBO)q;J#~C{+CTZnpFc0+7nZ`cp^#HhXNa0pO z;m1<*p<3<7xgZ@-746ahs%T@XgVe!wHl`pQ1?lAFyK1e-yxf1nnWc__-D-YAgF=wb z2(%6{yETl57?eYmG?*%7tR@Ppr30&8%qD2JS{f^^N(5ukVANTeT53IufQ(cpOMna) zq+8H#*~oEGM{WevX;7`sK)`fIz#P#OU}mdxG6B;=ke>Ab(?8`U{XLF$H3YlWX^jEX z3jxzTX1A;dn58MVyK7}uNN_n2tp&=`nAG5d6|t%W#uL-78L|(m)n%OXB3$HAizNvr z()kay4dw2Ox$YoAvKu*+p+-%pNwq3%nhP>qkfQ}TMq1}>*RCDdFDHYQ`RG_1 zux=e%J$I;U)U|LY+znPL!R>xB9Uf3mQrD>`W11W31P`mHz;;E4UFxaoX^O6%uATwA z)eUM)Sqj@>yLz^ArFxEfZqV*nmokDGd`@w4R3uy)t#G1ADWFHi~Vu>(jL%CUK zac8L$k2@vfN>Vv+vl31MQ;5dLV-*ZNKG>7rgy=O0zi zQLj;aiar;ma=g?@&cQ6!P|^|P7@jLguIoA#ThtBe&FU@c4!PWZf(#U7 z$lJ}V16Of-y;av{EsR9{0g`Wj}ppEm{bh+)k9#Y`m*}UHuV+t)pVwvR0gLZ z9P1M97T1v>s%!3zuc@zZQ(v!3x?5D3d0Xv9BS3zIYIPsyd;#vrk&96bO7}s1ud3XU z@2c-1KNDoMAjdagP*NWLS^c1%JRBp)SQLgC!p`+}|HH!Wp!!$Xt-f1d*o_xt9PWkD zv&JuT;?WFZ585p=rJECRGDRB!^?RsRe?)FO5!W-N!D7&s2(wb6}9cQGz*LD23vuA(a9!~+#oi9m%@5=h3KKzTG& zS?RvqBttralnCN@`F;OTLc3N8yR{P=FKsC^n!68c_a1gg*K4Osb@C)Z zBJ)<|NGV*S4+!aUd(#?$++fWaVoFS(^^Q=3($AKNXky zJ!KHuqp(}s*_dihLaJFEv)k4N$T34D3gr-o7(`_#2i0c`;9zE|j5P=C77eJO9to(^ z(&+8p08(sy3WSel{6K&Vg=%dN=e#e%Ml43E31Ko&W9iO@rh3>>uLo^ERBL}k@Scuc zG)faXs2$M$q`jX8uOJ%*IYW^3Y54Xl$O+`-_eZy8!61wQ4qCVFtp?5s^m<&XeXM<= zEZ6pH2bHVQ0db}v8~9%YIlU!}1mIuC?De&fL|NzN(_u;m=Fz2M^)mYD!qbhAq6{pP zmKz4ZFy9XED2MV|iw<*x>%wFKSOvwhmr7UyF$h5%N@Oos2o;7(s7x6>7>&i`4h*w} zYLhzxwdr8#m~2w=dAD6U7a60w6>{bn&`U~X8Gl2%z}}WZ0IHy*cFY8nK}^=1U_ZF_ zzKvWi+Sj!%m$Ue13sVjk>1L5Cq4vG@!&dEwv^yl_Rh16J`I6?6&Z=ZyEx8fUeuir8 zSH%3ei1`Z}Z7l78PIXof^XCb2ep*SAnD2Kuh}W}}<=W2~h`#_4e=g#DAxwi(2ti+o zB?n3&E>md|at9%%UC3f$PC5~+j9VBl(UXV+IcH62ba@SFj zNOQbZ>j>3)H$>1hM9`Hp-8_6O7@VT_UmNhYY^PyUoZk(%m7eVQ}b_;y~So%PHkUm%+q7T)F>Bs5A^%43= zeUv_0AES@e$LZtsPv)H$Regi={seK&b-2+IWuKEr}nxmZEa$Na5Oc7n{J9D z%)=~BIk2?d-5=0_8IG1pJIuWzql*|0!S-%97##{b?pT7<2ucLGUXWh|1wpQDIc*hy zAlC`9S&(Z4`Av{t1=$p|+pk?)kT)2efP-Y3#GrmTfr8vY>(&Kr|J=O1KHGSh`#$F&80`{m{j%6E<_7?cyp__A*P+JbzvSNi3yYv7;M7s3ttqEzbL z7D0Yanc@10m=ue-o%=B)sTZ@a;9A%#!;){qX1zpr^s#!WUIx$UVc4z9yc&HhY}aFM zd=%#-YosL5Wngz^yee88N;)O7R5BqewA?taQ!+DDdj~>}{7sNQ2yzd~(rsQrYP^En zo1R)6r?!o6NPl0!hiubE>#OwD%+S};&4MftWV;}@@J)i;#@9DwVB53%dx5a4m1^zabbqx2PtFE6(}g=%B2u;*&2#GS1h8iXvi4rGb+5dakdDK(*vf+ zQP7X$=8=bCsZ1`4Ll1c$GD1wPbu&xS%-DgxO+orX{i1r1-XX}XX{!Vwoi{)#VNyxx zm%r{1psrSy>#OU5dMASV78lfOU_we(24ECK+&n0VrqX9tKpzRnI@vu*Cf8tk4eAlG zS_Gk#MLzFH@F196q}1sVu14VM5^>qW&DTl;B?RRXL6`#RBEpq9*i$-%)Geq+BxULo z>2_sOcX015musk$@&>D&YMrjo7qXfH_-4JP9>8xGK^_p~KIAQ1rAB){jxqoS>Q8fJdftMG(UN2+k&K3;rBX-JpVgn+ ztUs5Ih^BdG!%<&^8ae8#vipa)FWvpi>F!_W%Jls7ir(Tww$nZOJ~gKA*WZCFS&jZ4 zzgUn*1j!cUaY3Hu27g+R#tCrR0sYVV2S`Pj04Evbqk`}v zPCQWJEDcAUxRVTo1Cv*mI7^p0;~w9WTAkLmF;aoPkI4==El>TM#$huP_KUg!R+zh8+lF55s;!tK`F4(SWQTw<_8uNy+QdN$;-KjbaHm zXI%1II=dAcdf_4n#6^+jCjbM8`? zq)bMXXX%Ne`HgJ8PrZO1N-<<)6Eus4Gbq_}`5j}O_d?er9| z2k0m2_iU)PU;9~*)q=dnU*K1uBYcM-rwej!1AL){?>Wvh9Px$48wU z#|BB2Rg&f*EPT&6Wx1yy!_a#ZarGK%NM~eV3e7fjVW&m13$Y&ZdS$H!lEzoMw6_#~ zs5R^mnhm)pUFerOaxVzE@@h}yNU@r7&*6og}fs3QG(b;_F={T7+@3uz4 z-nhbK2~@#SSejB3`YxPWnZQ#&lA#q5ryNL-MHQ%$4KPt#Of^-+;fFK*!(dm#dxvfML21NeVN;2%KX_pBGl z&-9yQf&eGmFvySGy{=Tx^sx<|YTy!PTDhJnKe^t+Q0ioZ1gwC*kPUt3 zxE0)(tXQX|vNFjrE*9hgeqWkh{FIgpm+>K6wG&y1r`mI+=PC@b+$+dILB15^+lELk z(++s9^K6n7T84dX6y&dheD3A$h!;Tv`*u`?Q8lmR~Wx1!ip6LDpF@4Y#-M7`^ zIxV>CYZwUI#yFXqDwsfjDZ)GntD#S=+2CT*74wLh66sq+!xaq?6wavipr;j;fC+L( zAikQaEyePvKC%xNk64*gzswJ3xJ0s%G+QW<{$96b+LUqUghd*wrH9vLHSX##E`Tf& z=^<@8xi;qE8~CV+r5REt1RLsQ61lf|Zm);juLSv8BDamJf(}YK@>4swdEDNsEcaYl z54YbSZohPKyFCN8u1IvD(6nm(ni{y)7wHx(2LB3CKRP+M&$xGE`_xpS1#52lr&sFu1`2!;JTNjywVQdCjyUYp+ z4dpY+(6nC&5%4cEDdrW0%gdd3nNuRoX3s17!&~%+T?2pq+FHk{EPu^SC)M}EWXnMV z2d%4hgAT}FC*!Cxu;}*mrsu8Ap0`q`X1NaDnNCGzB$RYg@yALmqp#=EXCkXlun2s70 z^YbO=_I&C2O3)*B+Ly4=l64DhCmBaSVP*P0ZK7u(E1}!Gps%JY$p|$@J9{?K_39jb zt^SVkjAuFdRcoR8)M>PvLP;5G30IQm^n3Lq^ccO79H-vwnNJV08qaVx)H9c~AS2mh zG~j8^%9T0fbEsA(X&trq^^26-X%DSbAFKUL_bRj0UzOQpG&A(~v=coAp4;gj+SNOX z-K5>a)@!5LM)iC4E<0Bj>IOYuap-1cq`E_YfE}b=$WSs0YP9{ND;Y!lG)t`_t+ZoV zzFtG#hHZp+Lh3F0cXWr+M$K0T>-Vegs^^fF>IY;PvGrACtmi5+o_6=>`hNNa8Lr>w zd5m^aM$wL1HhVy4s>Y5c`}7a^&a_=Cdku*fFSQ#1^xj48=r>+(ME<>)(dhg|A|)#;z)n@x%^W8fgqFk_k1+Et)CO5 zSdiBQ`I=wMBZBtg&j_*>_4oy-o=@a&@W%zYNhZi$&A;I5v8aR$5#&?8mzVRtd=&a^ zPUks%9G}fYn02;NklFl3LGIu)xy5@3@~%v*ds2|C+%*e2NoUt+L5}5%1sTipcp-YS zkH;;40#69?47xL};{Byx?0ddc&r|n|zRhVa}sqZRnv}~E_JsP1fGo>DRH}fG| z*>B1uWt7rGQTaYZ9PPm0;qRqe+{A}m&kpjvZn3?r+`(XXx}wUh;_=?<-MPiPGsU9t z{86{6=qNl+F7MrNgZCb#jrZPp@|?tCCz|93u!yR?pltpyks(uOpL}#TP)>Tw=h@|OBX4*=i+%E^gguJ`%pRtjHg4UDxdbI z=b;R3Fq6j=JvEmnYiH0gHG>a5C0N&!UU`1XYa^H5zt*MdeTEOYUZH${&~CMMZC;8W zyR8NymfEhB0x4gjuK*9G%tymga%As|-j}v`UvdFgTZ4t3(fMopr7=BM<~3AS%H+{} zDDb|rP!u-Z;EXWWo4|)vydJnUFkvn0jNPH#me*;bfeoyE7BEe zXqKm%u2iSdZBV1k@ysWmYaLaMZKPRB8#0_3P(y6GL+eO)(9NW)dJfyD-v>3G0(y{b zB!qNj56~?AJyyaF57tK;e z(u3O1%1D+^p40d79sE9IlppYFo`de6Pm!Z6;JfhRy`1t5d?nA}K4dNj`5NSm8@P}E z4SC=^$>U7Ei--6D-k)#cK4c|Z<>jq>J^6*HQe~&*D3vxBD<`-lA;zYie=g0x?!?}Hl^WYR&?`pma{qFmCHNO%0<#rs3 z@()sc{#eQGc!=lVBp&3|{0N@IdmzKhMy5DZAVa^6Pv-`X{*Fv{eq8cs3uoLxF2h2G z+Cz}h^4<+Rhu_C@aE?!NAHM>7-ik~US0BO}k!nHC#rGRgW;~Lj$gE09k(auHT-!-M zA>%wEEy%q5ZP@tVX@r73Eq-GLiMbbB)pzy#4_B0{8Vd7=>jC^gEAu(8Z2HzG!b5jA2)rLo+I8wn$6R2eIbmBuP# zHSrj0jgyRZ#>vJh1~-Ips&Sfex^afF-q>KAX`E$jG|o28G0rv4GtM_IFfKGMGA=eQ zF)lSOGcGr-Fsh9!jjN2SjcWuwTF_$z%@MSZpnU~BR?u8Q^90Qov_Q~)g7z15fS>~f z9VF;rL5B!BRM2699w+ELC{HpP8M{E zpoM}?6?B@Q(*>O&Xpx{Z1)U}6Y(eJ;I#E~CA_Pk z#e$Xy>Ik}2&{9Fm1Pu$iOwe*cBZ5{48Wl7qXr-Xb1&s@u5Hu-hm7psGT`A})L01d9 zM$ol_o+RixK~EO+6hXP5LeNtMJx$Ql1wBL1^@45?^h`m|5_F@WXA63cpyvvDo}lLo zdV!!93VM;C7YllcpqC1InV^>odWE3Xyr-a73VM~GR||TLpw|j|ouHcpyc1{1iKtVceF7xssJ7zx& zMbcS>7IiTMqyunO%59i-L;Tl8_CMkxL-5~o2=Lc=2%GZ*xo!}||9`z$O=n7Gc(D-N zJz$J`fFKIHc>lBltp@y&G8aL4`|4ts;_1+^zU_sNUdn=^JWI`=W| zh|bJR#**IGNLJ}Y=el_2KN25n>^Q`o@*f`Nfb7|50rtrc+H0{iF23-PB6GRU~6PhQaOl`hT*G`Kw@ zeL1C&^~+Fo3-AEi=C?^E8vhCMiP^^-0`R~4cyI*x<%h8eT+AZX{2xzRM1bMrg3&f< zXuJKJ&N4-+Z<|5Jb*Fq}$L!;pnOj4H@PEXGbKxQO!M{%T{|`=uMAWs&K;7KDyzIGS zQ<)Gk`-oP%a_f6#8@@^<$K&p>bYkhScXo&1Nkep==HkIO8_ zO*`Na?DJo4NG*1SQtAmfC|qYd@npC-6bYmw(J_1YA!gKYyEgAl&Gfl8x2e&e+sNN~ z#bM(Vrgy~*bHi6Um|FRGrw{Dk1XqadPo^u!={Xc0%XQ)d9f_AI=+z1ah z&0d(QftG4p%wBc~N%9|BDUSqnWIYq0x#x{!2kjp98a8zxOLow1S09e)Gd`tTxOqFY zA!})lX}Gl_|MZbdxa>9=BCqxdaoI7uPczC&THgIrc0}bNNT^Po{STIDK|3HHPZ<~; zTNP-UMq>8GhXsZID)sjLhsC?Gb_8>q{~HHu{EUu&IGY<;L$3@HZk8X$?9R<-#(&St zk-Z?}RFRlH`Vf5a-)6nV>|TeMMw<5>Rsb+)_s)Rdp`Hzb!Y8BYAwoEA*r6b1k8OrK z|JwyfhW0QxXdhiqG#+xzG5f5;*wtyv^zTWV|1XZLKvSqWmv*DmOd)$d9_5;lC$Rh- z^*1kQ_jL6UbR7nyR+ke<>m)gWl+C#~Q_sVjIy7*$)s{SD$L#E8DDaNcLDm!LhdKjxt^V@$u>El1#6WD#Ue1xe}l5z^AIAB zXt%1TO{6>SoB@x9kG*fe$1;LQ?&%KA#Y@v<|9?cys83YsN3>_h?Bfq1I{)nzmPlKf z#Gih;I~vy+G|<$up0i{2#KYir|K^x|&~95VQ>>O-#Ow)&*oqBx`hQElU<1js%!xXQ zq=VbHa|5L?lZ9o+>`8|OceK>q8uX@J)^08KzpPkSvZ)N3Nj&Jm6SCvZ*XPV3eDU&DjWag2iADG!l!wK50>v6`~tb$?9uU8xMr45`9=fG-p zFrE|OmQrC&G+gYt3N|#ZiH7O4BUHIH(Xfym4X0t{IQ;|`k#VdH&ekTvO3y;N(z6LG z#-SUmN!N?J)#3_eEn%8|gl9NbiF@Wl5rkL`tY?p5QCVhvIB@NKI1d(Jjks2-%+h|w z>hSti;ZV*t!W<}J=R!gkP^{93D;GETqMYe zvVLoXAYIcXT(TIOdIb4akW-qj#^wTxu?uU9v2Wnp1*vk2-}x2%7CsTH<<60X??qVH zxkixBWyw2MIxfkqcdx5<-_JMm?y@HG4Y$bs06&BO0n6e}<}YD6T*Kn_N` zE8MXV?gLr;I0*~l8Wyw*(wgt$7xAaCnthZYH}OZX$a6ivP8PGb<>i6|+~T)!f<*aj zEPFeRTY^*w(mqwhE-TpI;;+i$%+dULLB`6m&l&t~emuWGka9t?1et)(XTQw8ab zb?Wm4NmsX-ZQQ+Xwl&+C?adBmN3)aJ+3aF=HM^Msv%A^D>}mEgk1&rkk1~6k+2+ya zF=me0$Lwn!Yv!7HX1-Zq_A~pN1I&TuAak%e#2ji4GmkTenu30 zH-&ksd762;d4{>(++dz*o@H({&o<97&o$38&o?hHFElSQFE%eRFEuYSFE_6+tIaFT ztIVs-Ys_oS>&_2y=?#@u3VHMf~JnA^=8&6~`d&0EYJ=B?&V^EUH#^A7V)^Dgsl z^B(gL=Dp^9=Kbaa=7Z)#=ELSA=A-5=^D*;r^9l1w^C|ObbGP}7`KC4U-!l)Ge=^@U|7?C>erSGV{>A** z{KWj!{LDOP{?+_k&|QK)Cg|gWJ|XCnf<7ha(}M06^cg{)74$hlpBMB6L0=T~B|%>n z^c6v06?BiFuL=6Ppl=BJrl4;Lx>wMBg1#;2enH<6^pAqRE9iTI9uV|Tg1#^4p9TFu z&<_RuNYK9s`mvy&2>Pj@p9y+U(7y`$xu9PN`lX;>3Hr65-w67xpx+7ly`Vn``lFyf z3Hmode-`u?L4OtWH^D$KA{Z5n38o093Z@CB3+55bD_E9bhG0IyOu;O{S_ozf<`=A` zV66meEm#}D+6vZAu=av=5UitModoMFSQo*%3f4`qfMDGP>mgWA!FmaHgkVPsc9dYf z1bSiy1y%M&bLumZvQ3D#e*0fG$_Y>;4s1sfvRP{D=?cAQ|t z1sfsQNWn%4Hd?STf{hhyoM7VxJ6^B}f=v|c1i>Z=Hd(MKf)xrjRj_G-O&4s2U`2w> z6l|7Yvjv+Y*j&Np2{vD_1%fRUY>{A#1q%vxqF^DxmIziXSczbcU`qun6|79Kuwcss zD;F#xScPCw!D50{3btIZxL^svl7dwUwnDI#f~^v4wP0%mTPxT}f~^zmWWi1mj0+|N zJ5{jL1Up@@GXz^N*apGQ6znX)HVSsOVCM*Su3+a0cD`U22zH@h7YTN;V3!DXsbH50 zcDZ0z2v#lFl`TQJbQ`{$i7!Qd;`fuJpRDwgpr3THU%;z(`ALPJ?65EJldbrD629Ey zCp+zH{G^|scC=6RlZ}4b#ZN3hInhsaKgsozMSgN8wp{P0E&XH^ew4S5w+H#j4SsTt zpInF+kG8*U3FORH_If|5^wVyBvH~w3@25TO7yYChzuf4jZT#eH{CKsWa6h@pPmlAH z-hR^6PeS$(Kkbgc?evpd?ZJMsz9o@#pSHlh{eF_?C&T^Z6hAr2PcFi?xBJN% z_&yz9uJY4f_@3t{C)urR;U}h_obM-V@uFj&X{*>x4?hujVT*klzMX;BI@#^~w6p!3 zpSHql*Wt@8e$vZN+xls1{C20Gtn!o9_^}3GcG#Et$rAkZ2kgM`lY#hUhM#P~@9q8M zWczu%@}Qrb<|oVjA3sm_lQaGJ zWD4cdd+}u{zHIi>fSACFesT-G=VBAnPlw}sTR%A( zFW!tVH~C36zHh)^I`~P#PdmuR3H|olZ@=IV_uKqt;(l_LpRDuKPWD2)81|FJ_+Ju5w@dM@zX;>?|kn7-K+yy?`M6G^-&L9WW&L7+ z!3@pt8a|_i(b8yRv^P2#U5)NWFXJfVXrqsjYZMp*jKRh*V}vo<7-vi{CK-jsbYrG5 z$Cz&{GEOv#jipA|h!`;=Zd4hojJ3we#`(rI#x~wU-R3Li9`g#IV&=sxiTOTeUCgeSLougfF2>x5xgYa9=3UJDn2)qRG&wDumPK>Z zs%fKXV`<}QwX{jJCfXtzP9td%+Dh6g+Gg5r+Fsf*+RwCKXs2kWX=iC~=w0X>dOTfC z&!Ri%rSyUHL3A%2p!?}V=pp)0`fz#;eH48heFl9deKx(3zJk7rzJ|VzzJY#_eujRN zew%)mexLr3{*3;D(VNki5yPM}m<%?9%iuGF3^5~)5zk0qe9g#ZJ&UVewd{EEj7ctBzIAn!=jKn$Buq&0>AWTF=_b+Roa++Qr(# z+Q({V9c2B&I>ma-`kVEP^@8=1^_umD-IblfR>xYD9?BlZ9>K0* zk7AEuk7Kv7m$6r{G4}Utf=#j4u{W^yuJAGjQxWBfzylAhtrQk z6e z=NRW_&M%x(oC};=oI9L*oClnzoadaEoY!0~m(LY)#oRb;3~NuZUwiJJD3Y{ ztGIsd5N?1woI8a(jXQ%olRKNcfV+?z<^I53&0Wh~&)vw~%-zb}&fUT7;9lll5LHn_!t>gqq$&?^LlK4G;G5>6A&5Y80N7B&j!2%Cga;VR); z;RfMm;WptZQ8!U{(O05gqCTR2BASRHVu{=$P*futB^o0dCz>FdDOw_0Dq1c=MPbo; z(SFeZ(IL?h(NChwqE68x(G$^A(Q|P>F-^=6v&0-RSIie{#Y4rz#Wmtl;xXcJ;tAr3 z;yQ7gc$IjKc%68Ic$4^)__X+}_`LXn_@cN&{7C#n{7n3h_;qZ**n-%iSZ8c$tSi>NstjE-oX^5LXu07&kX= zUR-lrOI&N*;<&cBWpUTyp2mHabdhwEbeDW3VM=6@BuR=yAyG<7B`%3uQZDgGDkPPX zpd=(2Dj6=BB3US*BvHu^lGT#6lH-ySl9Q5OC1)gOCFdo7#V5ok#wW+i<5T0);??om zcwPMR_+9ZQ;!no^8hWdc9C|Ic9(u7jhCiNGo%KoQEHM_ zNGqj-rJ%G*S}ld7wbDt_dg(N2gA|iqly*ojORq|=NpDDRN$*JSC1fV#CX^?55-JiZ z69y*?PpC;4l`tk@TtaKY;)J$@WeF=1(1dWp)`aZ|I}`RK>`(Yz)=x&0F=Q+mN5+#0 zWFlFt%p!Bj0GUr#ErVpRY=&&6Y__aXHdodpn=e}_yDqyayDhsbyDxhv>y$l`JxLst zI6AQ*aaQ7YiE|R05?3d#O!O^mc(s|CzHA+eVNoFsb^B}q`pZpN%SOU(uAb8 zq*Y04lGY_{NZOQiDCvCCg{0q;E+t(_x|4J-sWa(O(vxIPGA~(>EKC+B$0kdXrOC2n zU2cm`d7FHh{E+;J{FwZN{FMB({G9wZ`9=8+`9t|LMK=XsAykMJaf*0_ zR}oZaNt?se4oRryfiFIrW#+-%|fby_R|-^*?0~ zWglffB~8gtvXmU9P^na^l$pvbrCC{|9H{gutCho*KW%VYbsCfgrv=kOX+zUSq>W4)oi;gbPFho1b6O;A zW!kE=HEHY8+S87wolU!(c0KKpilt(!xGKI%s*Y(bd>ZIzlszY^2bw%}B^+xqh^N<73daAlb-Ks{_VKuJauHK>Et=^|@S9hrIs_(0xYr1Q` z()8B!)6g^mO|nL=QE4(YxtdaqR|9B#8ovh7Ow`nA>NV3e4H`ld(X7<0)~wTP)NImh z)g0HH(45ko(VW*j(n_>atxTJwm1~t+l~$`YXsud@)}?i8ztz@h>$Ow0)3r0TOSP-D zYqjgO8?{@s?b3^p`*Y(rUbPOF^$J6n3LS2S#gl?p6v~H|! zyslPPr>oaZ)2-6&*PYg#)t%Q}&~@nU>t5^L=-%l*=ssnLGGa60Gh`Xb87Ucx4130+ zjLjK`GcIKOnejT~Q^sd~7kxK<4}C9vUww?8p=awkdahoe7we^ZonEic)PJqd)sNNJ z>u2d3^>g*}^$YY1^^5dv`sMl`^sDvj^c(eu^cVHl^*8l@>HpEc(tk93Vd!S)Vd!PZ zG?)x#gVkU&*bVuHLW9##Y8YggZJ1+dGBg`n46TO6hNXrT2F$S1aNcmy&|$b@_``7B zaMN(daNqFI@Z9h&vqz>dQ<165{5rENvntb{IV3ZX8Op59oRisuA=otm9cH zvQB25&bpCxE9-97{j5K;KAY$!ripFhnFOX(Q<_O_N;m0E{Y@TIg~@9IO+J&~G}*Mp zw8ym1)NVRxI$}Cz`q^~Sbldco>9Of!c1$)so0ZMU=4TtSjoGGbOZL~J;ksZlinY}vur|k3Dce3wgKg{mTew_Wn+|~T0`73iTb6>N6Q#jzNNrYWN})`EPl%v%Q(vf%S20^WuB$k(qd_~EU|2~9Iza+ z9I^al`Pp*La@%s(a^LdM(rI~Td2jh>`JB@=CniUdBh5+7NzPH^6yy};ICIK!+&TSo z2IP#$S(URUXI;*QoJ~1fa<=E}$l0CqFz2ncm$i?zpOtQ9T4mNGYl>B2Raz}ptJP+; zTOC%9HE0c4hgyeQYpm0(Gpw_$-&yBcS6SCs*IPGPw_3MZf3%*q{%w6`{m1&+`o{X7 z_4C(VY;;?aEyb2GHq|!WHq%DhBDNoFYi#Rn8*H0w$88U7 zowmoer?%&|m$uirTXXm4p3Xg+dp`GKZb$CJ+|JxbxleMR*?Zarc9A{K9&eY~<@R)Y zhCRz}wp;BX`%wFEdyRdReT;paz1Ci5pJi{eFSDceu${2qus_P{mPgM^&eP{v^GfrA zd1LdY+`4OH{@^6Ka&4P{y+Jz^WWyb&;R83!qLs~rQ<6{Pe&gI z+rf1R93n@eBiWJR$aI(-7Khc5>&SEX9YY*J$G48*juDQLjz-4@$0o;C$B&Mkjy;Zj zj`o601*Zy57o01&P|#6uso+Y%i$ZQ8zfe>dR~TO?D@-a(DT*sH7v&V$it>sIiVBO0 zi-r`hF2oib;#Q{zl`W;iWQtMeOY zf2YSe$T`^Qb5=VcXTaIuoaJnEHaVM}3!Dp`Yn-Q@XPv(}e|KJTUUgn`-Y6+68CEi) zWK_x6k_jcXC6h{8OLms*F4(tV|uORtt*FTGWIxAb1=gVIlBva+Nyd6}|IRi-V|mFdggyS{YA zy5e0jSCUKaQo7VGqs!#7yYgKFU6n4t<#ScLhPVQ*kZYK0j;qPl>{{qr>{{Yl>e}o& z=lad{yX&&+s_VMz<~NVOdFy7l*>0X&;1;_j?gY2et#W6&v)m4Mq1)*$bGzLG+!gL| z?g{Qm?t1q$_jGrI8*}e>A8;Rb|KvXI{>6Q&|Hb~#`~TDbb^o{h-}nE}|5G`yJgYpr zJg3}NZZCI~7nZk{Zz|tXzP)^B`JVE<<@?JomcJ_hxBOlChw@JYx(w*%N%p8cd7c7K zk*CDt^7Qu%_JE#{XP9S%XOw5GXM$(3r_Hn6gL!Zd;h{WxJvTkKJ@-5hJ)NG%p1(cM zD#|NHRg9?^Uoo*_az%Z`)QY7Q`zqQi4pkhjI973@;$+3Im2s8k%A87DWnN`LWnpD; z<&erbl}(k+l?y8uRkl?wt6bsj=jD0hy$Y}1Tk0L;g}lSOqr5Y{Endglhpc;Sx7(jrbz;K`j7!8aCCIAzG$-q=#1~3a~1m*(sffis9umo5NEC)~^4B!9- ztOQmAYk~E^CSWVD9oPZv2KEB&z(L?Ja1=NOoB&P&zXE4~bHD|l1GoZQ18xAffV;p0 zpc8lmJOQ2oFMyZ8Yv3*L9{2=y0lR_S!Jc4mupdYRnIIeFfdWtj#(`2W5ljZ0kzE0F9stG=o;q2HL@VumCIuOF$Rs1_yux!9k!G1i@->2p9xI;4rWT91V^GYr#oi zJvbGd4$cH;gLA+pa6Z@qE&`W;OTiUj7{oyejDoAcHQ;)16SxK32JQe~g8zc=zz^VO zUsqpuUr%2jUyP68WBIr~flu!%@O|U!?;Gp`eL>&1zTv(a-)LW*uin?_o9mnJYw@-E z7W=|J+(-GMzJ0!*e5ZYveQ&F}R()C3qpDX`-zr)aqe@tnQDv(tuJTk>SIw?!teRUj zzpABbQPq;F@2hrH9jH1~b+qbO)gM(at3FhBuVz-qRwq|$s?)3W)j8Gn>XK@gzs_Ip zpX#6PpXs0NZ}iXg&-X9zxB3_R+x*M@s6Xt-{iHwQU+G`%U+drC-{jxo-{#-p-{s%y zZ}%VcANC*hAM^k0|HXgGf5v~_f6?FJzwH0Rf8Bq}f5(5{|Ipv*f8>ASf9ikkf9Zei zf8&4WfA9b3{|t47x!1zLCTJ_P9ohlyg7!k~&_U=hbQC%c zoq$e3XP|S?Z_w}14d^!952nFPm;>`+AuNU^uoO;&Q{Yrs1#94RSPy5yS+E(-fo-rI z&W8(OCtL=*;Q{bKxDp27D%cMXfdeoCe+v(TYv9rFICug)5uOZBfv3X_@NBpdZi45- zEpRKm7;b}?!zdhvahQUm@G5u>ydK^NZ-%$QJK$aLUU)xz5Izhag^$C(z`w$0;q&kX zxC6cn{{dfzZ^3uq`|v}!6MhUogct7}O@KNyZ;Pc?i;J?9l!4JXDNLQpg(i7=}#2^fWjqng55{twmG9(#M zAZdsO(IEyT3o#>BBp1m?3K1t#hPaUdNCo0WK%^QOf&`HeG7PCfMkC{pTBHt{f=owd zBHtl%k@-jqvIuEImLnK~BNVa{S&ghiHX>V)?Z{4K53(OQh#WzVAt#Vi$Qk53auK$2M>yc209a+jm|-v&}Os+U4$+{m!T`rFp8rj8bN#9q1MG5A+6l3%!HhM<1epp-<4K=nM1}`Ud?E z{fK>mb;EjKJ+a&N0hkZ-V=xxPLf9~@1{;ly!)mcQYzj6VYrtk<-(hpH`Pc$%A+{K6 z!+llSL_F)IGL)cO57>73xyMx`s9$CsXV?qu74|Ro7JH9<3V#vq7VaMI8SWkK7p8@oVRo1s7KFv& zxUe*w7)}W*!pg8ZoF2{yXNFB-OV}E=h3#QSxF}o_c7^+gJ>fxNZx{?$hrbOE#}n`* zT#hSoHJ*;^aU-6M=ioLx4==!r@lyO7yc{2hSKcVE#P{I)@q_pg{1|=$KZT#c&*K;I zOZZj%I(`eki$B0S@yGa6{006Be}n&re-KEhAH1VRiYMi8TjvBU&o5>Zb~BN~X= z#2jKCv4ChLmJrJbl=z+?i72s(SW9dmHWS;39mH;8A8~*eO@S)`e?lDT9)Sx7p`GSW>BAS*~O36j<15Hd)9OAaSTl4Hp6Lqk}JqCNstlp2XYO$p4>!kC3lkh$V22&@;Lbm`73#rJWqCzSIBGR4e~bm zfP6&$O+F+4Azzbk$p6TX)E87Yst47J>PyimHpQcal!Qv8k|_n1MrkNLl}VYY9Lh%J zQ3X^9<)Ylw0IHG#s45Dk5Naqjf*M7Qr6y1lsmauIY9=+CnnN{H3#rA_atfnxilSCh ztEmmtX6i?354E2rU8QbPcc_O{C-pb=5A}+AL%pLuM7l(J zM0!Q~MraXsgclJ;B$32OazqhPM=~Or5p%>E$%_<3iXvqZcVs}MBI1oyMW6^086FuO znGl&AnHrfHnG

v_uv~+9GI#h^&mPj;xDpj{F$e71LF!DI^H1aa?Hu665Df(5kZ6}=n17kv_a7JVLl7yb0b|LWTH|BmVSzyIILe*Xj7 C-yJOg diff --git a/hw/xquartz/bundle/Resources/fi.lproj/locversion.plist b/hw/xquartz/bundle/Resources/fi.lproj/locversion.plist index 3c0e25c28..ec5c798d9 100644 --- a/hw/xquartz/bundle/Resources/fi.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/fi.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib index 215618845..dbdfc1e8e 100644 --- a/hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib @@ -1,11 +1,15 @@ - + 1050 - 9C31 - 677 - 949.26 - 352.00 + 10A222 + 708 + 994.5 + 404.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 708 + YES @@ -393,7 +397,7 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -428,7 +432,7 @@ RW11bG9pIGtvbG1lbsOkcHDDpGltaXN0w6QgaGlpcnTDpA LucidaGrande - 1.300000e+01 + 13 1044 @@ -461,7 +465,7 @@ w6Rpcml0w6QgWDExLW9oamVsbWlhLCBqb3RrYSBrw6R5dHTDpHbDpHQgTWV0YS1tdXVudG9uw6RwcMOk aW50w6QuA LucidaGrande - 1.100000e+01 + 11 3100 @@ -470,9 +474,9 @@ aW50w6QuA 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NwA @@ -639,7 +643,7 @@ ZXR1c3BhbmVlbGlzc2EuA 1 LucidaGrande - 1.300000e+01 + 13 16 @@ -706,6 +710,7 @@ ZXR1c3BhbmVlbGlzc2EuA +

3 YES @@ -898,8 +903,8 @@ dXR0dXUuA 67239424 0 - UMOkaXZpdMOkIFgxMTpuIGVuc2lzaWphaW5lbiB2YWxpbnRhIChrZXNraW9zb2l0dXMpLCAKa3VuIE1h -YyBPUyBYOm4gbGVpa2Vww7Z5dMOkIG11dXR0dXUuA + UMOkaXZpdMOkIFgxMTpuIGVuc2lzaWphaW5lbiB2YWxpbnRhIChrZXNraW9zb2l0dXMpLCBrdW4gTWFj +IE9TIFg6biBsZWlrZXDDtnl0w6QgbXV1dHR1dS4 1211912703 @@ -1265,7 +1270,7 @@ ZXJyYW4uA {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs
@@ -1278,7 +1283,7 @@ ZXJyYW4uA View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1363,9 +1368,9 @@ ZXJyYW4uA YES - 1.217310e+02 - 6.273100e+01 - 1.000000e+03 + 121.73099999999999 + 62.731000000000002 + 1000 75628032 0 @@ -1401,9 +1406,9 @@ ZXJyYW4uA - 9.900000e+01 - 4.000000e+01 - 1.000000e+03 + 99 + 40 + 1000 75628032 0 @@ -1428,9 +1433,9 @@ ZXJyYW4uA - 7.100000e+01 - 1.000000e+01 - 1.000000e+03 + 71 + 10 + 1000 67239424 0 @@ -1450,7 +1455,7 @@ ZXJyYW4uA Text Cell LucidaGrande - 1.200000e+01 + 12 16 @@ -1460,7 +1465,7 @@ ZXJyYW4uA 6 System controlBackgroundColor - + @@ -1470,8 +1475,8 @@ ZXJyYW4uA - 3.000000e+00 - 2.000000e+00 + 3 + 2 6 @@ -1482,8 +1487,10 @@ ZXJyYW4uA MC41AA - 1.700000e+01 + 17 1379958784 + + 1 -1 0 @@ -1492,6 +1499,7 @@ ZXJyYW4uA {{1, 17}, {301, 198}} + 4 @@ -1503,7 +1511,7 @@ ZXJyYW4uA _doScroller: - 9.949238e-01 + 0.99492380000000002 @@ -1513,7 +1521,7 @@ ZXJyYW4uA 1 _doScroller: - 6.885246e-01 + 0.68852460000000004 @@ -1524,6 +1532,7 @@ ZXJyYW4uA {{1, 0}, {301, 17}} + 4 @@ -1532,6 +1541,7 @@ ZXJyYW4uA
{{20, 20}, {318, 231}} + 50 @@ -1568,7 +1578,7 @@ ZXJyYW4uA
{{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps
@@ -3316,11 +3326,8 @@ ZXJyYW4uA YES - + YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3380,7 +3387,6 @@ ZXJyYW4uA 169.editorWindowContentRectSynchronizationRect 19.IBPluginDependency 19.ImportedFromIB2 - 196.IBPluginDependency 196.ImportedFromIB2 200295.IBPluginDependency 200295.IBPropertyAccessControl @@ -3399,6 +3405,7 @@ ZXJyYW4uA 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect 244.IBEditorWindowLastContentRect + 244.IBPluginDependency 244.IBPropertyAccessControl 244.IBViewEditorWindowController.showingLayoutRectangles 244.IBWindowTemplateEditedContentRect @@ -3420,6 +3427,7 @@ ZXJyYW4uA 272.IBPluginDependency 272.ImportedFromIB2 285.IBEditorWindowLastContentRect + 285.IBPluginDependency 285.IBPropertyAccessControl 285.IBViewEditorWindowController.showingBoundsRectangles 285.IBViewEditorWindowController.showingLayoutRectangles @@ -3693,21 +3701,18 @@ ZXJyYW4uA YES + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3722,349 +3727,350 @@ ZXJyYW4uA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{168, 821}, {113, 23}} com.apple.InterfaceBuilder.CocoaPlugin - + {{202, 626}, {154, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + + com.apple.InterfaceBuilder.CocoaPlugin - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - + + {{349, 858}, {315, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + {{271, 666}, {301, 153}} {{706, 450}, {525, 323}} - + com.apple.InterfaceBuilder.CocoaPlugin + {{706, 450}, {525, 323}} - + {{184, 290}, {481, 345}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + {{58, 803}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{100, 746}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{68, 585}, {469, 271}} - - - + com.apple.InterfaceBuilder.CocoaPlugin + + + {{68, 585}, {469, 271}} - + {{433, 406}, {486, 327}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - - + + {{145, 836}, {357, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + {{67, 819}, {336, 20}} com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{84, 709}, {131, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{20, 641}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + {{79, 616}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + diff --git a/hw/xquartz/bundle/Resources/fi.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/fi.lproj/main.nib/keyedobjects.nib index 677f9796b35d0ad39b04d564fd24f96781173963..dfb04f15fdf9a7bc1be8bcd0bc2fd94a78a58c27 100644 GIT binary patch literal 53312 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 B0lxqM diff --git a/hw/xquartz/bundle/Resources/ko.lproj/locversion.plist b/hw/xquartz/bundle/Resources/ko.lproj/locversion.plist index 61d38f50e..5ce4bb731 100644 --- a/hw/xquartz/bundle/Resources/ko.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/ko.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib index 9917b6326..32291ca88 100644 --- a/hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib @@ -1,5 +1,5 @@ - + 1050 10A222 @@ -12,7 +12,6 @@ YES - YES @@ -398,10 +397,10 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} - + 256 YES @@ -475,9 +474,9 @@ mCDsnojsirXri4jri6QuA 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NwA @@ -1026,7 +1025,7 @@ teuLiOuLpC4gA 67239424 0 - 67mE7Zmc7ISxIOyciOuPhOyasCDtgbTrpq0g66y07IucA + 67mE7Zmc7ISxIOyciOuPhOyasCDtgbTrpq0 1211912703 @@ -1049,8 +1048,8 @@ teuLiOuLpC4gA 67239424 4194304 7Zmc7ISx7ZmU65CY7JeI7J2EIOuVjCDruYTtmZzshLEg7JyI64+E7Jqw66W8IO2BtOumre2VmOuptCDr -p4jsmrDsiqQg7YG066at7J20IOu5hO2ZnOyEsSDsnIjrj4TsmrDrpbwg7Ya16rO87ZWY7JesIO2ZnOyE -se2ZlOuQnCDsnIjrj4TsmrDrpbwg7YG066at7ZWp64uI64ukLg +p4jsmrDsiqQg7YG066at7J20IOu5hO2ZnOyEsSDsnIjrj4TsmrDroZwg7Ya16rO865CgIOu/kOunjCDs +lYTri4jrnbwg67mE7Zmc7ISxIOyciOuPhOyasOqwgCAg7Zmc7ISx7ZmU65Cp64uI64ukLg @@ -1128,8 +1127,8 @@ soPsnYAg7J2867aAIOyXreq4sOuKpeydhCDqsIDsp4Dqs6Ag7J6I7Iq164uI64ukLg 67239424 4194304 7Zmc7ISx7ZmU65CY7JeI7J2EIOuVjCDsg4jroZzsmrQgWDExIOyciOuPhOyasOulvCDsg53shLHtlZjr -qbQoRmluZGVyLmFwcCDrsI8gVGVybWluYWwuYXBwIOuTsSDrjIDsi6ApIFgxMS5hcHDqsIAg66eoIOyV -nuycvOuhnCDsnbTrj5nrkKnri4jri6QuA +qbQgKEZpbmRlci5hcHAg67CPIO2EsOuvuOuEkC5hcHAg65OxIOuMgOyLoCkgWDExLmFwcOydtCDrp6gg +7JWe7Jy866GcIOydtOuPmeuQqeuLiOuLpC4 @@ -1222,8 +1221,8 @@ nbQg7Jyg7Zqo7ZWY7KeAIOyViuqyjCDrkJjslrQgWDExIOydkeyaqSDtlITroZzqt7jrnqjsnbQg7Iuk 67239424 4194304 - 7Zmc7ISx7ZmU65CY66m0LCDsi5zsiqTthZwg67O07JWI7J2EIO2ZleyduO2VmOq4sCDsnITtlbQg7J24 -7KadIOyXsOqysOuPhCDtmZzshLHtmZTrkJjslrTslbwg7ZWp64uI64ukLiDruYTtmZzshLHtmZTrkJjr + 7Zmc7ISx7ZmU65CY66m0LCDsi5zsiqTthZwg67O07JWI7J2EIO2ZleyduO2VmOq4sCDsnITtlbQg7Jew +6rKwIOyduOymneuPhCDtmZzshLHtmZTrkJjslrTslbwg7ZWp64uI64ukLiDruYTtmZzshLHtmZTrkJjr qbQsIOybkOqyqSDsnZHsmqkg7ZSE66Gc6re4656oIOyXsOqysOydtCDtl4jsmqnrkJjsp4Ag7JWK7Iq1 64uI64ukLg @@ -1271,11 +1270,10 @@ i6QuA {484, 308} - {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs @@ -1288,7 +1286,7 @@ i6QuA View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1470,7 +1468,7 @@ i6QuA 6 System controlBackgroundColor - + @@ -1583,7 +1581,7 @@ i6QuA {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps diff --git a/hw/xquartz/bundle/Resources/ko.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/ko.lproj/main.nib/keyedobjects.nib index 310a9f403c3c8cf017df1f8ba37ee73a4da44614..1a91df72081739dbe4e0516cfc7ba1d4c35cc959 100644 GIT binary patch literal 46678 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 Yx-?ydG5?M3-Tya}-~Vs^zvwFaAG-Ul0RR91 literal 46775 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 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/pl.lproj/locversion.plist b/hw/xquartz/bundle/Resources/pl.lproj/locversion.plist index d24c81354..233544b10 100644 --- a/hw/xquartz/bundle/Resources/pl.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/pl.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib index 1d3d386cb..9e99f1cd2 100644 --- a/hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib @@ -1,11 +1,15 @@ - + 1050 - 9C31 - 677 - 949.26 - 352.00 + 10A222 + 708 + 994.5 + 404.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 708 + YES @@ -393,7 +397,7 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -428,7 +432,7 @@ Emuluj mysz z trzema przyciskami LucidaGrande - 1.300000e+01 + 13 1044 @@ -460,7 +464,7 @@ b2xpZG93YcSHIHogcHJvZ3JhbWFtaSBYMTEgdcW8eXdhasSFY3ltaSBtb2R5ZmlrYXRvcmEgTWV0YS4 LucidaGrande - 1.100000e+01 + 11 3100 @@ -469,9 +473,9 @@ b2xpZG93YcSHIHogcHJvZ3JhbWFtaSBYMTEgdcW8eXdhasSFY3ltaSBtb2R5ZmlrYXRvcmEgTWV0YS4< 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NwA @@ -638,7 +642,7 @@ eSBkxbp3acSZa293ZS4 1 LucidaGrande - 1.300000e+01 + 13 16 @@ -705,6 +709,7 @@ eSBkxbp3acSZa293ZS4 +

3 YES @@ -1209,10 +1214,10 @@ Lg 67239424 4194304 - R2R5IHfFgsSFY3pvbmUsIHcgY2VsdSB6YXBld25pZW5pYSBiZXpwaWVjemXFhHN0d2Egd8WCxIVjem9u -YSBtdXNpIGJ5xIcgdGFrxbxlIG9wY2phIFV3aWVyenl0ZWxuaWFqIHBvxYLEhWN6ZW5pYS4gR2R5IHd5 -xYLEhWN6b25lLCBwb8WCxIVjemVuaWEgemUgemRhbG55Y2ggcHJvZ3JhbcOzdyBuaWUgc8SFIGRvendv -bG9uZS4 + R2R5IHBvbGUgamVzdCB6YXpuYWN6b25lLCBkbGEgYmV6cGllY3plxYRzdHdhIHfFgsSFY3pvbmEgbXVz +aSBiecSHIHRha8W8ZSBvcGNqYSBVd2llcnp5dGVsbmlhaiBwb8WCxIVjemVuaWEuIEdkeSBwb2xlIG5p +ZSBqZXN0IHphem5hY3pvbmUsIHBvxYLEhWN6ZW5pYSB6ZSB6ZGFsbnljaCBwcm9ncmFtw7N3IG5pZSBz +xIUgZG96d29sb25lLg @@ -1260,7 +1265,7 @@ bG9uZS4 {{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs
@@ -1273,7 +1278,7 @@ bG9uZS4 View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1358,9 +1363,9 @@ bG9uZS4 YES - 1.227310e+02 - 6.273100e+01 - 1.000000e+03 + 122.73099999999999 + 62.731000000000002 + 1000 75628032 0 @@ -1397,9 +1402,9 @@ bG9uZS4 - 1.000000e+02 - 4.000000e+01 - 1.000000e+03 + 100 + 40 + 1000 75628032 0 @@ -1425,9 +1430,9 @@ bG9uZS4 - 6.900000e+01 - 1.000000e+01 - 1.000000e+03 + 69 + 10 + 1000 67239424 0 @@ -1447,7 +1452,7 @@ bG9uZS4 S29tw7Nya2EgdGVrc3Rvd2E LucidaGrande - 1.200000e+01 + 12 16 @@ -1457,7 +1462,7 @@ bG9uZS4 6 System controlBackgroundColor - + @@ -1468,8 +1473,8 @@ bG9uZS4 - 3.000000e+00 - 2.000000e+00 + 3 + 2 6 @@ -1480,8 +1485,10 @@ bG9uZS4 MC41AA - 1.700000e+01 + 17 1379958784 + + 1 -1 0 @@ -1502,7 +1509,7 @@ bG9uZS4 _doScroller: - 9.949238e-01 + 0.99492380000000002 @@ -1512,7 +1519,7 @@ bG9uZS4 1 _doScroller: - 6.885246e-01 + 0.68852460000000004 @@ -1569,7 +1576,7 @@ bG9uZS4 {{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps @@ -3317,11 +3324,8 @@ bG9uZS4 YES - + YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3378,7 +3382,6 @@ bG9uZS4 169.editorWindowContentRectSynchronizationRect 19.IBPluginDependency 19.ImportedFromIB2 - 196.IBPluginDependency 196.ImportedFromIB2 200295.IBPluginDependency 200295.IBShouldRemoveOnLegacySave @@ -3393,6 +3396,7 @@ bG9uZS4 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect 244.IBEditorWindowLastContentRect + 244.IBPluginDependency 244.IBPropertyAccessControl 244.IBViewEditorWindowController.showingLayoutRectangles 244.IBWindowTemplateEditedContentRect @@ -3414,6 +3418,7 @@ bG9uZS4 272.IBPluginDependency 272.ImportedFromIB2 285.IBEditorWindowLastContentRect + 285.IBPluginDependency 285.IBViewEditorWindowController.showingBoundsRectangles 285.IBViewEditorWindowController.showingLayoutRectangles 285.IBWindowTemplateEditedContentRect @@ -3665,14 +3670,11 @@ bG9uZS4 YES + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3691,323 +3693,324 @@ bG9uZS4 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{168, 821}, {113, 23}} com.apple.InterfaceBuilder.CocoaPlugin - + {{202, 626}, {154, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - + {{349, 858}, {315, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + {{271, 666}, {301, 153}} {{437, 548}, {584, 308}} - + com.apple.InterfaceBuilder.CocoaPlugin + {{437, 548}, {584, 308}} - + {{184, 290}, {481, 345}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + {{58, 803}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{100, 746}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{68, 585}, {454, 271}} - - + com.apple.InterfaceBuilder.CocoaPlugin + + {{68, 585}, {454, 271}} - + {{433, 406}, {486, 327}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - + {{145, 836}, {333, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + {{67, 819}, {336, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + {{523, 716}, {155, 83}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{20, 641}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + {{79, 616}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + diff --git a/hw/xquartz/bundle/Resources/pl.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/pl.lproj/main.nib/keyedobjects.nib index 2aecc443f7562ff2fd2e520a10bd9cc5ddb8289f..363a2acc7a33f7458962bd1eec5bb7f1721b86a2 100644 GIT binary patch literal 52417 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
d&%rY}cMAx$RUf14TU3cwe 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 F{{YSOrUU>0 literal 49985 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 G1OE?nqoBb6 diff --git a/hw/xquartz/bundle/Resources/pt.lproj/locversion.plist b/hw/xquartz/bundle/Resources/pt.lproj/locversion.plist index 1972524b8..d14c37b4e 100644 --- a/hw/xquartz/bundle/Resources/pt.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/pt.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib index 64cf2bd04..42b40e4a8 100644 --- a/hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib @@ -450,7 +450,7 @@ 256 - {{36, 67}, {559, 28}} + {{36, 60}, {548, 31}} YES @@ -487,7 +487,7 @@ 256 - {{36, 170}, {559, 37}} + {{36, 162}, {548, 42}} YES @@ -506,7 +506,7 @@ ZS4KA 256 - {{18, 98}, {402, 18}} + {{18, 97}, {402, 18}} YES @@ -528,7 +528,7 @@ ZS4KA 256 - {{36, 118}, {525, 25}} + {{36, 126}, {548, 14}} YES @@ -585,7 +585,7 @@ IG1hcGEgZG8gdGVjbGFkbyBhdHVhbCBkbyBYMTEuA 256 - {{18, 78}, {402, 18}} + {{18, 70}, {402, 18}} YES @@ -607,7 +607,7 @@ IG1hcGEgZG8gdGVjbGFkbyBhdHVhbCBkbyBYMTEuA 256 - {{36, 44}, {539, 28}} + {{36, 36}, {548, 28}} YES @@ -715,7 +715,7 @@ cm9zLg 256 - {{17, 205}, {50, 20}} + {{17, 191}, {45, 34}} YES @@ -772,7 +772,7 @@ YW1lbnRlLg 256 - {{37, 98}, {409, 23}} + {{37, 97}, {409, 23}} YES @@ -794,7 +794,7 @@ YW1lbnRlLg 256 - {{36, 120}, {539, 23}} + {{36, 126}, {548, 17}} YES @@ -850,7 +850,7 @@ YXJhIGRpZ2l0YXIgZSBzYWlyIGRvIG1vZG8gdGVsYSBjaGVpYS4 256 - {{36, 188}, {536, 32}} + {{36, 188}, {536, 28}} YES @@ -868,7 +868,7 @@ b3MgYnVmZmVycyBQUklOQ0lQQUlTIGRvIFgxMS4 256 - {{34, 107}, {511, 23}} + {{37, 96}, {511, 23}} YES @@ -891,7 +891,7 @@ bSBmb3IgYWx0ZXJhZGEuA 256 - {{34, 87}, {501, 18}} + {{37, 71}, {501, 23}} YES @@ -914,7 +914,7 @@ ZW0gZm9yIGFsdGVyYWRhLg 256 - {{34, 62}, {553, 23}} + {{37, 46}, {553, 23}} YES @@ -937,7 +937,7 @@ eHRvIGZvciBzZWxlY2lvbmFkby4 256 - {{34, 165}, {511, 23}} + {{37, 159}, {511, 23}} YES @@ -960,7 +960,7 @@ QSBmb3IgYWx0ZXJhZGEuA 256 - {{48, 134}, {524, 28}} + {{55, 125}, {529, 28}} YES @@ -978,7 +978,7 @@ YSBkbyBYMTEuA 256 - {{48, 28}, {536, 28}} + {{55, 14}, {526, 28}} YES @@ -1011,7 +1011,7 @@ o28gbmVtIHNlbXByZSBmdW5jaW9uZSBlbSBhbGd1bnMgYXBsaWNhdGl2b3MuA 256 - {{15, 212}, {402, 18}} + {{18, 212}, {402, 18}} YES @@ -1033,7 +1033,7 @@ o28gbmVtIHNlbXByZSBmdW5jaW9uZSBlbSBhbGd1bnMgYXBsaWNhdGl2b3MuA 256 - {{31, 175}, {542, 31}} + {{36, 175}, {542, 31}} YES @@ -1051,7 +1051,7 @@ ZG8gcGFyYSBlc3NhIGphbmVsYSwgYSBxdWFsIHRhbWLDqW0gw6kgYXRpdmFkYS4 256 - {{15, 151}, {402, 18}} + {{18, 151}, {402, 18}} YES @@ -1073,7 +1073,7 @@ ZG8gcGFyYSBlc3NhIGphbmVsYSwgYSBxdWFsIHRhbWLDqW0gw6kgYXRpdmFkYS4 256 - {{31, 126}, {441, 21}} + {{36, 128}, {441, 17}} YES @@ -1090,7 +1090,7 @@ dW5zIGluY29udmVuaWVudGVzLg 256 - {{15, 107}, {402, 18}} + {{18, 107}, {402, 18}} YES @@ -1112,7 +1112,7 @@ dW5zIGluY29udmVuaWVudGVzLg 256 - {{31, 59}, {542, 42}} + {{36, 73}, {542, 28}} YES diff --git a/hw/xquartz/bundle/Resources/pt.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/pt.lproj/main.nib/keyedobjects.nib index 7129958e4609addb2efec12bd7f773ebb79a3f5b..ed121ede67352b58c7663450b683062b3d84c00b 100644 GIT binary patch literal 50446 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 literal 50446 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 diff --git a/hw/xquartz/bundle/Resources/pt_PT.lproj/locversion.plist b/hw/xquartz/bundle/Resources/pt_PT.lproj/locversion.plist index 3e2a0f49e..4910e409d 100644 --- a/hw/xquartz/bundle/Resources/pt_PT.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/pt_PT.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib index fdf839e0a..1bab3a8f8 100644 --- a/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib @@ -1,17 +1,26 @@ - + 1050 - 9C31 - 629 - 949.26 - 352.00 + 9G55 + 677.1 + 949.43 + 353.00 YES YES - com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + YES + YES @@ -21,41 +30,41 @@ - FirstResponder + FirstResponder NSApplication - MainMenu + MainMenu YES - X11 - + X11 + 1048576 2147483647 - NSImage + NSImage NSMenuCheckmark - - + + NSImage NSMenuMixedState submenuAction: - + X11 YES Acerca do X11 - + 2147483647 - + @@ -64,30 +73,30 @@ 1048576 2147483647 - + YES YES - - + + 1048576 2147483647 - + - U2VydmnDp29zA - + U2VydmnDp29zA + 1048576 2147483647 - + submenuAction: - + U2VydmnDp29zA YES @@ -98,12 +107,12 @@ YES YES - - + + 1048576 2147483647 - + @@ -112,58 +121,58 @@ 1572864 2147483647 - + YES YES - - + + 1048576 2147483647 - + Ocultar o X11 - h + h 1048576 2147483647 - + 42 T2N1bHRhciBvdXRyYXMgYXBsaWNhw6fDtWVzA - + h 1572864 2147483647 - + Mostrar tudo - + 1048576 2147483647 - + 42 YES YES - - + + 1048576 2147483647 - + @@ -172,7 +181,7 @@ 1048576 2147483647 - + _NSAppleMenu @@ -180,51 +189,51 @@ - QXBsaWNhw6fDtWVzA - + QXBsaWNhw6fDtWVzA + 1048576 2147483647 - + submenuAction: - + QXBsaWNhw6fDtWVzA YES YES YES - - + + 1048576 2147483647 - + Personalizar... - + 1048576 2147483647 - + - RWRpw6fDo28 - + RWRpw6fDo28 + 1048576 2147483647 - + submenuAction: - + RWRpw6fDo28 YES @@ -234,22 +243,22 @@ 1048576 2147483647 - + - Janela - + Janela + 1048576 2147483647 - + submenuAction: - + Janela YES @@ -259,7 +268,7 @@ 1048576 2147483647 - + @@ -268,27 +277,27 @@ 1048576 2147483647 - + Zoom - + 1048576 2147483647 - + YES YES - - + + 1048576 2147483647 - + @@ -297,7 +306,7 @@ 1048840 2147483647 - + @@ -306,38 +315,38 @@ 1179914 2147483647 - + YES YES - - + + 1048576 2147483647 - + Passar tudo para a frente - + 1048576 2147483647 - + YES YES - - + + 1048576 2147483647 - + _NSWindowsMenu @@ -345,25 +354,25 @@ - Ajuda - + Ajuda + 1048576 2147483647 - + submenuAction: - + Ajuda YES Ajuda do X11 - + 1048576 2147483647 - + @@ -372,7 +381,7 @@ _NSMainMenu - X11Controller + X11Controller 3 @@ -380,10 +389,11 @@ {{319, 328}, {633, 308}} 1350041600 UHJlZmVyw6puY2lhcyBkbyBYMTE - NSPanel + NSPanel View + {3.40282e+38, 3.40282e+38} {320, 240} @@ -393,168 +403,6 @@ 256 - - YES - - - 256 - - YES - - - 256 - {{18, 210}, {402, 18}} - - YES - - 67239424 - 0 - U2ltdWxhciByYXRvIGRlIHRyw6pzIGJvdMO1ZXM - - LucidaGrande - 1.300000e+01 - 1044 - - - 1211912703 - 2 - - - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 256 - {{36, 57}, {510, 28}} - - YES - - 67239424 - 4194304 - U2UgZXN0aXZlcmVtIGFjdGl2YXMsIGFzIHRlY2xhcyBlcXVpdmFsZW50ZXMgZGEgYmFycmEgZGUgbWVu -dXMgcG9kZW0gaW50ZXJmZXJpciBuYXMgYXBsaWNhw6fDtWVzIFgxMSBxdWUgdXRpbGl6YW0gbyBtb2Rp -ZmljYWRvciBNZXRhLg - - - 1.100000e+01 - 3100 - - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2OQA - - - - 6 - - controlTextColor - - 3 - MAA - - - - - - - 256 - {{36, 165}, {510, 39}} - - YES - - 67239424 - 4194304 - QW8gY2xpY2FyLCBtYW50ZW5oYSBwcmVtaWRhcyBhcyB0ZWNsYXMgT3DDp8OjbyBvdSBDb21hbmRvIHBh -cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo - - - - - - - - - - 256 - {{18, 91}, {402, 18}} - - YES - - 67239424 - 0 - QWN0aXZhciBhcyBlcXVpdmFsw6puY2lhcyBkZSB0ZWNsYWRvIHBhcmEgWDExA - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 256 - {{36, 121}, {510, 19}} - - YES - - 67239424 - 4194304 - UGVybWl0ZSBxdWUgYWx0ZXJhw6fDtWVzIGRvIG1lbnUgZGUgZW50cmFkYSBzZSBzb2JyZXBvbmhhbSBh -byBhY3R1YWwgbWFwYSBkZSB0ZWNsYXMgZG8gWDExLg - - - - - - - - - - 256 - {{18, 146}, {402, 18}} - - YES - - 67239424 - 0 - U2VndWlyIGEgZGlzcG9zacOnw6NvIGRvIHRlY2xhZG8gZG8gc2lzdGVtYQ - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{10, 33}, {587, 246}} - - - {{13, 10}, {607, 292}} @@ -563,7 +411,165 @@ byBhY3R1YWwgbWFwYSBkZSB0ZWNsYXMgZG8gWDExLg 1 - + + + 256 + + YES + + + 256 + {{18, 210}, {402, 18}} + + YES + + 67239424 + 0 + U2ltdWxhciByYXRvIGRlIHRyw6pzIGJvdMO1ZXM + + LucidaGrande + 1.300000e+01 + 1044 + + + 1211912703 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + + + + 256 + {{36, 57}, {510, 28}} + + YES + + 67239424 + 4194304 + U2UgZXN0aXZlcmVtIGFjdGl2YXMsIGFzIHRlY2xhcyBlcXVpdmFsZW50ZXMgZGEgYmFycmEgZGUgbWVu +dXMgcG9kZW0gaW50ZXJmZXJpciBuYXMgYXBsaWNhw6fDtWVzIFgxMSBxdWUgdXRpbGl6YW0gbyBtb2Rp +ZmljYWRvciBNZXRhLg + + LucidaGrande + 1.100000e+01 + 3100 + + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2OQA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 256 + {{36, 162}, {510, 42}} + + YES + + 67239424 + 4194304 + QW8gY2xpY2FyLCBtYW50ZW5oYSBwcmVtaWRhcyBhcyB0ZWNsYXMgT3DDp8OjbyBvdSBDb21hbmRvIHBh +cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo + + + + + + + + + + 256 + {{18, 91}, {402, 18}} + + YES + + 67239424 + 0 + QWN0aXZhciBhcyBlcXVpdmFsw6puY2lhcyBkZSB0ZWNsYWRvIHBhcmEgWDExA + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 256 + {{36, 121}, {510, 19}} + + YES + + 67239424 + 4194304 + UGVybWl0ZSBxdWUgYWx0ZXJhw6fDtWVzIGRvIG1lbnUgZGUgZW50cmFkYSBzZSBzb2JyZXBvbmhhbSBh +byBhY3R1YWwgbWFwYSBkZSB0ZWNsYXMgZG8gWDExLg + + + + + + + + + + 256 + {{18, 146}, {402, 18}} + + YES + + 67239424 + 0 + U2VndWlyIGEgZGlzcG9zacOnw6NvIGRvIHRlY2xhZG8gZG8gc2lzdGVtYQ + + + 1211912703 + 2 + + + + + 200 + 25 + + + + {{10, 33}, {587, 246}} + + Entrada @@ -591,10 +597,10 @@ byBhY3R1YWwgbWFwYSBkZSB0ZWNsYXMgZG8gWDExLg 1211912703 2 - + - - + + 200 25 @@ -612,7 +618,7 @@ byBhY3R1YWwgbWFwYSBkZSB0ZWNsYXMgZG8gWDExLg dGVtYSwgdGFsIGNvbW8gZXN0aXZlciBkZWZpbmlkbyBlbSBFZmVpdG9zIHNvbm9yb3MsIG5hcyBwcmVm ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA - + @@ -621,7 +627,7 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA 256 - {{64, 201}, {131, 26}} + {{68, 201}, {131, 26}} YES @@ -632,11 +638,11 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA 109199615 1 - + LucidaGrande 1.300000e+01 16 - + @@ -645,12 +651,12 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA Do monitor - + 1048576 2147483647 1 - + _popUpItemAction: -1 @@ -666,11 +672,11 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA 256 cores - + 1048576 2147483647 - + _popUpItemAction: 8 @@ -678,11 +684,11 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA Milhares - + 1048576 2147483647 - + _popUpItemAction: 15 @@ -690,11 +696,11 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA TWlsaMO1ZXM - + 1048576 2147483647 - + _popUpItemAction: 24 @@ -718,7 +724,7 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA 4194304 Q29yZXM6Cg - + @@ -736,7 +742,7 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA RXN0YSBvcMOnw6NvIGVudHJhcsOhIGVtIHZpZ29yIGRhIHByw7N4aW1hIHZleiBxdWUgbyBYMTEgZm9y IGV4ZWN1dGFkby4 - + @@ -756,10 +762,10 @@ IGV4ZWN1dGFkby4 1211912703 2 - + - - + + 200 25 @@ -779,10 +785,10 @@ bXBsZXRvA 1211912703 2 - + - - + + 200 25 @@ -800,7 +806,7 @@ bXBsZXRvA cyBDb21hbmRvLU9ww6fDo28tQSBwYXJhIGVudHJhciBlIHNhaXIgZG8gbW9kbyBkZSBlY3LDoyBjb21w bGV0by4 - + @@ -836,10 +842,10 @@ bGV0by4 1211912703 2 - + - - + + 200 25 @@ -876,10 +882,10 @@ TUFSWSBkbyBYMTEuA 1211912703 2 - + - - + + 200 25 @@ -899,10 +905,10 @@ cmVhIGRlIGNvbGFnZW0gbXVkYXIuA 1211912703 2 - + - - + + 200 25 @@ -922,10 +928,10 @@ Y2lvbmFkbyB0ZXh0byBub3ZvLg 1211912703 2 - + - - + + 200 25 @@ -944,10 +950,10 @@ Y2lvbmFkbyB0ZXh0byBub3ZvLg 1211912703 2 - + - - + + 200 25 @@ -1016,10 +1022,10 @@ cHJlIGZ1bmNpb25hcsOhIGVtIGFsZ3VtYXMgYXBsaWNhw6fDtWVzLg 1211912703 2 - + - - + + 200 25 @@ -1056,10 +1062,10 @@ b21wbGV0YW1lbnRlLiA 1211912703 2 - + - - + + 200 25 @@ -1094,10 +1100,10 @@ b21wbGV0YW1lbnRlLiA 1211912703 2 - + - - + + 200 25 @@ -1147,10 +1153,10 @@ Yy4pLg 1211912703 2 - + - - + + 200 25 @@ -1169,10 +1175,10 @@ Yy4pLg 1211912703 2 - + - - + + 200 25 @@ -1191,7 +1197,7 @@ U2UgbyBlbmRlcmXDp28gSVAgZG8gc2lzdGVtYSBmb3IgYWx0ZXJhZG8sIGVzdGFzIGNoYXZlcyBwZXJk ZW0gYSB2YWxpZGFkZSwgcG9kZW5kbywgYXNzaW0sICBpbXBvc3NpYmlsaXRhciBhIGV4ZWN1w6fDo28g ZGFzIGFwbGljYcOnw7VlcyBYMTEuA - + @@ -1211,7 +1217,7 @@ p8OjbyDigJxBdXRlbnRpY2FyIGxpZ2HDp8O1ZXPigJ0gcGFyYSBnYXJhbnRpciBhIHNlZ3VyYW7Dp2Eg ZG8gc2lzdGVtYS4gU2UgbsOjbyBhY3RpdmFyIGVzdGEgb3DDp8OjbywgbsOjbyBzw6NvIHBlcm1pdGlk YXMgbGlnYcOnw7VlcyBhIHBhcnRpciBkZSBhcGxpY2HDp8O1ZXMgcmVtb3Rhcy4 - + @@ -1229,7 +1235,7 @@ YXMgbGlnYcOnw7VlcyBhIHBhcnRpciBkZSBhcGxpY2HDp8O1ZXMgcmVtb3Rhcy4 RXN0YXMgb3DDp8O1ZXMgZW50cmFyw6NvIGVtIHZpZ29yIGRhIHByw7N4aW1hIHZleiBxdWUgbyBYMTEg Zm9yIGV4ZWN1dGFkby4 - + @@ -1248,12 +1254,17 @@ Zm9yIGV4ZWN1dGFkby4 0 YES YES + + YES + + {633, 308} {{0, 0}, {1440, 878}} {320, 262} + {3.40282e+38, 3.40282e+38} x11_prefs @@ -1262,10 +1273,11 @@ Zm9yIGV4ZWN1dGFkby4 {{360, 400}, {477, 271}} 1350041600 TWVudSBBcGxpY2HDp8OjbyBkbyBYMTE - + NSPanel View + {3.40282e+38, 3.40282e+38} {320, 240} @@ -1275,7 +1287,7 @@ Zm9yIGV4ZWN1dGFkby4 265 - {{340, 191}, {123, 32}} + {{318, 191}, {155, 32}} YES @@ -1287,7 +1299,7 @@ Zm9yIGV4ZWN1dGFkby4 -2038284033 1 - + @@ -1298,7 +1310,7 @@ Zm9yIGV4ZWN1dGFkby4 265 - {{340, 159}, {123, 32}} + {{318, 159}, {155, 32}} YES @@ -1310,7 +1322,7 @@ Zm9yIGV4ZWN1dGFkby4 -2038284033 1 - + @@ -1331,26 +1343,26 @@ Zm9yIGV4ZWN1dGFkby4 256 - {301, 198} + {279, 198} YES 256 - {301, 17} + {279, 17} 256 - {{302, 0}, {16, 17}} + {{280, 0}, {16, 17}} YES - 1.227310e+02 + 9.973100e+01 6.273100e+01 1.000000e+03 @@ -1364,7 +1376,7 @@ Zm9yIGV4ZWN1dGFkby4 6 - + System headerTextColor @@ -1372,9 +1384,9 @@ Zm9yIGV4ZWN1dGFkby4 338820672 1024 - Q8OpbHVsYSBkZSB0ZXh0bw + Q8OpbHVsYSBkZSB0ZXh0bw - + 3 @@ -1388,7 +1400,7 @@ Zm9yIGV4ZWN1dGFkby4 - 1.000000e+02 + 1.010000e+02 4.000000e+01 1.000000e+03 @@ -1402,9 +1414,9 @@ Zm9yIGV4ZWN1dGFkby4 338820672 1024 - + Q8OpbHVsYSBkZSB0ZXh0bw - + @@ -1425,7 +1437,7 @@ Zm9yIGV4ZWN1dGFkby4 6 - + System headerColor @@ -1434,18 +1446,18 @@ Zm9yIGV4ZWN1dGFkby4 338820672 1024 - + Q8OpbHVsYSBkZSB0ZXh0bw - + LucidaGrande 1.200000e+01 16 - + YES 6 - + System controlBackgroundColor @@ -1462,7 +1474,7 @@ Zm9yIGV4ZWN1dGFkby4 6 - + System gridColor 3 @@ -1477,9 +1489,8 @@ Zm9yIGV4ZWN1dGFkby4 YES - {{1, 17}, {301, 198}} + {{1, 17}, {279, 198}} - 4 @@ -1487,20 +1498,20 @@ Zm9yIGV4ZWN1dGFkby4 256 - {{302, 17}, {15, 198}} + {{280, 17}, {15, 198}} - _doScroller: + _doScroller: 9.949238e-01 256 - {{1, 215}, {301, 15}} + {{1, 215}, {279, 15}} 1 - + _doScroller: 6.885246e-01 @@ -1510,18 +1521,16 @@ Zm9yIGV4ZWN1dGFkby4 YES - {{1, 0}, {301, 17}} + {{1, 0}, {279, 17}} - 4 - {{20, 20}, {318, 231}} + {{20, 20}, {296, 231}} - 50 @@ -1533,7 +1542,7 @@ Zm9yIGV4ZWN1dGFkby4 265 - {{340, 223}, {123, 32}} + {{318, 223}, {155, 32}} YES @@ -1545,7 +1554,7 @@ Zm9yIGV4ZWN1dGFkby4 -2038284033 1 - + @@ -1558,6 +1567,7 @@ Zm9yIGV4ZWN1dGFkby4 {{0, 0}, {1440, 878}} {320, 262} + {3.40282e+38, 3.40282e+38} x11_apps @@ -1568,51 +1578,51 @@ Zm9yIGV4ZWN1dGFkby4 YES YES - - + + 1048576 2147483647 - + - - + QXBsaWNhw6fDtWVzA + 1048576 2147483647 - + submenuAction: - + QXBsaWNhw6fDtWVzA YES YES YES - - + + 1048576 2147483647 - + UGVyc29uYWxpemFy4oCmA - + 1048576 2147483647 - + - + @@ -1700,7 +1710,7 @@ Zm9yIGV4ZWN1dGFkby4 - apps_table_show: + apps_table_show: @@ -1788,7 +1798,7 @@ Zm9yIGV4ZWN1dGFkby4 - prefs_changed: + prefs_changed: @@ -1796,7 +1806,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1804,7 +1814,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1812,7 +1822,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1820,7 +1830,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1828,7 +1838,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1836,7 +1846,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1924,7 +1934,7 @@ Zm9yIGV4ZWN1dGFkby4 - + apps_table_show: @@ -2004,7 +2014,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2012,7 +2022,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2020,7 +2030,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2100,7 +2110,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2108,7 +2118,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2116,7 +2126,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2124,7 +2134,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2132,7 +2142,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2164,7 +2174,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2212,7 +2222,7 @@ Zm9yIGV4ZWN1dGFkby4 - + MainMenu 19 @@ -2457,7 +2467,7 @@ Zm9yIGV4ZWN1dGFkby4 196 - + X11Controller 244 @@ -3307,6 +3317,9 @@ Zm9yIGV4ZWN1dGFkby4 YES YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3363,6 +3376,7 @@ Zm9yIGV4ZWN1dGFkby4 169.editorWindowContentRectSynchronizationRect 19.IBPluginDependency 19.ImportedFromIB2 + 196.IBPluginDependency 196.ImportedFromIB2 200295.IBPluginDependency 200295.IBShouldRemoveOnLegacySave @@ -3377,7 +3391,6 @@ Zm9yIGV4ZWN1dGFkby4 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect 244.IBEditorWindowLastContentRect - 244.IBPluginDependency 244.IBPropertyAccessControl 244.IBViewEditorWindowController.showingLayoutRectangles 244.IBWindowTemplateEditedContentRect @@ -3399,7 +3412,6 @@ Zm9yIGV4ZWN1dGFkby4 272.IBPluginDependency 272.ImportedFromIB2 285.IBEditorWindowLastContentRect - 285.IBPluginDependency 285.IBViewEditorWindowController.showingBoundsRectangles 285.IBViewEditorWindowController.showingLayoutRectangles 285.IBWindowTemplateEditedContentRect @@ -3650,345 +3662,347 @@ Zm9yIGV4ZWN1dGFkby4 YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - - - - - - - - - - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin {{168, 821}, {113, 23}} - + com.apple.InterfaceBuilder.CocoaPlugin {{202, 626}, {154, 153}} - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin {{349, 858}, {315, 153}} - + com.apple.InterfaceBuilder.CocoaPlugin {{271, 666}, {301, 153}} - {{437, 749}, {484, 308}} - + {{437, 548}, {633, 308}} - {{184, 290}, {633, 308}} + {{437, 548}, {633, 308}} - + {{184, 290}, {633, 308}} + - - {inf, inf} - {320, 240} - + {3.40282e+38, 3.40282e+38} + {320, 240} + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin {{58, 803}, {155, 33}} - + com.apple.InterfaceBuilder.CocoaPlugin {{100, 746}, {155, 33}} - + com.apple.InterfaceBuilder.CocoaPlugin - {{68, 585}, {454, 271}} - + {{68, 585}, {477, 271}} - - + + {{68, 585}, {477, 271}} {{433, 406}, {486, 327}} + - - - - + {3.40282e+38, 3.40282e+38} + {320, 240} + com.apple.InterfaceBuilder.CocoaPlugin {{145, 1011}, {336, 20}} - + com.apple.InterfaceBuilder.CocoaPlugin {{67, 819}, {336, 20}} - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin {{20, 641}, {218, 203}} - + com.apple.InterfaceBuilder.CocoaPlugin {{79, 616}, {218, 203}} - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin @@ -4018,33 +4032,27 @@ Zm9yIGV4ZWN1dGFkby4 YES - - NSObject - - + FirstResponder + NSObject - IBUserSource - - - - - - - - - - - + IBUserSource + NSFormatter - - - + NSObject - - + IBUserSource + + + + + X11Controller + NSObject + + IBUserSource + @@ -4052,863 +4060,5 @@ Zm9yIGV4ZWN1dGFkby4 0 ../X11.xcodeproj 1 - - YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA -AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxEDmwALAAwAMQA1ADkAQABD -AEQASABMAJQAnACsALMAtAC1ALoAuwC8AL8AwwDEAMcAygDLAMwA0ADVAOMA6QDqAQYBBwEOAQ8BEgEW -ARcBFgEbAR4BHwEjASkBKgEtATIBNwE4AT0BSQFUAVUBVgFaAV8BaAFvAXABdAF2AXcBfAGDAYgBiQGS -AZMBlAGZAaEBpwGoAbMBtAG2AbcBvAHDAcQBxQHKAdEB0gHbAdwB4QHoAe0B7gIFAgkCCwIYAhwCHQIe -AiECKAIyAh0CMwI9Ah0CPgJIAh0CSQJNAlACVQJdAmICYwJkAmUCagJxAnICcwJ4AnkCfgKFAoYCjwKQ -ApUCnAKdAqYCpwKoAq0CsgK5AroCwwLEAsUCygLTAtcC2ALdAuQC5QLmAucC7ALzAvkC+gMDAwQDBQMK -AwsDEAMXAxwDHQMmAycDLAMzAzQDNQM2AzsDRANFA0oDSwNQA1EDVgNdA14DZwNoA20DdAN1A3oDgQOC -A4sDjAORA5kDmgObA6ADoQOmA60DrgO3A7gDuQO+A78DxAPLA88D0APRA9YD3QPeA+gD6QPuA/gD+QP6 -A/4EAAQFBAYECQQMBA8EEAQVBBwEHQQmBCcEKQQqBC8ENgQ3BDgEPQRCBEkESgRRBFIEUwRYBFkEXQRk -BGgEaQRqBGsEcAR1BHoEgQSCBIMEhASJBJAEkQSSBJcEngSfBKgEqQSuBK8EtAS7BLwExQTGBMsE0gTT -BNwE3QTeBOME6gTrBOwE7QTyBPcE/gT/BQgFCQUKBQ8FKwU6BTsFQgVLBUwFTwVUBWkFagVtBXMFhQWM -BY0FkAWVBZYFmQWjBaQFpwWqBbMFuQW6BcIFywXRBdIF1wXYBeIF5gXrBewF8QXyBfUF9wX4Bf0F/gYD -AxwGCgYTBhQGGQYaBh8GIAYlBiYGKwYsBjEGMgY3Bj4GPwZHBkgGSgZLBlAGUQZWBlcGXAZdBmIGYwZo -BoAGgQaCBoMGhgaHBowGkAaeBqIGqwayBrMGuwa8BsMGxAbMBs0G1AbVBt0G3gbfBuEG4gbqBvMG9gb3 -BvoHAQcEBw8HFgcXBx8HIAcnBygHMAcxBzgHOQdBB0IHSQdKB1IG3gdTB1QHWwddB2gHbwdwB3cG3gd4 -B3kHgAeCB4sHkgeTB5oHmweiB6MHqgerB7IHswe6Bt4Huwe8B8IHygfRB9IH2gfbB+IH4wfrB+wH8wf0 -B/wG3gf9B/4IAAgBCAIIAwgECAcICAgNCBIIGQgaCBsIHAghCCYIJwgvCDgBVQg5CEgIUQhaAVUIWwhg -CGMIZAhtCHYIfwiAAVUIiQiOCJcBVQiYCJwIpQFVCKYIsgi7CMMIxAjFCM4IzwjYAVUI2QjdCN4I3wjk -COUI6gjrCYIJiwmMCY0JkAmYCZwJnQmgCagJqQmtCa4JrwmyCbkJugnGCccJyAaGCAEIAgnKCcsAOAnO -CdAKZwr/C5cLmAuZC5oLmwucC50LngufC6ALoQuiC6MLpAulC6YLpwuoC6kLqgurC6wLrQuuC68LsAux -C7ILswu0C7ULtgu3C7gLuQu6C7sLvAu9C74LvwvAC8ELwgvDC8QLxQvGC8cLyAvJC8oLywvMC80LzgvP -C9AL0QvSC9ML1AvVC9YL1wvYC9kL2gvbC9wL3QveC98L4AvhC+IL4wvkC+UL5gvnC+gL6QvqC+sL7Avt -C+4L7wvwC/EL8gvzC/QL9Qv2C/cL+Av5C/oL+wv8C/0GhQv+C/8MAAwBDAIMAwwEDAUMBgwHDAgMCQwK -DAsMDAwNDA4MDwwQDBEMEgwTDBQMFQwWDBcMGAwZDBoMGwwcDB0MHgwfDCAMIQwiDCMMJAwlDCYMJwwo -DCkMLAwvDQwN6Q3qDesN7A3tDe4N7w3wDfEN8g3zDfQN9Q32DfcN+A35DfoN+w38Df0N/g3/DgAOAQ4C -DgMOBA4FDgYOBw4IDgkOCg4LDgwODQ4ODg8OEA4RDhIOEw4UDhUOFg4XDhgOGQ4aDhsOHA4dDh4OHw4g -DiEOIg4jDiQOJQ4mDicOKA4pDioOKw4sDi0OLg4vDjAOMQ4yDjMONA41DjYONw44DjkOOg47DjwOPQ4+ -Dj8OQA5BDkIOQw5EDkUORg5HDkgOSQ5KDksOTA5NDk4OTw5QDlEOUg5TDlQOVQ5WDlcOWA5ZDloOWw5c -Dl0OXg5fDmAOYQ5iDmMOZA5lDmYOZw5oDmkOag5rDmwObQ5uDm8OcA5xDnIOcw50DnUOdg53DngOeQ56 -DnsOfA59Dn4Ofw6ADoEOgg6DDoQOhQ6GDocOiA6JDooOiw6MAkcOjQ6ODo8OkA6RDpIOkw6UDpUOlg6X -DpgOmQ6aDpsOnA6dDp4Onw6gDqEOog6jDqQOpQ6mDqcOqA6pDqoOqw6sDq0Org6vDrAOsQ6yDrMOtA61 -DrYOtw64DrkOug67DrwOvQ6+Dr8OwA7BDsIOxQ7IDstVJG51bGzfEBIADQAOAA8AEAARABIAEwAUABUA -FgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADBWTlNSb290 -ViRjbGFzc11OU09iamVjdHNLZXlzXxAPTlNDbGFzc2VzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5T2lk -c1ZhbHVlc11OU0Nvbm5lY3Rpb25zW05TTmFtZXNLZXlzW05TRnJhbWV3b3JrXU5TQ2xhc3Nlc0tleXNa -TlNPaWRzS2V5c11OU05hbWVzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5Q29ubmVjdG9yc11OU0ZvbnRN -YW5hZ2VyXxAQTlNWaXNpYmxlV2luZG93c18QD05TT2JqZWN0c1ZhbHVlc18QF05TQWNjZXNzaWJpbGl0 -eU9pZHNLZXlzWU5TTmV4dE9pZFxOU09pZHNWYWx1ZXOAAoEDmoECB4ECuoEDmYAJgQIkgAaBArmBAruB -AiWBA5eAAIAHgQIjgQOYEgAElb2BArzSAA4AMgAzADRbTlNDbGFzc05hbWWABYAD0gAOADYANwA4WU5T -LnN0cmluZ4AEXU5TQXBwbGljYXRpb27SADoAOwA8AD1YJGNsYXNzZXNaJGNsYXNzbmFtZaMAPQA+AD9f -EA9OU011dGFibGVTdHJpbmdYTlNTdHJpbmdYTlNPYmplY3TSADoAOwBBAEKiAEIAP15OU0N1c3RvbU9i -amVjdF8QEElCQ29jb2FGcmFtZXdvcmvSAA4ARQBGAEdaTlMub2JqZWN0c4AIoNIAOgA7AEkASqMASgBL -AD9cTlNNdXRhYmxlU2V0VU5TU2V00gAOAEUATQBOgDqvEEUATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoA -WwBcAF0AXgBfAGAAYQBiAGMAZABlAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAHIAcwB0AHUAdgB3AHgA -eQB6AHsAfAB9AH4AfwCAAIEAggCDAIQAhQCGAIcAiACJAIoAiwCMAI0AjgCPAJAAkQCSAJOACoAagC2A -PYBEgEyAUIBVgG2Ac4B3gHmAfoCEgIWAi4CPgJSAm4CdgKOAqICrgK2Ar4C0gLeAvIDAgMKAyIDKgM+A -4IDngOuA7IDygPSA+oD7gPyBAQGBAQWBAQqBAQyBARGBAReBARyBAR2BASOBAU2BAU+BAVSBAVaBAViB -AVqBAVyBAV6BAWWBAWeBAWmBAWuBAW2BAdOBAdSBAdmBAgOBAgXUAA4AlQCWAJcAmACZAJoAm11OU0Rl -c3RpbmF0aW9uWE5TU291cmNlV05TTGFiZWyAGYAWgAuAGNgADgCdAJ4AnwCgAKEAogCjAKQApQCmAKcA -qACpAKoAq1dOU1RpdGxlXxARTlNLZXlFcXVpdk1vZE1hc2taTlNLZXlFcXVpdl1OU01uZW1vbmljTG9j -WU5TT25JbWFnZVxOU01peGVkSW1hZ2VWTlNNZW51gBWADRIAEgEKgA4Sf////4APgBOADNQADgCdAK0A -rgCvALAAsQCyVk5TTmFtZVtOU01lbnVJdGVtc4A7gQH0gQH8gQH2XxAkUGVyY29ycmVyIGphbmVsYXMg -bm8gc2VudGlkbyBpbnZlcnNvUX7TAA4AMgC2ALcAuAC5Xk5TUmVzb3VyY2VOYW1lgBKAEIARV05TSW1h -Z2VfEA9OU01lbnVDaGVja21hcmvSADoAOwC9AL6iAL4AP18QEE5TQ3VzdG9tUmVzb3VyY2XTAA4AMgC2 -ALcAuADCgBKAEIAUXxAQTlNNZW51TWl4ZWRTdGF0ZdIAOgA7AMUAxqIAxgA/Wk5TTWVudUl0ZW3SAA4A -MgAzAMmABYAXXVgxMUNvbnRyb2xsZXJfEBBwcmV2aW91c193aW5kb3c60gA6ADsAzQDOowDOAM8AP18Q -FU5TTmliQ29udHJvbENvbm5lY3Rvcl5OU05pYkNvbm5lY3RvctQADgCVAJYAlwDRANIAmQDUgCyAG4AW -gCvXANYADgDXANgA2QDaANsA3ADdAN4A3wDgAOEA3F8QD05TTmV4dFJlc3BvbmRlcldOU0ZyYW1lVk5T -Q2VsbFhOU3ZGbGFnc1lOU0VuYWJsZWRbTlNTdXBlcnZpZXeAHIAqgB2AHhEBAAmAHNUA1gAOANcA5ADZ -ACsA5gDnAOgA4FpOU1N1YnZpZXdzgACBAYaBAamBAaRfEBV7ezM0LCA5Nn0sIHs0MDksIDIzfX3eAOsA -DgDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoBAAEBANIBAwEEAQVbTlNDZWxs -RmxhZ3NfEBNOU0FsdGVybmF0ZUNvbnRlbnRzXU5TTm9ybWFsSW1hZ2VfEBJOU1BlcmlvZGljSW50ZXJ2 -YWxeTlNCdXR0b25GbGFnczJfEBBOU0FsdGVybmF0ZUltYWdlXxAPTlNLZXlFcXVpdmFsZW50Wk5TQ29u -dGVudHNZTlNTdXBwb3J0XU5TQ29udHJvbFZpZXdfEA9OU1BlcmlvZGljRGVsYXlcTlNDZWxsRmxhZ3My -XU5TQnV0dG9uRmxhZ3MSBAH+AIApgCiAIxAZEAKAJYAogB+AIIAbEMgQABJIPFH/bxA0AEEAYwB0AHUA -YQBsAGkAegBhAHIAIABDAEwASQBQAEIATwBBAFIARAAgAHEAdQBhAG4AZABvACAAYQAgAOEAcgBlAGEA -IABkAGUAIABjAG8AbABhAGcAZQBtACAAbQB1AGQAYQByAC7UAA4BCACtAQkBCgELAQwBDVZOU1NpemVY -TlNmRmxhZ3OAIiNAKgAAAAAAAIAhEQQUXEx1Y2lkYUdyYW5kZdIAOgA7ARABEaIBEQA/Vk5TRm9udNMA -DgAyALYAtwC4ARWAEoAQgCRYTlNTd2l0Y2jSAA4BGAEZARpbTlNJbWFnZU5hbWWAJ4Am0gA6ADsBHAEd -ogEdAD9fEBNOU0J1dHRvbkltYWdlU291cmNlUNIAOgA7ASABIaQBIQEiANgAP1xOU0J1dHRvbkNlbGxc -TlNBY3Rpb25DZWxs0gA6ADsBJAElpQElASYBJwEoAD9YTlNCdXR0b25ZTlNDb250cm9sVk5TVmlld1tO -U1Jlc3BvbmRlcl8QHHN5bmNfcGFzdGVib2FyZF90b19jbGlwYm9hcmTSADoAOwErASyjASwAzwA/XxAU -TlNOaWJPdXRsZXRDb25uZWN0b3LUAA4AlQCWAJcA0QEvAB8BMYAsgC6AAoA81AAOAJ0ArQCuAK8BNAD6 -ATaAO4AvgCiAMFRNZW510gAOAEUATQE6gDqiATsBPIAxgDLaAA4AnQCeAT4AnwE/AKAAoQCiAKMApAD6 -AUIA4QD6AOEAqACpAKoBL11OU0lzU2VwYXJhdG9yXE5TSXNEaXNhYmxlZIAVgCgSABAAAAmAKAmAD4AT -gC7aAA4BSgCdAJ4AnwCgAKEAogCjAUsApAFNAU4BQgD6AKgAqQCqAS8BU1lOU1N1Ym1lbnVYTlNBY3Rp -b26AFYA1gDOAKIAPgBOALoA0agBBAHAAbABpAGMAYQDnAPUAZQBzXnN1Ym1lbnVBY3Rpb2460wAOAJ0A -rgCvAU4BWYA7gDOANtIADgBFAE0BXIA6ogFdAV6AN4A42gAOAJ0AngE+AJ8BPwCgAKEAogCjAKQA+gFC -AOEA+gDhAKgAqQCqAU2AFYAoCYAoCYAPgBOANdgADgCdAJ4AnwCgAKEAogCjAKQBagFCAPoAqACpAKoB -TYAVgDmAKIAPgBOANW0AUABlAHIAcwBvAG4AYQBsAGkAegBhAHIgJtIAOgA7AXEBcqMBcgFzAD9eTlNN -dXRhYmxlQXJyYXlXTlNBcnJhedIAOgA7AXUAo6IAowA/WGRvY2tNZW511AAOAJUAlgCXAJgAmQF6AXuA -GYAWgD6AQ9cA1gAOANcA2ADZANoA2wF9AN0BfwGAAOAA4QF9gD+AKoBAgEEJgD/VANYADgDXAOQA2QAr -AOYBhgGHAOCAAIEBhoEBuoEBrV8QFnt7MTUsIDIxMn0sIHs0MDIsIDE4fX3eAOsADgDsAO0A7gDvAPAA -8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoBjwEBAXoBAwEEAQWAKYAogCOAJYAogEKAIIA+XxAi -Q2xpcXVlIGF0cmF2ZXNzYSBqYW5lbGFzIGluYWN0aXZhc15wcmVmc19jaGFuZ2VkOtQADgCVAJYAlwCY -AJkBlwGYgBmAFoBFgEvXANYADgDXANgA2QDaANsBmgDdAZwBnQGeAOEBmoBGgCqAR4BIEQEJCYBG1QDW -AA4A5ADZAaIAKwDmAaUA4AGmW05TRnJhbWVTaXplgACBAYaBAhaBAhdfEBd7ezM0MCwgMTU5fSwgezEy -MywgMzJ9fd0A6wAOAOwA7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD8AasBAQGtAa4BAQGXAQMBsQGy -gCmAKBABgCCASoBJgCCARRIIOAAAE/////+GgkD/V1JlbW92ZXLSAA4ANgA3AR6ABF8QEmFwcHNfdGFi -bGVfZGVsZXRlOtQADgCVAJYAlwCYAJkBugG7gBmAFoBNgE/YAA4AnQCeAJ8AoAChAKIAowCkAb4BQgD6 -AKgAqQCqAKuAFYBOgCiAD4ATgAxfEBlQYXNzYXIgdHVkbyBwYXJhIGEgZnJlbnRlXxAPYnJpbmdfdG9f -ZnJvbnQ61AAOAJUAlgCXAJgAmQHIAXuAGYAWgFGAQ9cA1gAOANcA2ADZANoA2wDcAN0BzQHOAOAA4QDc -gByAKoBSgFMJgBxfEBV7ezM0LCA3MX0sIHs1NTAsIDIzfX3eAOsADgDsAO0A7gDvAPAA8QDyAPMA9AD1 -APYA9wD4APkA+gD7APwA/QD+APoB2AEBAcgBAwEEAQWAKYAogCOAJYAogFSAIIBRbxBPAEEAYwB0AHUA -YQBsAGkAegBhAHIAIABQAFIASQBNAEEAUgBZACAAKABjAGwAaQBxAHUAZQAgAGMAbwBtACAAbwAgAGIA -bwB0AOMAbwAgAGMAZQBuAHQAcgBhAGwAKQAgAHEAdQBhAG4AZABvACAAYQAgAOEAcgBlAGEAIABkAGUA -IABjAG8AbABhAGcAZQBtACAAbQB1AGQAYQByAC7UAA4AlQCWAJcAmACZAd8Be4AZgBaAVoBD1wDWAA4A -1wDYANkA2gDbAeIB4wHkAeUA4ADhAeKAV4BsgFiAWQmAV9UA1gAOANcA5ADZACsA5gHrAewA4IAAgQGG -gQGggQGPXxAWe3s2NCwgMjAxfSwgezEzMSwgMjZ9fd8QEwDrAe8B8ADsAO4ADgDvAPAA8QDzAMYA9AHx -AfIB8wD1APYAowD3AfQA4QGrAPoB9wH4AasB+QH6AQEB/AHfAf4A4QDhAgECAgIDAgRfEBpOU01lbnVJ -dGVtUmVzcGVjdEFsaWdubWVudF8QD05TQXJyb3dQb3NpdGlvbl8QD05TUHJlZmVycmVkRWRnZV8QEk5T -VXNlc0l0ZW1Gcm9tTWVudV1OU0FsdGVyc1N0YXRlE/////+EQf5ACYAoEEuAa4BagFuAIIBcgFYQAwkJ -EQGQEQQAgF0SBoJA/9QADgEIAK0BCQEKAQsBDAIIgCKAIRAQ0gAOADYANwEegATcAgwADgCdAJ4AnwCg -AKEAogCjAUsCDQIOAeUApAIRAUIA+gCoAKkAqgIDAhYCFwGrWE5TVGFyZ2V0VU5TVGFnV05TU3RhdGWA -WYAVgF6AKIAPgBOAXYBfE///////////0wAOAJ0ArgCvAhoCG4A7gGCAYVpEbyBtb25pdG9yXxARX3Bv -cFVwSXRlbUFjdGlvbjrSAA4ANgA3AiCABFpPdGhlclZpZXdz0gAOAEUATQIjgDqkAfwCJQImAieAXIBi -gGWAaNsCDAAOAJ0AngCfAKAAoQCiAKMBSwINAeUApAIrAUIA+gCoAKkAqgIDAjACMYBZgBWAY4AogA+A -E4BdgGQQCFkyNTYgY29yZXPbAgwADgCdAJ4AnwCgAKEAogCjAUsCDQHlAKQCNgFCAPoAqACpAKoCAwI7 -AjyAWYAVgGaAKIAPgBOAXYBnEA9YTWlsaGFyZXPbAgwADgCdAJ4AnwCgAKEAogCjAUsCDQHlAKQCQQFC -APoAqACpAKoCAwJGAkeAWYAVgGmAKIAPgBOAXYBqEBhnAE0AaQBsAGgA9QBlAHPSADoAOwJKAkumAksC -TAEhASIA2AA/XxARTlNQb3BVcEJ1dHRvbkNlbGxeTlNNZW51SXRlbUNlbGzSADoAOwJOAk+mAk8BJQEm -AScBKAA/XU5TUG9wVXBCdXR0b27UAA4AlQCWAJcAmACZAlMCVIAZgBaAboBy2AAOAJ0AngCfAKAAoQCi -AKMApAJXAlgCWQCoAKkAqgJcgBWAcBIAGAAAgHGAD4ATgG/UAA4AnQCtAK4ArwJfAmACYYA7gQHegQHr -gQHgbxAWAEEAbAB0AGUAcgBuAGEAcgAgAGUAYwByAOMAIABjAG8AbQBwAGwAZQB0AG9RYV8QEnRvZ2ds -ZV9mdWxsc2NyZWVuOtQADgCVAJYAlwCYAB8CaAJpgBmAAoB0gHbXAA4AnQCfAKAAoQCiAKMApAJsAPoA -qACpAKoCXIAVgHWAKIAPgBOAb11BY2VyY2EgZG8gWDExXxAdb3JkZXJGcm9udFN0YW5kYXJkQWJvdXRQ -YW5lbDrUAA4AlQCWAJcA0QJTAJkCd4AsgG6AFoB4XxAWdG9nZ2xlX2Z1bGxzY3JlZW5faXRlbdQADgCV -AJYAlwCYAJkCfAF7gBmAFoB6gEPXANYADgDXANgA2QDaANsA3ADdAoECggDgAOEA3IAcgCqAe4B8CYAc -XxAWe3szNCwgMTU5fSwgezQwOSwgMjN9fd4A6wAOAOwA7QDuAO8A8ADxAPIA8wD0APUA9gD3APgA+QD6 -APsA/AD9AP4A+gKMAQECfAEDAQQBBYApgCiAI4AlgCiAfYAggHpvEDYAQQBjAHQAdQBhAGwAaQB6AGEA -cgAgAGEAIADhAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQAgAHEAdQBhAG4AZABvACAAbwAgAEMA -TABJAFAAQgBPAEEAUgBEACAAbQB1AGQAYQByAC7UAA4AlQCWAJcA0QKSAJkClIAsgH+AFoCD1wDWAA4A -1wDYANkA2gDbAX0A3QKYApkA4ADhAX2AP4AqgICAgQmAP18QFnt7MTUsIDEwN30sIHs0MDIsIDE4fX3e -AOsADgDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoCowEBApIBAwEEAQWAKYAo -gCOAJYAogIKAIIB/XxAVRm9jbyBlbSBqYW5lbGFzIG5vdmFzXxATZm9jdXNfb25fbmV3X3dpbmRvd9QA -DgCVAJYAlwCYAJkCkgF7gBmAFoB/gEPUAA4AlQCWAJcA0QKvAJkCsYAsgIaAFoCK1wDWAA4A1wDYANkA -2gDbAeIA3QK1ArYA4ADhAeKAV4AqgIeAiAmAV18QFnt7MTgsIDE0OX0sIHs0MDksIDIzfX3eAOsADgDs -AO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoCwAEBAq8BAwEEAQWAKYAogCOAJYAo -gImAIICGbxASAE0AbwBkAG8AIABlAGMAcgDjACAAYwBvAG0AcABsAGUAdABvXxARZW5hYmxlX2Z1bGxz -Y3JlZW7UAA4AlQCWAJcA0QLHAJkCyYAsgIyAFoCO2gAOAJ0AngE+AJ8BPwCgAKEAogCjAKQA+gFCAOEA -+gDhAKgAqQCqAtKAFYAoCYAoCYAPgBOAjdMADgCdAK4ArwFOAtaAO4AzgQHuXmFwcHNfc2VwYXJhdG9y -1AAOAJUAlgCXAJgAmQLbAtyAGYAWgJCAk9gADgCdAJ4AnwCgAKEAogCjAKQC3wFCAuAAqACpAKoAq4AV -gJGAkoAPgBOADFlNaW5pbWl6YXJRbV8QEG1pbmltaXplX3dpbmRvdzrUAA4AlQCWAJcA0QLpAJkC64As -gJWAFoCa1wDWAA4A1wDYANkA2gDbAu0A3QLvAvAA4ADhAu2AloAqgJeAmAmAltYA1gAOANcA5ADZANsC -9ADmAvYC9wDgAvSBAXaBAYaBAYWBAXiBAXZfEBV7ezE4LCA5MX0sIHs0MDIsIDE4fX3eAOsADgDsAO0A -7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoDAAEBAukBAwEEAQWAKYAogCOAJYAogJmA -IICVbxAsAEEAYwB0AGkAdgBhAHIAIABhAHMAIABlAHEAdQBpAHYAYQBsAOoAbgBjAGkAYQBzACAAZABl -ACAAdABlAGMAbABhAGQAbwAgAHAAYQByAGEAIABYADEAMV8QEGVuYWJsZV9rZXllcXVpdnPUAA4AlQCW -AJcAmACZAV4DCYAZgBaAOICcXxAQYXBwc190YWJsZV9zaG93OtQADgCVAJYAlwCYAJkDDgF7gBmAFoCe -gEPXANYADgDXANgA2QDaANsDEQDdAxMDFADgAOEDEYCfgCqAoIChCYCf1QDWAA4A1wDkANkAKwDmAxoD -GwDggACBAYaBAcqBAb1fEBZ7ezE4LCAyMTB9LCB7NDAyLCAxOH193gDrAA4A7ADtAO4A7wDwAPEA8gDz -APQA9QD2APcA+AD5APoA+wD8AP0A/gD6AyMBAQMOAQMBBAEFgCmAKIAjgCWAKICigCCAnm8QEwBBAHUA -dABlAG4AdABpAGMAYQByACAAbABpAGcAYQDnAPUAZQBz1AAOAJUAlgCXAJgAHwMqAyuAGYACgKSAp9gA -DgCdAJ4AnwCgAKEAogCjAKQDLgJYAy8AqACpAKoCXIAVgKWApoAPgBOAb28QGQBPAGMAdQBsAHQAYQBy -ACAAbwB1AHQAcgBhAHMAIABhAHAAbABpAGMAYQDnAPUAZQBzUWhfEBZoaWRlT3RoZXJBcHBsaWNhdGlv -bnM61AAOAJUAlgCXANEDOACZAzqALICpgBaAqtoADgCdAJ4BPgCfAT8AoAChAKIAowCkAPoBQgDhAPoA -4QCoAKkAqgCrgBWAKAmAKAmAD4ATgAxfEBB3aW5kb3dfc2VwYXJhdG9y1AAOAJUAlgCXANEByACZA0mA -LIBRgBaArF8QGnN5bmNfcGFzdGVib2FyZF90b19wcmltYXJ51AAOAJUAlgCXAJgAmQKvA0+AGYAWgIaA -rl8QGmVuYWJsZV9mdWxsc2NyZWVuX2NoYW5nZWQ61AAOAJUAlgCXAJgAmQNUAXuAGYAWgLCAQ9cA1gAO -ANcA2ADZANoA2wDcAN0DWQNaAOAA4QDcgByAKoCxgLIJgBxfEBV7ezM0LCA0Nn0sIHs1NDQsIDIzfX3e -AOsADgDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoDZAEBA1QBAwEEAQWAKYAo -gCOAJYAogLOAIICwbxBOAEEAYwB0AHUAYQBsAGkAegBhAHIAIABhACAA4QByAGUAYQAgAGQAZQAgAGMA -bwBsAGEAZwBlAG0AIABpAG0AZQBkAGkAYQB0AGEAbQBlAG4AdABlACAAcQB1AGEAbgBkAG8AIABmAG8A -cgAgAHMAZQBsAGUAYwBjAGkAbwBuAGEAZABvACAAdABlAHgAdABvACAAbgBvAHYAbwAu1AAOAJUAlgCX -AJgAmQNrAwmAGYAWgLWAnNgADgCdAJ4AnwCgAKEAogCjAKQDbwFCAPoAqACpAKoC0oAVgLaAKIAPgBOA -jV8QD1BlcnNvbmFsaXphci4uLtQADgCVAJYAlwCYAJkDeAF7gBmAFoC4gEPXANYADgDXANgA2QDaANsB -4gDdA30DfgDgAOEB4oBXgCqAuYC6CYBXXxAVe3sxOCwgNjN9LCB7NDAyLCAxOH193gDrAA4A7ADtAO4A -7wDwAPEA8gDzAPQA9QD2APcA+AD5APoA+wD8AP0A/gD6A4gBAQN4AQMBBAEFgCmAKIAjgCWAKIC7gCCA -uF8QJlV0aWxpemFyIG8gZWZlaXRvIGRlIGFsZXJ0YSBkbyBzaXN0ZW1h1AAOAJUAlgCXAJgAHwOPA5CA -GYACgL2Av9kADgCdAJ4AnwCgAKEAogCjAg0ApAOTAUIA+gCoAKkAqgJcA5iAFYC+gCiAD4ATgG8QKlxN -b3N0cmFyIHR1ZG9fEBZ1bmhpZGVBbGxBcHBsaWNhdGlvbnM61AAOAJUAlgCXANEDVACZA5+ALICwgBaA -wV8QGHN5bmNfcHJpbWFyeV9pbW1lZGlhdGVsedQADgCVAJYAlwDRA6MAmQOlgCyAw4AWgMfXANYADgDX -ANgA2QDaANsBfQDdA6kDqgDgAOEBfYA/gCqAxIDFCYA/XxAWe3sxNSwgMTUxfSwgezQwMiwgMTh9fd4A -6wAOAOwA7QDuAO8A8ADxAPIA8wD0APUA9gD3APgA+QD6APsA/AD9AP4A+gO0AQEDowEDAQQBBYApgCiA -I4AlgCiAxoAggMNfEBFGb2NvIHNlZ3VlIG8gcmF0b18QE2ZvY3VzX2ZvbGxvd3NfbW91c2XUAA4AlQCW -AJcA0QJ8AJkDvYAsgHqAFoDJXxAcc3luY19jbGlwYm9hcmRfdG9fcGFzdGVib2FyZNQADgCVAJYAlwCY -AJkDwgPDgBmAFoDLgM7YAA4AnQCeAJ8AoAChAKIAowCkA8YBQgD6AKgAqQCqA8qAFYDNgCiAD4ATgMzT -AA4AnQCuAK8DzQPOgDuBAf6BAgBcQWp1ZGEgZG8gWDExWXgxMV9oZWxwOtQADgCVAJYAlwDRA9MAmQPV -gCyA0IAWgN/XANYADgDXANgA2QDaANsA3APYA9kD2gDgAOEA3IAcgN6A0YDSCYAcXxAWe3s0OCwgMTI1 -fSwgezUwOSwgMjh9fdgA6wAOA98A8gDzAPQA9gPgAPgD4QPiA+MD5APTA+YD518QEU5TQmFja2dyb3Vu -ZENvbG9yW05TVGV4dENvbG9ygN2A1YDTgNSA0BIAQAAAgNpvEG0ARABlAHMAYQBjAHQAaQB2AGUAIABl -AHMAdABhACAAbwBwAOcA4wBvACAAcwBlACAAcAByAGUAdABlAG4AZABlAHIAIAB1AHQAaQBsAGkAegBh -AHIAIABvACAAeABjAGwAaQBwAGIAbwBhAHIAZAAsACAAbwAgAGsAbABpAHAAcABlAHIAIABvAHUAIABx -AHUAYQBsAHEAdQBlAHIAIABvAHUAdAByAG8AIABnAGUAcwB0AG8AcgAgAGQAZQAgAGMAbABpAHAAYgBv -AGEAcgBkACAAWAAxADEALtQADgEIAK0BCQEKA+sBDAPtgCIjQCYAAAAAAACAIREMHNUADgPvA/AD8QPy -A/MD9AP1A/YD91dOU0NvbG9yXE5TQ29sb3JTcGFjZVtOU0NvbG9yTmFtZV1OU0NhdGFsb2dOYW1lgNmA -2BAGgNeA1lZTeXN0ZW1cY29udHJvbENvbG9y0wAOA/AD+wPzAf4D/VdOU1doaXRlgNlLMC42NjY2NjY2 -OQDSADoAOwP/A++iA+8AP9UADgPvA/AD8QPyA/MEAgP1BAMD94DZgNyA24DWXxAQY29udHJvbFRleHRD -b2xvctMADgPwA/sD8wH+BAiA2UIwANIAOgA7BAoEC6QECwEiANgAP18QD05TVGV4dEZpZWxkQ2VsbNIA -OgA7BA0EDqUEDgEmAScBKAA/W05TVGV4dEZpZWxkWnN5bmNfdGV4dDHUAA4AlQCWAJcAmACZBBMEFIAZ -gBaA4YDm1wDWAA4A1wDYANkA2gDbAZoA3QQYBBkBngDhAZqARoAqgOKA4wmARl8QF3t7MzQwLCAyMjN9 -LCB7MTIzLCAzMn193QDrAA4A7ADuAO8A8ADxAPIA8wD0APUA9gD3BB4A+QD6APwBqwEBBCIEIwEBBBMB -AwGxAbIT/////4QB/gCAKYAogCCA5YDkgCCA4V8QEkFkaWNpb25hciBlbGVtZW50b9IADgA2ADcBHoAE -XxAPYXBwc190YWJsZV9uZXc61AAOAJUAlgCXAJgAmQQtBC6AGYAWgOiA6tgADgCdAJ4AnwCgAKEAogCj -AKQEMQFCAPoAqACpAKoAq4AVgOmAKIAPgBOADFRab29tXHpvb21fd2luZG93OtQADgCVAJYAlwCYAJkC -6QF7gBmAFoCVgEPUAA4AlQCWAJcA0QQ/AJkEQYAsgO2AFoDx1wDWAA4A1wDYANkA2gDbANwD2ARFBEYA -4ADhANyAHIDegO6A7wmAHF8QFXt7NDgsIDE0fSwgezUzNCwgMjh9fdgA6wAOA98A8gDzAPQA9gPgAPgD -4QPiBE0D5AQ/A+YD54DdgNWA8IDUgO2A2m8QXQBEAGUAdgBpAGQAbwAgAGEAIABsAGkAbQBpAHQAYQDn -APUAZQBzACAAZABvACAAcAByAG8AdABvAGMAbwBsAG8AIABYADEAMQAsACAAZQBzAHQAYQAgAG8AcADn -AOMAbwAgAG4AZQBtACAAcwBlAG0AcAByAGUAIABmAHUAbgBjAGkAbwBuAGEAcgDhACAAZQBtACAAYQBs -AGcAdQBtAGEAcwAgAGEAcABsAGkAYwBhAOcA9QBlAHMALlpzeW5jX3RleHQy1AAOAJUAlgCXANEBOwCZ -BFeALIAxgBaA818QFWRvY2tfd2luZG93X3NlcGFyYXRvctMADgCWAJcAmARbBFyAGYD1gPnYAA4AnQCe -AJ8AoAChAKIAowCkBF8BQgRgAKgAqQCqBGOAFYD3gPiAD4ATgPbTAA4AnQCuAK8EZgRngDuBAfCBAfJW -Q29waWFyUWNVY29weTrUAA4AlQCWAJcAmACZA6MBe4AZgBaAw4BD1AAOAJUAlgCXAJgAmQDSAXuAGYAW -gBuAQ9QADgCVAJYAlwCYAB8EeAR5gBmAAoD9gQEA2AAOAJ0AngCfAKAAoQCiAKMApAR8AUIEfQCoAKkA -qgJcgBWA/oD/gA+AE4BvW1NhaXIgZG8gWDExUXFadGVybWluYXRlOtQADgCVAJYAlwCYAB8EhwSIgBmA -AoEBAoEBBNkADgCdAJ4AnwCgAKEAogCjAg0ApASLAUIDLwCoAKkAqgJcA5iAFYEBA4CmgA+AE4BvXU9j -dWx0YXIgbyBYMTFVaGlkZTrUAA4AlQCWAJcAmACZBJUBe4AZgBaBAQaAQ9cA1gAOANcA2ADZANoA2wDc -AN0EmgSbAOAA4QDcgByAKoEBB4EBCAmAHF8QFnt7MTgsIDIyMn0sIHs0MDksIDIzfX3eAOsADgDsAO0A -7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoEpQEBBJUBAwEEAQWAKYAogCOAJYAogQEJ -gCCBAQZvEBUAQQBjAHQAaQB2AGEAcgAgAHMAaQBuAGMAcgBvAG4AaQB6AGEA5wDjAG/UAA4AlQCWAJcA -0QFNAJkErYAsgDWAFoEBC15kb2NrX2FwcHNfbWVuddQADgCVAJYAlwCYAJkEsgF7gBmAFoEBDYBD1wDW -AA4A1wDYANkA2gDbAeIA3QS3BLgA4ADhAeKAV4AqgQEOgQEPCYBXXxAVe3szNywgODh9LCB7NDc2LCAx -OH193gDrAA4A7ADtAO4A7wDwAPEA8gDzAPQA9QD2APcA+AD5APoA+wD8AP0A/gD6BMIBAQSyAQMBBAEF -gCmAKIAjgCWAKIEBEIAggQENbxBBAE0AbwBzAHQAcgBhAHIAIABhAHUAdABvAG0AYQB0AGkAYwBhAG0A -ZQBuAHQAZQAgAGEAIABiAGEAcgByAGEAIABkAGUAIABtAGUAbgB1AHMAIABlAG0AIABtAG8AZABvACAA -ZABlACAAZQBjAHIA4wAgAGMAbwBtAHAAbABlAHQAb9QADgCVAJYAlwDRBMgAmQTKgCyBARKAFoEBFtcA -1gAOANcA2ADZANoA2wMRAN0EzgTPAOAA4QMRgJ+AKoEBE4EBFAmAn18QFnt7MTgsIDEzM30sIHs0MDIs -IDE4fX3eAOsADgDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoE2QEBBMgBAwEE -AQWAKYAogCOAJYAogQEVgCCBARJvECUAUABlAHIAbQBpAHQAaQByACAAbABpAGcAYQDnAPUAZQBzACAA -ZABlACAAYwBsAGkAZQBuAHQAZQBzACAAZABhACAAcgBlAGQAZVplbmFibGVfdGNw1AAOAJUAlgCXAJgA -mQThBOKAGYAWgQEYgQEb2AAOAJ0AngCfAKAAoQCiAKMApATlAUIE5gCoAKkAqgJcgBWBARmBARqAD4AT -gG9vEA8AUAByAGUAZgBlAHIA6gBuAGMAaQBhAHMALgAuAC5RLFtwcmVmc19zaG93OtQADgCVAJYAlwCY -AJkEyAF7gBmAFoEBEoBD1AAOAJUAlgCXANEE9ACZBPaALIEBHoAWgQEi1wDWAA4A1wDYANkA2gDbAu0A -3QT6BPsA4ADhAu2AloAqgQEfgQEgCYCWXxAWe3sxOCwgMTQ2fSwgezQwMiwgMTh9fd4A6wAOAOwA7QDu -AO8A8ADxAPIA8wD0APUA9gD3APgA+QD6APsA/AD9AP4A+gUFAQEE9AEDAQQBBYApgCiAI4AlgCiBASGA -IIEBHm8QKQBTAGUAZwB1AGkAcgAgAGEAIABkAGkAcwBwAG8AcwBpAOcA4wBvACAAZABvACAAdABlAGMA -bABhAGQAbwAgAGQAbwAgAHMAaQBzAHQAZQBtAGFbc3luY19rZXltYXDUAA4AlQCWAJcA0QUMAJkFDoAs -gQEkgBaBAUzfEBMA1gUQAA4FEQUSA98FEwUUBRUFFgUXANkBogDaBRgFGQDbBRoFGwUcAQQFHQUeBR8F -IADhBSIFIwGrBSQA4AUlAOEFJwIXBRwFKQUqXxAfTlNEcmFnZ2luZ1NvdXJjZU1hc2tGb3JOb25Mb2Nh -bFlOU1R2RmxhZ3NcTlNIZWFkZXJWaWV3XxASTlNBbGxvd3NUeXBlU2VsZWN0XE5TQ29ybmVyVmlld18Q -F05TSW50ZXJjZWxsU3BhY2luZ1dpZHRoXxAZTlNDb2x1bW5BdXRvcmVzaXppbmdTdHlsZV8QGE5TSW50 -ZXJjZWxsU3BhY2luZ0hlaWdodFtOU0dyaWRDb2xvcl8QHE5TRHJhZ2dpbmdTb3VyY2VNYXNrRm9yTG9j -YWxeTlNUYWJsZUNvbHVtbnNbTlNSb3dIZWlnaHSBASWBAUsSUkCAAIEBJ4EBOQmBASsjQAgAAAAAAAAj -QAAAAAAAAACBASYJgQFIgQElgQEvI0AxAAAAAAAA2gDWAA4A1wUsAOQA2QUtBS4A2wUvBTAFMQUyBTMF -NAU1BQwFNwUwBQxZTlNjdkZsYWdzWU5TRG9jVmlld1lOU0JHQ29sb3JdTlNOZXh0S2V5Vmlld4EBLIEC -D4ECDhAEgQINEQkAgQEkgQFGgQEsgQEkWnszMDEsIDE5OH3WANYADgDZAaIA2wU8BT0FPgDgBT8FPQUM -W05TVGFibGVWaWV3gQEogQEqgQEpgQEogQEk2gDWAA4A1wUsAOQA2QUtBS4A2wUvBTAFMQVFBTMFRgU1 -BR8FNwUwBR+BASyBAg+BAhOBAhKBASeBAUaBASyBASdZezMwMSwgMTd90gA6ADsFTQVOpAVOAScBKAA/ -XxARTlNUYWJsZUhlYWRlclZpZXfVANYADgDXANkA2wUwBVEFUgDgBTCBASyBAS6BAS2BASzeANYFVQAO -ANcFVgUUBVcA5AVYANkA2wVZBS8FWgGaBVwFXQVeBV8FIgU9BWIFYwVkAZoFZgUcBRxbTlNIU2Nyb2xs -ZXJYTlNzRmxhZ3NfEBBOU0hlYWRlckNsaXBWaWV3XE5TU2Nyb2xsQW10c1tOU1ZTY3JvbGxlcl1OU0Nv -bnRlbnRWaWV3gEaBAgiBAhWBAhQQMoEBK4EBKIECDE8QEEEgAABBIAAAQZgAAEGYAAARARKARoECEIEB -JYEBJV8QFHt7MzAyLCAwfSwgezE2LCAxN3190gA6ADsFawVspAVsAScBKAA/XV9OU0Nvcm5lclZpZXfS -AA4ARQBNBW+AOqMFcAVxBXKBATCBATuBAT/aBXQADgV1BXYFdwV4BXkFegV7BTwA4QV9BX4FfwWAAf4F -gQWCAOEFDF5OU0lzUmVzaXplYWJsZVxOU0hlYWRlckNlbGxXTlNXaWR0aFpOU0RhdGFDZWxsXk5TUmVz -aXppbmdNYXNrWk5TTWluV2lkdGhaTlNNYXhXaWR0aFxOU0lzRWRpdGFibGUJgQE6gQExI0BersjAAAAA -gQE3I0BPXZFgAAAAI0CPQAAAAAAACYEBJNcA6wAOA98A8gDzAPYD4AWGBYcFiAWJA+QBBAWLEgSB/gCB -ATaBATOBATKA1IEBNFROb21l0wAOA/AD+wPzAf4Fj4DZSzAuMzMzMzMyOTkA1QAOA+8D8APxA/ID8wQC -A/UFkwP3gNmA3IEBNYDWXxAPaGVhZGVyVGV4dENvbG9y0gA6ADsFlwWYpQWYBAsBIgDYAD9fEBFOU1Rh -YmxlSGVhZGVyQ2VsbNkA6wAOA98A8gDzAPQA9gWaA+AFmwPhBSAFngEBBQwCAgD6A+dfEBNOU1BsYWNl -aG9sZGVyU3RyaW5nEhQx/kCA3YEBOYEBOIAggQEkgCiA2m8QDwBDAOkAbAB1AGwAYQAgAGQAZQAgAHQA -ZQB4AHQAb9MADgPwA/sD8wH+BaaA2UIxANIAOgA7BagFqaIFqQA/XU5TVGFibGVDb2x1bW7aBXQADgV1 -BXYFdwV4BXkFegV7BTwA4QV9Ba0FrgWvAf4FsAWCAOEFDAmBATqBATwjQFkAAAAAAACBAT4jQEQAAAAA -AAAJgQEk1wDrAA4D3wDyAPMA9gPgBYYFhwWIBbYD5AEEBYuBATaBATOBAT2A1IEBNFdDb21hbmRv2QDr -AA4D3wDyAPMA9AD2BZoD4AWbA+EFIAWeAQEFDAICAPoD54DdgQE5gQE4gCCBASSAKIDa2gV0AA4FdQV2 -BXcFeAV5BXoFewU8AOEFfQXFBcYFxwH+BcgFggDhBQwJgQE6gQFAI0BRQAAAAAAAgQFEI0AkAAAAAAAA -CYEBJNcA6wAOA98A8gDzAPYD4AD4BYcFzQXOA+QBBAWLgQE2gQFCgQFBgNSBATRWQXRhbGhv1QAOA+8D -8APxA/ID8wUgA/UF1QP3gNmBATmBAUOA1ltoZWFkZXJDb2xvctoA6wAOA98A8gDzAPQA9gXZBZoD4AWb -A+EFNwWeBd0FDAICAOEA+gPnXxARTlNEcmF3c0JhY2tncm91bmSA3YEBRoEBOIEBRYEBJAmAKIDa1AAO -AQgArQEJAQoF5AEMAgiAIiNAKAAAAAAAAIAh1QAOA+8D8APxA/ID8wP0A/UF6QP3gNmA2IEBR4DWXxAW -Y29udHJvbEJhY2tncm91bmRDb2xvctUADgPvA/AD8QPyA/MF7gP1Be8D94DZgQFKgQFJgNZZZ3JpZENv -bG9y0wAOA/AD+wPzAf4F9IDZRDAuNQDSADoAOwX2BTylBTwBJgEnASgAP1phcHBzX3RhYmxl1AAOAJUA -lgCXANEB3wCZBfyALIBWgBaBAU5VZGVwdGjUAA4AlQCWAJcAmACZBgEBe4AZgBaBAVCAQ9cA1gAOANcA -2ADZANoA2wLtAN0GBgYHAOAA4QLtgJaAKoEBUYEBUgmAlt4A6wAOAOwA7QDuAO8A8ADxAPIA8wD0APUA -9gD3APgA+QD6APsA/AD9AP4A+gYQAQEGAQEDAQQBBYApgCiAI4AlgCiBAVOAIIEBUG8QGwBTAGkAbQB1 -AGwAYQByACAAcgBhAHQAbwAgAGQAZQAgAHQAcgDqAHMAIABiAG8AdAD1AGUAc9QADgCVAJYAlwDRAS8A -mQYYgCyALoAWgQFVWWRvY2tfbWVuddQADgCVAJYAlwDRBJUAmQYegCyBAQaAFoEBV18QD3N5bmNfcGFz -dGVib2FyZNQADgCVAJYAlwDRAmgAmQYkgCyAdIAWgQFZXngxMV9hYm91dF9pdGVt1AAOAJUAlgCXANEA -mQAfBiqALIAWgAKBAVtYZGVsZWdhdGXUAA4AlQCWAJcA0QN4AJkGMIAsgLiAFoEBXVt1c2Vfc3lzYmVl -cNQADgCVAJYAlwCYAJkGNQY2gBmAFoEBX4EBZNcA1gAOANcA2ADZANoA2wGaAN0GOgY7AZ4A4QGagEaA -KoEBYIEBYQmARl8QF3t7MzQwLCAxOTF9LCB7MTIzLCAzMn193QDrAA4A7ADuAO8A8ADxAPIA8wD0APUA -9gD3APgA+QD6APwBqwEBBkMGRAEBBjUBAwGxAbKAKYAogCCBAWOBAWKAIIEBX1hEdXBsaWNhctIADgA2 -ADcBHoAEXxAVYXBwc190YWJsZV9kdXBsaWNhdGU61AAOAJUAlgCXANEEsgCZBk+ALIEBDYAWgQFmXxAW -ZW5hYmxlX2Z1bGxzY3JlZW5fbWVuddQADgCVAJYAlwDRAw4AmQZVgCyAnoAWgQFoW2VuYWJsZV9hdXRo -1AAOAJUAlgCXANEGAQCZBluALIEBUIAWgQFqXGZha2VfYnV0dG9uc9QADgCVAJYAlwDRAXoAmQZhgCyA -PoAWgQFsXWNsaWNrX3Rocm91Z2jUAA4AlQCWAJcA0QZlAJkGZ4AsgQFugBaBAdLdBmkADgZqBmsGbAZt -Bm4GbwZwBnEGcgZzBnQGdQZ2BncGeAZ5BnoGewZ8Bn0A/QH+Bn4Gf1xOU1dpbmRvd1ZpZXdcTlNTY3Jl -ZW5SZWN0XxATTlNGcmFtZUF1dG9zYXZlTmFtZV1OU1dpbmRvd1RpdGxlWU5TV1RGbGFnc11OU1dpbmRv -d0NsYXNzXxAWTlNXaW5kb3dDb250ZW50TWluU2l6ZVxOU1dpbmRvd1JlY3RfEA9OU1dpbmRvd0JhY2tp -bmdfEBFOU1dpbmRvd1N0eWxlTWFza1lOU01pblNpemVbTlNWaWV3Q2xhc3OBAXSBAdGBAc6BAdCBAXAS -UHgAAIEBcYEBc4EBb4EBz4EBcl8QGHt7MzE5LCAzMjh9LCB7NjMzLCAzMDh9fW8QEwBQAHIAZQBmAGUA -cgDqAG4AYwBpAGEAcwAgAGQAbwAgAFgAMQAxV05TUGFuZWzSAA4ANgA3BoWABFRWaWV3WnszMjAsIDI0 -MH3VANYADgDkANkBogArAOYGigDgBouAAIEBhoEBdYEBzdIADgBFAE0GjoA6oQL0gQF23ADWAA4GkQUR -ANcBEQDkANkF2QDbBpIGkwZ1BpUGlgEEBpcBAQaZAOAA4QZ1AOEGnV5OU1RhYlZpZXdJdGVtc18QFk5T -QWxsb3dUcnVuY2F0ZWRMYWJlbHNfEBVOU1NlbGVjdGVkVGFiVmlld0l0ZW2BAXSBAcyBAYiBAYeAIIEB -dwmBAXQJgQGJ0gAOAEUATQaggDqhAu2AltIADgBFAE0GpIA6pgYBBqYGpwLpBqkE9IEBUIEBeYEBfYCV -gQGBgQEe1wDWAA4A1wDYANkA2gDbAu0D2AauBq8A4ADhAu2AloDegQF6gQF7CYCWXxAVe3szNiwgNTd9 -LCB7NTEwLCAyOH192QDrAA4D3wDyAPMA9AD2BZoD4AD4A+ED4ga2A+QGpgPmAPoD54DdgNWBAXyA1IEB -eYAogNpvEIMAUwBlACAAZQBzAHQAaQB2AGUAcgBlAG0AIABhAGMAdABpAHYAYQBzACwAIABhAHMAIAB0 -AGUAYwBsAGEAcwAgAGUAcQB1AGkAdgBhAGwAZQBuAHQAZQBzACAAZABhACAAYgBhAHIAcgBhACAAZABl -ACAAbQBlAG4AdQBzACAAcABvAGQAZQBtACAAaQBuAHQAZQByAGYAZQByAGkAcgAgAG4AYQBzACAAYQBw -AGwAaQBjAGEA5wD1AGUAcwAgAFgAMQAxACAAcQB1AGUAIAB1AHQAaQBsAGkAegBhAG0AIABvACAAbQBv -AGQAaQBmAGkAYwBhAGQAbwByACAATQBlAHQAYQAu1wDWAA4A1wDYANkA2gDbAu0D2Aa/BsAA4ADhAu2A -loDegQF+gQF/CYCWXxAWe3szNiwgMTY1fSwgezUxMCwgMzl9fdkA6wAOA98A8gDzAPQA9gWaA+AA+APh -A+IGxwPkBqcD5gD6A+eA3YDVgQGAgNSBAX2AKIDabxBrAEEAbwAgAGMAbABpAGMAYQByACwAIABtAGEA -bgB0AGUAbgBoAGEAIABwAHIAZQBtAGkAZABhAHMAIABhAHMAIAB0AGUAYwBsAGEAcwAgAE8AcADnAOMA -bwAgAG8AdQAgAEMAbwBtAGEAbgBkAG8AIABwAGEAcgBhACAAYQBjAHQAaQB2AGEAcgAgAG8AcwAgAGIA -bwB0APUAZQBzACAAYwBlAG4AdAByAGEAbAAgAG8AdQAgAGQAaQByAGUAaQB0AG8AIABkAG8AIAByAGEA -dABvAC4ACtcA1gAOANcA2ADZANoA2wLtA9gG0AbRAOAA4QLtgJaA3oEBgoEBgwmAll8QFnt7MzYsIDEy -MX0sIHs1MTAsIDE5fX3ZAOsADgPfAPIA8wD0APYFmgPgAPgD4QPiBtgD5AapA+YA+gPngN2A1YEBhIDU -gQGBgCiA2m8QWQBQAGUAcgBtAGkAdABlACAAcQB1AGUAIABhAGwAdABlAHIAYQDnAPUAZQBzACAAZABv -ACAAbQBlAG4AdQAgAGQAZQAgAGUAbgB0AHIAYQBkAGEAIABzAGUAIABzAG8AYgByAGUAcABvAG4AaABh -AG0AIABhAG8AIABhAGMAdAB1AGEAbAAgAG0AYQBwAGEAIABkAGUAIAB0AGUAYwBsAGEAcwAgAGQAbwAg -AFgAMQAxAC5fEBZ7ezEwLCAzM30sIHs1ODcsIDI0Nn190gA6ADsG4AEnowEnASgAP18QFnt7MTMsIDEw -fSwgezYwNywgMjkyfX3SAA4ARQBNBuSAOqUGnQbmBucG6AbpgQGJgQGNgQGigQGrgQG81gAOBusBJwbs -A+8AlwbtBu4C7QL0A+IG8lxOU0lkZW50aWZpZXJZTlNUYWJWaWV3gQGMgQGKgJaBAXaA1YEBi9IADgA2 -ADcG9YAEUTFXRW50cmFkYdIAOgA7BvgG+aIG+QA/XU5TVGFiVmlld0l0ZW3WAA4G6wEnBuwD7wCXBu0G -/AHiAvQD4gcAgQGMgQGOgFeBAXaA1YEBodIADgA2ADcHA4AEUTLSAA4ARQBNBwaAOqgDeAcIAd8HCgcL -Aq8EsgcOgLiBAZCAVoEBlIEBmICGgQENgQGc1wDWAA4A1wDYANkA2gDbAeID2AcSBxMA4ADhAeKAV4De -gQGRgQGSCYBXXxAVe3szNiwgMTV9LCB7NTIxLCA0Mn192QDrAA4D3wDyAPMA9AD2BZoD4AD4A+ED4gca -A+QHCAPmAPoD54DdgNWBAZOA1IEBkIAogNpvEIoATwBzACAAcwBpAG4AYQBpAHMAIABzAG8AbgBvAHIA -bwBzACAAZABvACAAWAAxADEAIAB1AHQAaQBsAGkAegBhAHIA4wBvACAAbwAgAGEAbABlAHIAdABhACAA -cABhAGQAcgDjAG8AIABkAG8AIABzAGkAcwB0AGUAbQBhACwAIAB0AGEAbAAgAGMAbwBtAG8AIABlAHMA -dABpAHYAZQByACAAZABlAGYAaQBuAGkAZABvACAAZQBtACAARQBmAGUAaQB0AG8AcwAgAHMAbwBuAG8A -cgBvAHMALAAgAG4AYQBzACAAcAByAGUAZgBlAHIA6gBuAGMAaQBhAHMAIABkAG8AIABzAGkAcwB0AGUA -bQBhAC7XANYADgDXANgA2QDaANsB4gPYByMHJADgAOEB4oBXgN6BAZWBAZYJgFdfEBV7ezE3LCAyMDV9 -LCB7NTUsIDIwfX3ZAOsADgPfAPIA8wD0APYFmgPgAPgD4QPiBysBAQcKA+YA+gPngN2A1YEBl4AggQGU -gCiA2ldDb3JlczoK1wDWAA4A1wDYANkA2gDbAeID2Ac0BzUA4ADhAeKAV4DegQGZgQGaCYBXXxAWe3sz -NiwgMTgzfSwgezM5MiwgMTR9fdkA6wAOA98A8gDzAPQA9gWaA+AA+APhA+IHPAPkBwsD5gD6A+eA3YDV -gQGbgNSBAZiAKIDabxBDAEUAcwB0AGEAIABvAHAA5wDjAG8AIABlAG4AdAByAGEAcgDhACAAZQBtACAA -dgBpAGcAbwByACAAZABhACAAcAByAPMAeABpAG0AYQAgAHYAZQB6ACAAcQB1AGUAIABvACAAWAAxADEA -IABmAG8AcgAgAGUAeABlAGMAdQB0AGEAZABvAC7XANYADgDXANgA2QDaANsB4gPYB0UHRgDgAOEB4oBX -gN6BAZ2BAZ4JgFdfEBZ7ezM2LCAxMTV9LCB7NTIxLCAyOH192QDrAA4D3wDyAPMA9AD2BZoD4AD4A+ED -4gdNA+QHDgPmAPoD54DdgNWBAZ+A1IEBnIAogNpvEHgAQQBjAHQAaQB2AGEAIABhACAAagBhAG4AZQBs -AGEAIAByAGEAaQB6ACAAZABvACAAWAAxADEALgAgAFUAdABpAGwAaQB6AGUAIABhACAAYwBvAG0AYgBp -AG4AYQDnAOMAbwAgAGQAZQAgAHQAZQBjAGwAYQBzACAAQwBvAG0AYQBuAGQAbwAtAE8AcADnAOMAbwAt -AEEAIABwAGEAcgBhACAAZQBuAHQAcgBhAHIAIABlACAAcwBhAGkAcgAgAGQAbwAgAG0AbwBkAG8AIABk -AGUAIABlAGMAcgDjACAAYwBvAG0AcABsAGUAdABvAC5lAFMAYQDtAGQAYdYADgbrAScG7APvAJcG7QdW -ANwC9APiB1qBAYyBAaOAHIEBdoDVgQGq0gAOADYANwcDgATSAA4ARQBNB1+AOqgElQdhANIByANUAnwD -0wQ/gQEGgQGlgBuAUYCwgHqA0IDt1wDWAA4A1wDYANkA2gDbANwD2AdrB2wA4ADhANyAHIDegQGmgQGn -CYAcXxAWe3szNiwgMTg4fSwgezU0MCwgMjh9fdgA6wAOA98A8gDzAPQA9gPgAPgD4QPiB3MD5AdhA+YD -54DdgNWBAaiA1IEBpYDabxCBAEEAYwB0AGkAdgBhACAAbwAgAGkAdABlAG0AIABkAGUAIABtAGUAbgB1 -ACAAIgBjAG8AcABpAGEAcgAiACAAZQAgAHAAZQByAG0AaQB0AGUAIABhACAAcwBpAG4AYwByAG8AbgBp -AHoAYQDnAOMAbwAgAGUAbgB0AHIAZQAgAGEAIADhAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQAg -AGQAbwAgAE8AUwAgAFgAIABlACAAbwBzACAAYgB1AGYAZgBlAHIAcwAgAEMATABJAFAAQgBPAEEAUgBE -ACAAZQAgAFAAUgBJAE0AQQBSAFkAIABkAG8AIABYADEAMQAubxAPAMEAcgBlAGEAIABkAGUAIABjAG8A -bABhAGcAZQBt1gAOBusBJwbsA+8AlwbtB3sBfQL0A+IHf4EBjIEBrIA/gQF2gNWBAbvSAA4ANgA3BwOA -BNIADgBFAE0HhIA6pgF6B4YDoweIApIHioA+gQGugMOBAbKAf4EBttcA1gAOANcA2ADZANoA2wF9A9gH -jgePAOAA4QF9gD+A3oEBr4EBsAmAP18QFnt7MjMsIDE3NX0sIHs1MTksIDMxfX3YAOsADgPfAPIA8wD0 -APYD4AD4A+ED4geWA+QHhgPmA+eA3YDVgQGxgNSBAa6A2m8QggBTAGUAIABhAHMAcwBpAG4AYQBsAGEA -cgAgAGUAcwB0AGEAIABvAHAA5wDjAG8ALAAgAGEAbwAgAGMAbABpAGMAYQByACAAbgB1AG0AYQAgAGoA -YQBuAGUAbABhACAAaQBuAGEAYwB0AGkAdgBhACwAIABvACAAYwBsAGkAcQB1AGUAIABuAOMAbwAgAHMA -8wAgAGEAIAB0AHIAYQB6ACAAcABhAHIAYQAgAGEAIABmAHIAZQBuAHQAZQAgAGMAbwBtAG8AIABhAGMA -dABpAHYAYQAgAGEAIABqAGEAbgBlAGwAYQAgAGMAbwBtAHAAbABlAHQAYQBtAGUAbgB0AGUALgAg1wDW -AA4A1wDYANkA2gDbAX0D2AeeB58A4ADhAX2AP4DegQGzgQG0CYA/XxAWe3syMywgMTI1fSwgezQ5MCwg -MjB9fdgA6wAOA98A8gDzAPQA9gPgAPgD4QPiB6YD5AeIA+YD54DdgNWBAbWA1IEBsoDaXxBJTyBmb2Nv -IGRhIGphbmVsYSBkbyBYMTEgc2VndWUgbyBjdXJzb3IuIElzdG8gdGVtIGFsZ3VucyBlZmVpdG9zIGFk -dmVyc29zLtcA1gAOANcA2ADZANoA2wF9A9gHrgevAOAA4QF9gD+A3oEBt4EBuAmAP18QFXt7MjMsIDcz -fSwgezUwOSwgMjh9fdgA6wAOA98A8gDzAPQA9gPgAPgD4QPiB7YD5AeKA+YD54DdgNWBAbmA1IEBtoDa -bxB6AEEAIABjAHIAaQBhAOcA4wBvACAAZABlACAAdQBtAGEAIABuAG8AdgBhACAAagBhAG4AZQBsAGEA -IABYADEAMQAgAGYAYQB6ACAAYwBvAG0AIABxAHUAZQAgAFgAMQAxAC4AYQBwAHAAIAB2AGUAbgBoAGEA -IABwAGEAcgBhACAAcAByAGkAbQBlAGkAcgBvACAAcABsAGEAbgBvACAAKABlAG0AIAB2AGUAegAgAGQA -ZQAgAEYAaQBuAGQAZQByAC4AYQBwAHAALAAgAFQAZQByAG0AaQBuAGEAbAAuAGEAcABwACwAIABlAHQA -YwAuACkALldKYW5lbGFz1QAOAScG7APvAJcG7QMRAvQD4gfBgQGMgJ+BAXaA1YEBy9IADgBFAE0HxIA6 -pQMOBMgHxwfIB8mAnoEBEoEBvoEBwoEBxtcA1gAOANcA2ADZANoA2wMRA9gHzQfOAOAA4QMRgJ+A3oEB -v4EBwAmAn18QFnt7MzYsIDE2Mn0sIHs0OTYsIDQyfX3ZAOsADgPfAPIA8wD0APYFmgPgAPgD4QPiB9UD -5AfHA+YA+gPngN2A1YEBwYDUgQG+gCiA2m8QwwBMAGEAbgDnAGEAcgAgAG8AIABYADEAMQAgAGMAcgBp -AGEAIABjAGgAYQB2AGUAcwAgAFgAYQB1AHQAaABvAHIAaQB0AHkAIABkAGUAIABjAG8AbgB0AHIAbwBs -AG8AIABkAGUAIABhAGMAZQBzAHMAbwAuACAAUwBlACAAbwAgAGUAbgBkAGUAcgBlAOcAbwAgAEkAUAAg -AGQAbwAgAHMAaQBzAHQAZQBtAGEAIABmAG8AcgAgAGEAbAB0AGUAcgBhAGQAbwAsACAAZQBzAHQAYQBz -ACAAYwBoAGEAdgBlAHMAIABwAGUAcgBkAGUAbQAgAGEAIAB2AGEAbABpAGQAYQBkAGUALAAgAHAAbwBk -AGUAbgBkAG8ALAAgAGEAcwBzAGkAbQAsACAAIABpAG0AcABvAHMAcwBpAGIAaQBsAGkAdABhAHIAIABh -ACAAZQB4AGUAYwB1AOcA4wBvACAAZABhAHMAIABhAHAAbABpAGMAYQDnAPUAZQBzACAAWAAxADEALtcA -1gAOANcA2ADZANoA2wMRA9gH3gffAOAA4QMRgJ+A3oEBw4EBxAmAn18QFXt7MzYsIDcxfSwgezQ5Niwg -NTZ9fdkA6wAOA98A8gDzAPQA9gWaA+AA+APhA+IH5gPkB8gD5gD6A+eA3YDVgQHFgNSBAcKAKIDabxDP -AFMAZQAgAGEAYwB0AGkAdgBhAHIAIABlAHMAdABhACAAbwBwAOcA4wBvACwAIABwAHIAZQBjAGkAcwBh -ACAAaQBnAHUAYQBsAG0AZQBuAHQAZQAgAGQAZQAgAGEAYwB0AGkAdgBhAHIAIABhACAAbwBwAOcA4wBv -ACAgHABBAHUAdABlAG4AdABpAGMAYQByACAAbABpAGcAYQDnAPUAZQBzIB0AIABwAGEAcgBhACAAZwBh -AHIAYQBuAHQAaQByACAAYQAgAHMAZQBnAHUAcgBhAG4A5wBhACAAZABvACAAcwBpAHMAdABlAG0AYQAu -ACAAUwBlACAAbgDjAG8AIABhAGMAdABpAHYAYQByACAAZQBzAHQAYQAgAG8AcADnAOMAbwAsACAAbgDj -AG8AIABzAOMAbwAgAHAAZQByAG0AaQB0AGkAZABhAHMAIABsAGkAZwBhAOcA9QBlAHMAIABhACAAcABh -AHIAdABpAHIAIABkAGUAIABhAHAAbABpAGMAYQDnAPUAZQBzACAAcgBlAG0AbwB0AGEAcwAu1wDWAA4A -1wDYANkA2gDbAxED2AfvB/AA4ADhAxGAn4DegQHHgQHICYCfXxAWe3syMCwgLTE2fSwgezQwNCwgMTR9 -fdkA6wAOA98A8gDzAPQA9gWaA+AA+APhA+IH9wPkB8kD5gD6A+eA3YDVgQHJgNSBAcaAKIDabxBGAEUA -cwB0AGEAcwAgAG8AcADnAPUAZQBzACAAZQBuAHQAcgBhAHIA4wBvACAAZQBtACAAdgBpAGcAbwByACAA -ZABhACAAcAByAPMAeABpAG0AYQAgAHYAZQB6ACAAcQB1AGUAIABvACAAWAAxADEAIABmAG8AcgAgAGUA -eABlAGMAdQB0AGEAZABvAC5pAFMAZQBnAHUAcgBhAG4A5wBh0gA6ADsH/wbspAbsAScBKAA/Wns2MzMs -IDMwOH1fEBV7ezAsIDB9LCB7MTQ0MCwgODc4fX1aezMyMCwgMjYyfVl4MTFfcHJlZnPSADoAOwgFCAai -CAYAP18QEE5TV2luZG93VGVtcGxhdGVbcHJlZnNfcGFuZWzUAA4AlQCWAJcAmACZBPQBe4AZgBaBAR6A -Q9QADgCVAJYAlwCYAJkIEAgRgBmAFoEB1YEB2NgADgCdAJ4AnwCgAKEAogCjAKQIFAFCCBUAqACpAKoA -q4AVgQHWgQHXgA+AE4AMVkZlY2hhclF3XWNsb3NlX3dpbmRvdzrUAA4AlQCWAJcA0QgeAB8IIIAsgQHa -gAKBAgLUAA4AnQCtAK4ArwgjCCQIJYA7gQHbgQIBgQHcWE1haW5NZW510gAOAEUATQgpgDqlCCoIKwgs -CC0ILoEB3YEB7IEB74EB84EB/doADgFKAJ0AngCfAKAAoQCiAKMBSwCkAlwCXwFCAPoAqACpAKoIHgg3 -gBWAb4EB3oAogA+AE4EB2oEB31NYMTHSAA4ARQBNCDuAOqwCaAThCD4IPwhAAlMIQgSHAyoDjwhGBHiA -dIEBGIEB4YEB4oEB6IBugQHpgQECgKSAvYEB6oD92gAOAJ0AngE+AJ8BPwCgAKEAogCjAKQA+gFCAOEA -+gDhAKgAqQCqAlyAFYAoCYAoCYAPgBOAb9oADgFKAJ0AngCfAKAAoQCiAKMBSwCkCFMIVAFCAPoAqACp -AKoCXAhZgBWBAeWBAeOAKIAPgBOAb4EB5GgAUwBlAHIAdgBpAOcAbwBz1AAOAJ0ArQCuAK8IVAheCF+A -O4EB44EB54EB5tIADgBFAE0IYoA6oF8QD19OU1NlcnZpY2VzTWVuddoADgCdAJ4BPgCfAT8AoAChAKIA -owCkAPoBQgDhAPoA4QCoAKkAqgJcgBWAKAmAKAmAD4ATgG/aAA4AnQCeAT4AnwE/AKAAoQCiAKMApAD6 -AUIA4QD6AOEAqACpAKoCXIAVgCgJgCgJgA+AE4Bv2gAOAJ0AngE+AJ8BPwCgAKEAogCjAKQA+gFCAOEA -+gDhAKgAqQCqAlyAFYAoCYAoCYAPgBOAb1xfTlNBcHBsZU1lbnXaAA4BSgCdAJ4AnwCgAKEAogCjAUsA -pALSAU4BQgD6AKgAqQCqCB4IiIAVgI2AM4AogA+AE4EB2oEB7dIADgBFAE0Ii4A6ogLHA2uAjIC12gAO -AUoAnQCeAJ8AoAChAKIAowFLAKQEYwRmAUIA+gCoAKkAqggeCJaAFYD2gQHwgCiAD4ATgQHagQHxZgBF -AGQAaQDnAOMAb9IADgBFAE0ImoA6oQRbgPXaAA4BSgCdAJ4AnwCgAKEAogCjAUsApACrALABQgD6AKgA -qQCqCB4IpIAVgAyBAfSAKIAPgBOBAdqBAfVWSmFuZWxh0gAOAEUATQiogDqpCBAC2wQtCKwIrQCaCK8B -ugM4gQHVgJCA6IEB94EB+IALgQH7gE2AqdoADgCdAJ4BPgCfAT8AoAChAKIAowCkAPoBQgDhAPoA4QCo -AKkAqgCrgBWAKAmAKAmAD4ATgAzYAA4AnQCeAJ8AoAChAKIAowCkCL0Ivgi/AKgAqQCqAKuAFYEB+RIA -EAEIgQH6gA+AE4AMXxARUGVyY29ycmVyIGphbmVsYXNRYNoADgCdAJ4BPgCfAT8AoAChAKIAowCkAPoB -QgDhAPoA4QCoAKkAqgCrgBWAKAmAKAmAD4ATgAxeX05TV2luZG93c01lbnXaAA4BSgCdAJ4AnwCgAKEA -ogCjAUsApAPKA80BQgD6AKgAqQCqCB4I14AVgMyBAf6AKIAPgBOBAdqBAf9VQWp1ZGHSAA4ARQBNCNuA -OqEDwoDLW19OU01haW5NZW51VG1lbnXUAA4AlQCWAJcA0QRbAJkI44AsgPWAFoECBF5jb3B5X21lbnVf -aXRlbdQADgCVAJYAlwCYAJkIrQjpgBmAFoEB+IECBlxuZXh0X3dpbmRvdzrSAA4ARQjsCO2BAiKvEJQH -3wIDCEYHJAKSA3gIrAcKAV4GZQVcAq8EzwY7A34EYwivAscGqQT0BD8GAQdGBR8C7QF9A6MCfAInBw4I -KgdsBqYFMAitAJoBlwbpBLIGrwLwBwgG5wFdB68DVAhCAxQIEAEvCD4GBwPTA1oILATIB4YHiAefA8IB -5QGaAU0B/AkuAboEEwcTBnUDjwE7AmgFcQS4B8cCmQfJBYAIHgCZAzgC0gCrA2sCgghTCC0E+wbmAw4G -6AVmAlMHCwdhBXIBegQtA6oCJQGAAyoFDAVwAiYDEQbRBBkGwAK2B/AEWwg/AlwEhwY1CCsJYwadA9oI -LgWvB8gC2whAAcgERgGdBHgB4gSbB48C9ASVB84HigHOBccHNQLpA8oB3wDcANIGpwDfATwE4YEBxIBd -gQHqgQGWgH+AuIEB94EBlIA4gQFugQIIgIaBARSBAWGAuoD2gQH7gIyBAYGBAR6A7YEBUIEBnoEBJ4CW -gD+Aw4B6gGiBAZyBAd2BAaeBAXmBASyBAfiAC4BFgQG8gQENgQF7gJiBAZCBAaKAN4EBuICwgQHpgKGB -AdWALoEB4YEBUoDQgLKBAe+BARKBAa6BAbKBAbSAy4BZgEaANYBcgQIYgE2A4YEBkoEBdIC9gDGAdIEB -O4EBD4EBvoCBgQHGgQE3gQHagBaAqYCNgAyAtYB8gQHlgQHzgQEggQGNgJ6BAauBAhCAboEBmIEBpYEB -P4A+gOiAxYBigEGApIEBJIEBMIBlgJ+BAYOA44EBf4CIgQHIgPWBAeKAb4EBAoEBX4EB7IECIIEBiYDS -gQH9gQE+gQHCgJCBAeiAUYDvgEiA/YBXgQEIgQGwgQF2gQEGgQHAgQG2gFOBAUSBAZqAlYDMgFaAHIAb -gQF9gB6AMoEBGNkA1gIMAA4A1wVWANkBSwDbCYMFMAUwCYYJhwGrAOAJiAUwCYpZTlNQZXJjZW50gQEs -gQEsgQILgQIJgQIKgQEsIz/mCGTAAAAAXxAVe3sxLCAyMTV9LCB7MzAxLCAxNX19XF9kb1Njcm9sbGVy -OtIAOgA7CY4Jj6UJjwEmAScBKAA/Wk5TU2Nyb2xsZXLSAA4ARQBNCZKAOqUFHAVmBVwFPQUigQElgQIQ -gQIIgQEogQEr0gAOAEUATQmagDqhBQyBASRfEBV7ezEsIDE3fSwgezMwMSwgMTk4fX3SADoAOwmeCZ+k -CZ8BJwEoAD9aTlNDbGlwVmlld9gA1gIMAA4A1wDZAUsA2wmDBTAFMAmGCaQA4AmIBTAJp4EBLIEBLIEC -C4ECEYECCoEBLCM/79ZqYAAAAF8QFnt7MzAyLCAxN30sIHsxNSwgMTk4fX3SAA4ARQBNCauAOqEFH4EB -J18QE3t7MSwgMH0sIHszMDEsIDE3fX1fEBZ7ezIwLCAyMH0sIHszMTgsIDIzMX190gA6ADsJsAmxpAmx -AScBKAA/XE5TU2Nyb2xsVmlld9IADgBFAE0JtIA6pAY1AZcFMAQTgQFfgEWBASyA4Vp7NDc3LCAyNzF9 -3QZpAA4GagZrBmwGbQZuBm8GcAZxBnIGcwZ0AZoGdgm9Cb4JvwZ6BnsJwQnCAP0JwwnECcWARoEB0YEC -HYECH4ECGoEBcYECHIECGRALgQIegQIbXxAYe3szNjAsIDQwMH0sIHs0NzcsIDI3MX19bxAVAE0AZQBu -AHUAIABBAHAAbABpAGMAYQDnAOMAbwAgAGQAbwAgAFgAMQAx0gAOADYANwaFgARYeDExX2FwcHPSAA4A -MgAzCc2ABYECIdIAOgA7Cc8Bc6IBcwA/0gAOAEUI7AnSgQIirxCUB8gB5QJcBwoBfQHiAKsB4gFNAB8F -MAHiBMgGNQN4CCwAqwLSAu0C7QDcAu0HDgUwBp0G6AF9ANwCAwHiCB4HYQLtAZoAqwCrAZoC9AHiBqYC -6QHiAvQBTQeKANwCXAMOAKsAHwJcBgEA3ANUCB4DEQF9AX0HiAPKAd8JLgE8AgMAHwCrAZoHCAZlAlwB -LwJcBQwEsgMRApIDEQVwAB8AHwCrCCsILQLSAnwIPwgeBPQC9AMRAvQFMAJcAeIA3AUMAX0AqwOjAgMB -egJcBTAFDAIDBukGqQQTBqcCrwfJBGMCXAgqAlwBmggeAB8C9APTCB4FcQMRAKsCXADcBD8BlwJcBuYE -lQeGBnUA3AfHAX0ByAVyBwsC7QguAeIG5wDcAu0A0gEvAlyBAcKAWYBvgQGUgD+AV4AMgFeANYACgQEs -gFeBARKBAV+AuIEB74AMgI2AloCWgByAloEBnIEBLIEBiYEBq4A/gByAXYBXgQHagQGlgJaARoAMgAyA -RoEBdoBXgQF5gJWAV4EBdoA1gQG2gByAb4CegAyAAoBvgQFQgByAsIEB2oCfgD+AP4EBsoDMgFaBAhiA -MoBdgAKADIBGgQGQgQFugG+ALoBvgQEkgQENgJ+Af4CfgQEwgAKAAoAMgQHsgQHzgI2AeoEB4oEB2oEB -HoEBdoCfgQF2gQEsgG+AV4AcgQEkgD+ADIDDgF2APoBvgQEsgQEkgF2BAbyBAYGA4YEBfYCGgQHGgPaA -b4EB3YBvgEaBAdqAAoEBdoDQgQHagQE7gJ+ADIBvgByA7YBFgG+BAY2BAQaBAa6BAXSAHIEBvoA/gFGB -AT+BAZiAloEB/YBXgQGigByAloAbgC6Ab9IADgBFCOwKaYECIq8QlQffAgMIRgckApIBXgisA3gHCgZl -BVwCrwTPBjsDfgRjCK8CxwQ/BqkE9AUfBgEHRgLtAX0DowJ8Bw4CJwgqAZcFMAamCK0AmgdsBukEsgav -AvAHCAbnAV0DVAevCEIBLwgQAxQIPgYHA9MDWggsBMgHhgeIB58DwgHlAZoBTQH8CS4BugQTBxMGdQOP -ATsCaAVxBLgHxwKZB8kFgAgeAJkDOALSAKsDawKCCFMILQT7BuYG6AMOAB8CUwVmBXIHYQcLBC0BegOq -AiUBgAMqBQwFcAMRAiYG0QQZArYGwAfwBFsGNQJcCD8EhwgrCWMGnQPaCC4FrwfIAtsIQAGdAcgERgR4 -AeIFxwSVAvQEmweKB84BzgePANIBPAPKANwB3wLpBqcA3wc1BOGBAcSAXYEB6oEBloB/gDiBAfeAuIEB -lIEBboECCICGgQEUgQFhgLqA9oEB+4CMgO2BAYGBAR6BASeBAVCBAZ6AloA/gMOAeoEBnIBogQHdgEWB -ASyBAXmBAfiAC4EBp4EBvIEBDYEBe4CYgQGQgQGigDeAsIEBuIEB6YAugQHVgKGBAeGBAVKA0ICygQHv -gQESgQGugQGygQG0gMuAWYBGgDWAXIECGIBNgOGBAZKBAXSAvYAxgHSBATuBAQ+BAb6AgYEBxoEBN4EB -2oAWgKmAjYAMgLWAfIEB5YEB84EBIIEBjYEBq4CegAKAboECEIEBP4EBpYEBmIDogD6AxYBigEGApIEB -JIEBMICfgGWBAYOA44CIgQF/gQHIgPWBAV+Ab4EB4oEBAoEB7IECIIEBiYDSgQH9gQE+gQHCgJCBAeiA -SIBRgO+A/YBXgQFEgQEGgQF2gQEIgQG2gQHAgFOBAbCAG4AygMyAHIBWgJWBAX2AHoEBmoEBGNIADgBF -COwLAYECIq8QlQsCCwMLBAsFCwYLBwsICwkLCgsLCwwLDQsOCw8LEAsRCxILEwsUCxULFgsXCxgLGQsa -CxsLHAsdCx4LHwsgCyELIgsjCyQLJQsmCycLKAspCyoLKwssCy0LLgsvCzALMQsyCzMLNAs1CzYLNws4 -CzkLOgs7CzwLPQs+Cz8LQAtBC0ILQwtEC0ULRgtHC0gLSQtKC0sLTAtNC04LTwgjAMkLUgtTC1QLVQtW -C1cLWAtZC1oLWwtcC10LXgtfC2ALYQtiC2MLZAtlC2YLZwtoC2kLagtrC2wLbQtuC28LcAtxC3ILcwt0 -C3ULdgt3C3gLeQt6C3sLfAt9C34LfwuAC4ELgguDC4QLhQuGC4cLiAuJC4oLiwuMC40LjguPC5ALkQuS -C5MLlAuVC5aBAiaBAieBAiiBAimBAiqBAiuBAiyBAi2BAi6BAi+BAjCBAjGBAjKBAjOBAjSBAjWBAjaB -AjeBAjiBAjmBAjqBAjuBAjyBAj2BAj6BAj+BAkCBAkGBAkKBAkOBAkSBAkWBAkaBAkeBAkiBAkmBAkqB -AkuBAkyBAk2BAk6BAk+BAlCBAlGBAlKBAlOBAlSBAlWBAlaBAleBAliBAlmBAlqBAluBAlyBAl2BAl6B -Al+BAmCBAmGBAmKBAmOBAmSBAmWBAmaBAmeBAmiBAmmBAmqBAmuBAmyBAm2BAm6BAm+BAnCBAnGBAnKB -AnOBAduAF4ECdIECdYECdoECd4ECeIECeYECeoECe4ECfIECfYECfoECf4ECgIECgYECgoECg4EChIEC -hYEChoECh4ECiIECiYECioECi4ECjIECjYECjoECj4ECkIECkYECkoECk4EClIEClYECloECl4ECmIEC -mYECmoECm4ECnIECnYECnoECn4ECoIECoYECooECo4ECpIECpYECpoECp4ECqIECqYECqoECq4ECrIEC -rYECroECr4ECsIECsYECsoECs4ECtIECtYECtoECt4ECuG8Q4QBUAGUAeAB0ACAARgBpAGUAbABkACAA -QwBlAGwAbAAgACgAUwBlACAAYQBjAHQAaQB2AGEAcgAgAGUAcwB0AGEAIABvAHAA5wDjAG8ALAAgAHAA -cgBlAGMAaQBzAGEAIABpAGcAdQBhAGwAbQBlAG4AdABlACAAZABlACAAYQBjAHQAaQB2AGEAcgAgAGEA -IABvAHAA5wDjAG8AICAcAEEAdQB0AGUAbgB0AGkAYwBhAHIAIABsAGkAZwBhAOcA9QBlAHMgHQAgAHAA -YQByAGEAIABnAGEAcgBhAG4AdABpAHIAIABhACAAcwBlAGcAdQByAGEAbgDnAGEAIABkAG8AIABzAGkA -cwB0AGUAbQBhAC4AIABTAGUAIABuAOMAbwAgAGEAYwB0AGkAdgBhAHIAIABlAHMAdABhACAAbwBwAOcA -4wBvACwAIABuAOMAbwAgAHMA4wBvACAAcABlAHIAbQBpAHQAaQBkAGEAcwAgAGwAaQBnAGEA5wD1AGUA -cwAgAGEAIABwAGEAcgB0AGkAcgAgAGQAZQAgAGEAcABsAGkAYwBhAOcA9QBlAHMAIAByAGUAbQBvAHQA -YQBzAC4AKV8QEU1lbnUgKE90aGVyVmlld3MpW1NlcGFyYXRvci0xXxAZVGV4dCBGaWVsZCBDZWxsIChD -b3JlczoKKV8QIUNoZWNrIEJveCAoRm9jbyBlbSBqYW5lbGFzIG5vdmFzKW8QGQBNAGUAbgB1ACAASQB0 -AGUAbQAgACgAUABlAHIAcwBvAG4AYQBsAGkAegBhAHIgJgApW1NlcGFyYXRvci01XxAyQ2hlY2sgQm94 -IChVdGlsaXphciBvIGVmZWl0byBkZSBhbGVydGEgZG8gc2lzdGVtYSlfEBVTdGF0aWMgVGV4dCAoQ29y -ZXM6CilaUHJlZnNQYW5lbF8QE0hvcml6b250YWwgU2Nyb2xsZXJvEB4AQwBoAGUAYwBrACAAQgBvAHgA -IAAoAE0AbwBkAG8AIABlAGMAcgDjACAAYwBvAG0AcABsAGUAdABvAClvEDMAQgB1AHQAdABvAG4AIABD -AGUAbABsACAAKABQAGUAcgBtAGkAdABpAHIAIABsAGkAZwBhAOcA9QBlAHMAIABkAGUAIABjAGwAaQBl -AG4AdABlAHMAIABkAGEAIAByAGUAZABlAClfEBZCdXR0b24gQ2VsbCAoRHVwbGljYXIpXxA0QnV0dG9u -IENlbGwgKFV0aWxpemFyIG8gZWZlaXRvIGRlIGFsZXJ0YSBkbyBzaXN0ZW1hKW0ATQBlAG4AdQAgACgA -RQBkAGkA5wDjAG8AKVtTZXBhcmF0b3ItNltTZXBhcmF0b3ItOG8QawBTAHQAYQB0AGkAYwAgAFQAZQB4 -AHQAIAAoAEQAZQB2AGkAZABvACAAYQAgAGwAaQBtAGkAdABhAOcA9QBlAHMAIABkAG8AIABwAHIAbwB0 -AG8AYwBvAGwAbwAgAFgAMQAxACwAIABlAHMAdABhACAAbwBwAOcA4wBvACAAbgBlAG0AIABzAGUAbQBw -AHIAZQAgAGYAdQBuAGMAaQBvAG4AYQByAOEAIABlAG0AIABhAGwAZwB1AG0AYQBzACAAYQBwAGwAaQBj -AGEA5wD1AGUAcwAuAClvEGcAUwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABQAGUAcgBtAGkAdABlACAA -cQB1AGUAIABhAGwAdABlAHIAYQDnAPUAZQBzACAAZABvACAAbQBlAG4AdQAgAGQAZQAgAGUAbgB0AHIA -YQBkAGEAIABzAGUAIABzAG8AYgByAGUAcABvAG4AaABhAG0AIABhAG8AIABhAGMAdAB1AGEAbAAgAG0A -YQBwAGEAIABkAGUAIAB0AGUAYwBsAGEAcwAgAGQAbwAgAFgAMQAxAC4AKW8QNQBDAGgAZQBjAGsAIABC -AG8AeAAgACgAUwBlAGcAdQBpAHIAIABhACAAZABpAHMAcABvAHMAaQDnAOMAbwAgAGQAbwAgAHQAZQBj -AGwAYQBkAG8AIABkAG8AIABzAGkAcwB0AGUAbQBhAClfEBFUYWJsZSBIZWFkZXIgVmlld28QJwBDAGgA -ZQBjAGsAIABCAG8AeAAgACgAUwBpAG0AdQBsAGEAcgAgAHIAYQB0AG8AIABkAGUAIAB0AHIA6gBzACAA -YgBvAHQA9QBlAHMAKW8QigBUAGUAeAB0ACAARgBpAGUAbABkACAAQwBlAGwAbAAgACgAQQBjAHQAaQB2 -AGEAIABhACAAagBhAG4AZQBsAGEAIAByAGEAaQB6ACAAZABvACAAWAAxADEALgAgAFUAdABpAGwAaQB6 -AGUAIABhACAAYwBvAG0AYgBpAG4AYQDnAOMAbwAgAGQAZQAgAHQAZQBjAGwAYQBzACAAQwBvAG0AYQBu -AGQAbwAtAE8AcADnAOMAbwAtAEEAIABwAGEAcgBhACAAZQBuAHQAcgBhAHIAIABlACAAcwBhAGkAcgAg -AGQAbwAgAG0AbwBkAG8AIABkAGUAIABlAGMAcgDjACAAYwBvAG0AcABsAGUAdABvAC4AKVZWaWV3LTRW -Vmlldy0zXxAdQ2hlY2sgQm94IChGb2NvIHNlZ3VlIG8gcmF0bylvEEIAQwBoAGUAYwBrACAAQgBvAHgA -IAAoAEEAYwB0AHUAYQBsAGkAegBhAHIAIABhACAA4QByAGUAYQAgAGQAZQAgAGMAbwBsAGEAZwBlAG0A -IABxAHUAYQBuAGQAbwAgAG8AIABDAEwASQBQAEIATwBBAFIARAAgAG0AdQBkAGEAcgAuAClvEIYAUwB0 -AGEAdABpAGMAIABUAGUAeAB0ACAAKABBAGMAdABpAHYAYQAgAGEAIABqAGEAbgBlAGwAYQAgAHIAYQBp -AHoAIABkAG8AIABYADEAMQAuACAAVQB0AGkAbABpAHoAZQAgAGEAIABjAG8AbQBiAGkAbgBhAOcA4wBv -ACAAZABlACAAdABlAGMAbABhAHMAIABDAG8AbQBhAG4AZABvAC0ATwBwAOcA4wBvAC0AQQAgAHAAYQBy -AGEAIABlAG4AdAByAGEAcgAgAGUAIABzAGEAaQByACAAZABvACAAbQBvAGQAbwAgAGQAZQAgAGUAYwBy -AOMAIABjAG8AbQBwAGwAZQB0AG8ALgApbxATAE0AZQBuAHUAIABJAHQAZQBtACAAKABNAGkAbABoAPUA -ZQBzAClfEA9NZW51IEl0ZW0gKFgxMSlfEBVQdXNoIEJ1dHRvbiAoUmVtb3ZlcilbU2Nyb2xsIFZpZXdv -EJEAUwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABTAGUAIABlAHMAdABpAHYAZQByAGUAbQAgAGEAYwB0 -AGkAdgBhAHMALAAgAGEAcwAgAHQAZQBjAGwAYQBzACAAZQBxAHUAaQB2AGEAbABlAG4AdABlAHMAIABk -AGEAIABiAGEAcgByAGEAIABkAGUAIABtAGUAbgB1AHMAIABwAG8AZABlAG0AIABpAG4AdABlAHIAZgBl -AHIAaQByACAAbgBhAHMAIABhAHAAbABpAGMAYQDnAPUAZQBzACAAWAAxADEAIABxAHUAZQAgAHUAdABp -AGwAaQB6AGEAbQAgAG8AIABtAG8AZABpAGYAaQBjAGEAZABvAHIAIABNAGUAdABhAC4AKV8QHU1lbnUg -SXRlbSAoUGVyY29ycmVyIGphbmVsYXMpXxAwTWVudSBJdGVtIChQZXJjb3JyZXIgamFuZWxhcyBubyBz -ZW50aWRvIGludmVyc28pbxCTAFQAZQB4AHQAIABGAGkAZQBsAGQAIABDAGUAbABsACAAKABBAGMAdABp -AHYAYQAgAG8AIABpAHQAZQBtACAAZABlACAAbQBlAG4AdQAgACIAYwBvAHAAaQBhAHIAIgAgAGUAIABw -AGUAcgBtAGkAdABlACAAYQAgAHMAaQBuAGMAcgBvAG4AaQB6AGEA5wDjAG8AIABlAG4AdAByAGUAIABh -ACAA4QByAGUAYQAgAGQAZQAgAGMAbwBsAGEAZwBlAG0AIABkAG8AIABPAFMAIABYACAAZQAgAG8AcwAg -AGIAdQBmAGYAZQByAHMAIABDAEwASQBQAEIATwBBAFIARAAgAGUAIABQAFIASQBNAEEAUgBZACAAZABv -ACAAWAAxADEALgApbxAZAFQAYQBiACAAVgBpAGUAdwAgAEkAdABlAG0AIAAoAFMAZQBnAHUAcgBhAG4A -5wBhAClvEE0AQwBoAGUAYwBrACAAQgBvAHgAIAAoAE0AbwBzAHQAcgBhAHIAIABhAHUAdABvAG0AYQB0 -AGkAYwBhAG0AZQBuAHQAZQAgAGEAIABiAGEAcgByAGEAIABkAGUAIABtAGUAbgB1AHMAIABlAG0AIABt -AG8AZABvACAAZABlACAAZQBjAHIA4wAgAGMAbwBtAHAAbABlAHQAbwApbxCVAFQAZQB4AHQAIABGAGkA -ZQBsAGQAIABDAGUAbABsACAAKABTAGUAIABlAHMAdABpAHYAZQByAGUAbQAgAGEAYwB0AGkAdgBhAHMA -LAAgAGEAcwAgAHQAZQBjAGwAYQBzACAAZQBxAHUAaQB2AGEAbABlAG4AdABlAHMAIABkAGEAIABiAGEA -cgByAGEAIABkAGUAIABtAGUAbgB1AHMAIABwAG8AZABlAG0AIABpAG4AdABlAHIAZgBlAHIAaQByACAA -bgBhAHMAIABhAHAAbABpAGMAYQDnAPUAZQBzACAAWAAxADEAIABxAHUAZQAgAHUAdABpAGwAaQB6AGEA -bQAgAG8AIABtAG8AZABpAGYAaQBjAGEAZABvAHIAIABNAGUAdABhAC4AKW8QOgBCAHUAdAB0AG8AbgAg -AEMAZQBsAGwAIAAoAEEAYwB0AGkAdgBhAHIAIABhAHMAIABlAHEAdQBpAHYAYQBsAOoAbgBjAGkAYQBz -ACAAZABlACAAdABlAGMAbABhAGQAbwAgAHAAYQByAGEAIABYADEAMQApbxCYAFMAdABhAHQAaQBjACAA -VABlAHgAdAAgACgATwBzACAAcwBpAG4AYQBpAHMAIABzAG8AbgBvAHIAbwBzACAAZABvACAAWAAxADEA -IAB1AHQAaQBsAGkAegBhAHIA4wBvACAAbwAgAGEAbABlAHIAdABhACAAcABhAGQAcgDjAG8AIABkAG8A -IABzAGkAcwB0AGUAbQBhACwAIAB0AGEAbAAgAGMAbwBtAG8AIABlAHMAdABpAHYAZQByACAAZABlAGYA -aQBuAGkAZABvACAAZQBtACAARQBmAGUAaQB0AG8AcwAgAHMAbwBuAG8AcgBvAHMALAAgAG4AYQBzACAA -cAByAGUAZgBlAHIA6gBuAGMAaQBhAHMAIABkAG8AIABzAGkAcwB0AGUAbQBhAC4AKW8QHwBUAGEAYgAg -AFYAaQBlAHcAIABJAHQAZQBtACAAKADBAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQApW1NlcGFy -YXRvci05bxBaAEMAaABlAGMAawAgAEIAbwB4ACAAKABBAGMAdAB1AGEAbABpAHoAYQByACAAYQAgAOEA -cgBlAGEAIABkAGUAIABjAG8AbABhAGcAZQBtACAAaQBtAGUAZABpAGEAdABhAG0AZQBuAHQAZQAgAHEA -dQBhAG4AZABvACAAZgBvAHIAIABzAGUAbABlAGMAYwBpAG8AbgBhAGQAbwAgAHQAZQB4AHQAbwAgAG4A -bwB2AG8ALgApbxCMAFQAZQB4AHQAIABGAGkAZQBsAGQAIABDAGUAbABsACAAKABBACAAYwByAGkAYQDn -AOMAbwAgAGQAZQAgAHUAbQBhACAAbgBvAHYAYQAgAGoAYQBuAGUAbABhACAAWAAxADEAIABmAGEAegAg -AGMAbwBtACAAcQB1AGUAIABYADEAMQAuAGEAcABwACAAdgBlAG4AaABhACAAcABhAHIAYQAgAHAAcgBp -AG0AZQBpAHIAbwAgAHAAbABhAG4AbwAgACgAZQBtACAAdgBlAHoAIABkAGUAIABGAGkAbgBkAGUAcgAu -AGEAcABwACwAIABUAGUAcgBtAGkAbgBhAGwALgBhAHAAcAAsACAAZQB0AGMALgApAC4AKVtTZXBhcmF0 -b3ItMlhEb2NrTWVudV8QEk1lbnUgSXRlbSAoRmVjaGFyKW8QIQBCAHUAdAB0AG8AbgAgAEMAZQBsAGwA -IAAoAEEAdQB0AGUAbgB0AGkAYwBhAHIAIABsAGkAZwBhAOcA9QBlAHMAKVtTZXBhcmF0b3ItM28QKQBC -AHUAdAB0AG8AbgAgAEMAZQBsAGwAIAAoAFMAaQBtAHUAbABhAHIAIAByAGEAdABvACAAZABlACAAdABy -AOoAcwAgAGIAbwB0APUAZQBzAClvEHsAUwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABEAGUAcwBhAGMA -dABpAHYAZQAgAGUAcwB0AGEAIABvAHAA5wDjAG8AIABzAGUAIABwAHIAZQB0AGUAbgBkAGUAcgAgAHUA -dABpAGwAaQB6AGEAcgAgAG8AIAB4AGMAbABpAHAAYgBvAGEAcgBkACwAIABvACAAawBsAGkAcABwAGUA -cgAgAG8AdQAgAHEAdQBhAGwAcQB1AGUAcgAgAG8AdQB0AHIAbwAgAGcAZQBzAHQAbwByACAAZABlACAA -YwBsAGkAcABiAG8AYQByAGQAIABYADEAMQAuAClvEFwAQgB1AHQAdABvAG4AIABDAGUAbABsACAAKABB -AGMAdAB1AGEAbABpAHoAYQByACAAYQAgAOEAcgBlAGEAIABkAGUAIABjAG8AbABhAGcAZQBtACAAaQBt -AGUAZABpAGEAdABhAG0AZQBuAHQAZQAgAHEAdQBhAG4AZABvACAAZgBvAHIAIABzAGUAbABlAGMAYwBp -AG8AbgBhAGQAbwAgAHQAZQB4AHQAbwAgAG4AbwB2AG8ALgApbxASAE0AZQBuAHUAIABJAHQAZQBtACAA -KABFAGQAaQDnAOMAbwApbxAxAEMAaABlAGMAawAgAEIAbwB4ACAAKABQAGUAcgBtAGkAdABpAHIAIABs -AGkAZwBhAOcA9QBlAHMAIABkAGUAIABjAGwAaQBlAG4AdABlAHMAIABkAGEAIAByAGUAZABlAClvEJAA -UwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABTAGUAIABhAHMAcwBpAG4AYQBsAGEAcgAgAGUAcwB0AGEA -IABvAHAA5wDjAG8ALAAgAGEAbwAgAGMAbABpAGMAYQByACAAbgB1AG0AYQAgAGoAYQBuAGUAbABhACAA -aQBuAGEAYwB0AGkAdgBhACwAIABvACAAYwBsAGkAcQB1AGUAIABuAOMAbwAgAHMA8wAgAGEAIAB0AHIA -YQB6ACAAcABhAHIAYQAgAGEAIABmAHIAZQBuAHQAZQAgAGMAbwBtAG8AIABhAGMAdABpAHYAYQAgAGEA -IABqAGEAbgBlAGwAYQAgAGMAbwBtAHAAbABlAHQAYQBtAGUAbgB0AGUALgAgAClfEFdTdGF0aWMgVGV4 -dCAoTyBmb2NvIGRhIGphbmVsYSBkbyBYMTEgc2VndWUgbyBjdXJzb3IuIElzdG8gdGVtIGFsZ3VucyBl -ZmVpdG9zIGFkdmVyc29zLilfEFtUZXh0IEZpZWxkIENlbGwgKE8gZm9jbyBkYSBqYW5lbGEgZG8gWDEx -IHNlZ3VlIG8gY3Vyc29yLiBJc3RvIHRlbSBhbGd1bnMgZWZlaXRvcyBhZHZlcnNvcy4pXxAYTWVudSBJ -dGVtIChBanVkYSBkbyBYMTEpXxAfUG9wIFVwIEJ1dHRvbiBDZWxsIChEbyBtb25pdG9yKV5Db250ZW50 -IFZpZXctMW8QEwBNAGUAbgB1ACAAKABBAHAAbABpAGMAYQDnAPUAZQBzACkALQAxXxAWTWVudSBJdGVt -IChEbyBtb25pdG9yKVxFZGl0UHJvZ3JhbXNfECVNZW51IEl0ZW0gKFBhc3NhciB0dWRvIHBhcmEgYSBm -cmVudGUpXxAgUHVzaCBCdXR0b24gKEFkaWNpb25hciBlbGVtZW50bylvEJwAVABlAHgAdAAgAEYAaQBl -AGwAZAAgAEMAZQBsAGwAIAAoAE8AcwAgAHMAaQBuAGEAaQBzACAAcwBvAG4AbwByAG8AcwAgAGQAbwAg -AFgAMQAxACAAdQB0AGkAbABpAHoAYQByAOMAbwAgAG8AIABhAGwAZQByAHQAYQAgAHAAYQBkAHIA4wBv -ACAAZABvACAAcwBpAHMAdABlAG0AYQAsACAAdABhAGwAIABjAG8AbQBvACAAZQBzAHQAaQB2AGUAcgAg -AGQAZQBmAGkAbgBpAGQAbwAgAGUAbQAgAEUAZgBlAGkAdABvAHMAIABzAG8AbgBvAHIAbwBzACwAIABu -AGEAcwAgAHAAcgBlAGYAZQByAOoAbgBjAGkAYQBzACAAZABvACAAcwBpAHMAdABlAG0AYQAuAClcQ29u -dGVudCBWaWV3XxAYTWVudSBJdGVtIChNb3N0cmFyIHR1ZG8pWVNlcGFyYXRvcl8QGU1lbnUgSXRlbSAo -QWNlcmNhIGRvIFgxMSlfEBZUYWJsZSBDb2x1bW4gKENvbWFuZG8pbxBPAEIAdQB0AHQAbwBuACAAQwBl -AGwAbAAgACgATQBvAHMAdAByAGEAcgAgAGEAdQB0AG8AbQBhAHQAaQBjAGEAbQBlAG4AdABlACAAYQAg -AGIAYQByAHIAYQAgAGQAZQAgAG0AZQBuAHUAcwAgAGUAbQAgAG0AbwBkAG8AIABkAGUAIABlAGMAcgDj -ACAAYwBvAG0AcABsAGUAdABvAClvENEAUwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABMAGEAbgDnAGEA -cgAgAG8AIABYADEAMQAgAGMAcgBpAGEAIABjAGgAYQB2AGUAcwAgAFgAYQB1AHQAaABvAHIAaQB0AHkA -IABkAGUAIABjAG8AbgB0AHIAbwBsAG8AIABkAGUAIABhAGMAZQBzAHMAbwAuACAAUwBlACAAbwAgAGUA -bgBkAGUAcgBlAOcAbwAgAEkAUAAgAGQAbwAgAHMAaQBzAHQAZQBtAGEAIABmAG8AcgAgAGEAbAB0AGUA -cgBhAGQAbwAsACAAZQBzAHQAYQBzACAAYwBoAGEAdgBlAHMAIABwAGUAcgBkAGUAbQAgAGEAIAB2AGEA -bABpAGQAYQBkAGUALAAgAHAAbwBkAGUAbgBkAG8ALAAgAGEAcwBzAGkAbQAsACAAIABpAG0AcABvAHMA -cwBpAGIAaQBsAGkAdABhAHIAIABhACAAZQB4AGUAYwB1AOcA4wBvACAAZABhAHMAIABhAHAAbABpAGMA -YQDnAPUAZQBzACAAWAAxADEALgApXxAjQnV0dG9uIENlbGwgKEZvY28gZW0gamFuZWxhcyBub3Zhcylv -EFQAUwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABFAHMAdABhAHMAIABvAHAA5wD1AGUAcwAgAGUAbgB0 -AHIAYQByAOMAbwAgAGUAbQAgAHYAaQBnAG8AcgAgAGQAYQAgAHAAcgDzAHgAaQBtAGEAIAB2AGUAegAg -AHEAdQBlACAAbwAgAFgAMQAxACAAZgBvAHIAIABlAHgAZQBjAHUAdABhAGQAbwAuAClvECMAVABlAHgA -dAAgAEYAaQBlAGwAZAAgAEMAZQBsAGwAIAAoAEMA6QBsAHUAbABhACAAZABlACAAdABlAHgAdABvACkA -LQAyW1NlcGFyYXRvci03bxARAE0AZQBuAHUAIAAoAEEAcABsAGkAYwBhAOcA9QBlAHMAKV1NZW51IChK -YW5lbGEpXxAbTWVudSBJdGVtIChQZXJzb25hbGl6YXIuLi4pbxBEAEIAdQB0AHQAbwBuACAAQwBlAGwA -bAAgACgAQQBjAHQAdQBhAGwAaQB6AGEAcgAgAGEAIADhAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUA -bQAgAHEAdQBhAG4AZABvACAAbwAgAEMATABJAFAAQgBPAEEAUgBEACAAbQB1AGQAYQByAC4AKW8QDwBN -AGUAbgB1ACAAKABTAGUAcgB2AGkA5wBvAHMAKV8QEk1lbnUgSXRlbSAoSmFuZWxhKW8QNwBCAHUAdAB0 -AG8AbgAgAEMAZQBsAGwAIAAoAFMAZQBnAHUAaQByACAAYQAgAGQAaQBzAHAAbwBzAGkA5wDjAG8AIABk -AG8AIAB0AGUAYwBsAGEAZABvACAAZABvACAAcwBpAHMAdABlAG0AYQApbxAVAFQAYQBiACAAVgBpAGUA -dwAgAEkAdABlAG0AIAAoAFMAYQDtAGQAYQApXxAXVGFiIFZpZXcgSXRlbSAoSmFuZWxhcylvEB8AQwBo -AGUAYwBrACAAQgBvAHgAIAAoAEEAdQB0AGUAbgB0AGkAYwBhAHIAIABsAGkAZwBhAOcA9QBlAHMAKVxG -aWxlJ3MgT3duZXJvECIATQBlAG4AdQAgAEkAdABlAG0AIAAoAEEAbAB0AGUAcgBuAGEAcgAgAGUAYwBy -AOMAIABjAG8AbQBwAGwAZQB0AG8AKV8QEVZlcnRpY2FsIFNjcm9sbGVyXxAVVGFibGUgQ29sdW1uIChB -dGFsaG8pbxCPAFMAdABhAHQAaQBjACAAVABlAHgAdAAgACgAQQBjAHQAaQB2AGEAIABvACAAaQB0AGUA -bQAgAGQAZQAgAG0AZQBuAHUAIAAiAGMAbwBwAGkAYQByACIAIABlACAAcABlAHIAbQBpAHQAZQAgAGEA -IABzAGkAbgBjAHIAbwBuAGkAegBhAOcA4wBvACAAZQBuAHQAcgBlACAAYQAgAOEAcgBlAGEAIABkAGUA -IABjAG8AbABhAGcAZQBtACAAZABvACAATwBTACAAWAAgAGUAIABvAHMAIABiAHUAZgBmAGUAcgBzACAA -QwBMAEkAUABCAE8AQQBSAEQAIABlACAAUABSAEkATQBBAFIAWQAgAGQAbwAgAFgAMQAxAC4AKW8QUQBT -AHQAYQB0AGkAYwAgAFQAZQB4AHQAIAAoAEUAcwB0AGEAIABvAHAA5wDjAG8AIABlAG4AdAByAGEAcgDh -ACAAZQBtACAAdgBpAGcAbwByACAAZABhACAAcAByAPMAeABpAG0AYQAgAHYAZQB6ACAAcQB1AGUAIABv -ACAAWAAxADEAIABmAG8AcgAgAGUAeABlAGMAdQB0AGEAZABvAC4AKV8QEE1lbnUgSXRlbSAoWm9vbSlf -EC5DaGVjayBCb3ggKENsaXF1ZSBhdHJhdmVzc2EgamFuZWxhcyBpbmFjdGl2YXMpXxAfQnV0dG9uIENl -bGwgKEZvY28gc2VndWUgbyByYXRvKV8QFU1lbnUgSXRlbSAoMjU2IGNvcmVzKV8QMEJ1dHRvbiBDZWxs -IChDbGlxdWUgYXRyYXZlc3NhIGphbmVsYXMgaW5hY3RpdmFzKW8QJQBNAGUAbgB1ACAASQB0AGUAbQAg -ACgATwBjAHUAbAB0AGEAcgAgAG8AdQB0AHIAYQBzACAAYQBwAGwAaQBjAGEA5wD1AGUAcwApXxAiVGFi -bGUgVmlldyAoTm9tZSwgQ29tYW5kbywgQXRhbGhvKV8QE1RhYmxlIENvbHVtbiAoTm9tZSlfEBRNZW51 -IEl0ZW0gKE1pbGhhcmVzKW8QawBUAGUAeAB0ACAARgBpAGUAbABkACAAQwBlAGwAbAAgACgAUABlAHIA -bQBpAHQAZQAgAHEAdQBlACAAYQBsAHQAZQByAGEA5wD1AGUAcwAgAGQAbwAgAG0AZQBuAHUAIABkAGUA -IABlAG4AdAByAGEAZABhACAAcwBlACAAcwBvAGIAcgBlAHAAbwBuAGgAYQBtACAAYQBvACAAYQBjAHQA -dQBhAGwAIABtAGEAcABhACAAZABlACAAdABlAGMAbABhAHMAIABkAG8AIABYADEAMQAuAClfECBCdXR0 -b24gQ2VsbCAoQWRpY2lvbmFyIGVsZW1lbnRvKW8QIABCAHUAdAB0AG8AbgAgAEMAZQBsAGwAIAAoAE0A -bwBkAG8AIABlAGMAcgDjACAAYwBvAG0AcABsAGUAdABvAClvEH0AVABlAHgAdAAgAEYAaQBlAGwAZAAg -AEMAZQBsAGwAIAAoAEEAbwAgAGMAbABpAGMAYQByACwAIABtAGEAbgB0AGUAbgBoAGEAIABwAHIAZQBt -AGkAZABhAHMAIABhAHMAIAB0AGUAYwBsAGEAcwAgAE8AcADnAOMAbwAgAG8AdQAgAEMAbwBtAGEAbgBk -AG8AIABwAGEAcgBhACAAYQBjAHQAaQB2AGEAcgAgAG8AcwAgAGIAbwB0APUAZQBzACAAYwBlAG4AdABy -AGEAbAAgAG8AdQAgAGQAaQByAGUAaQB0AG8AIABkAG8AIAByAGEAdABvAC4ACgApbxBYAFQAZQB4AHQA -IABGAGkAZQBsAGQAIABDAGUAbABsACAAKABFAHMAdABhAHMAIABvAHAA5wD1AGUAcwAgAGUAbgB0AHIA -YQByAOMAbwAgAGUAbQAgAHYAaQBnAG8AcgAgAGQAYQAgAHAAcgDzAHgAaQBtAGEAIAB2AGUAegAgAHEA -dQBlACAAbwAgAFgAMQAxACAAZgBvAHIAIABlAHgAZQBjAHUAdABhAGQAbwAuAClfEBJNZW51IEl0ZW0g -KENvcGlhcilfEBZQdXNoIEJ1dHRvbiAoRHVwbGljYXIpWk1lbnUgKFgxMSlvEBQATQBlAG4AdQAgAEkA -dABlAG0AIAAoAFMAZQByAHYAaQDnAG8AcwApXxAZTWVudSBJdGVtIChPY3VsdGFyIG8gWDExKW8QFgBN -AGUAbgB1ACAASQB0AGUAbQAgACgAQQBwAGwAaQBjAGEA5wD1AGUAcwApW0FwcGxpY2F0aW9uXxAXVGFi -IFZpZXcgSXRlbSAoRW50cmFkYSlvEH8AVABlAHgAdAAgAEYAaQBlAGwAZAAgAEMAZQBsAGwAIAAoAEQA -ZQBzAGEAYwB0AGkAdgBlACAAZQBzAHQAYQAgAG8AcADnAOMAbwAgAHMAZQAgAHAAcgBlAHQAZQBuAGQA -ZQByACAAdQB0AGkAbABpAHoAYQByACAAbwAgAHgAYwBsAGkAcABiAG8AYQByAGQALAAgAG8AIABrAGwA -aQBwAHAAZQByACAAbwB1ACAAcQB1AGEAbABxAHUAZQByACAAbwB1AHQAcgBvACAAZwBlAHMAdABvAHIA -IABkAGUAIABjAGwAaQBwAGIAbwBhAHIAZAAgAFgAMQAxAC4AKV8QEU1lbnUgSXRlbSAoQWp1ZGEpbxAh -AFQAZQB4AHQAIABGAGkAZQBsAGQAIABDAGUAbABsACAAKABDAOkAbAB1AGwAYQAgAGQAZQAgAHQAZQB4 -AHQAbwApbxDdAFMAdABhAHQAaQBjACAAVABlAHgAdAAgACgAUwBlACAAYQBjAHQAaQB2AGEAcgAgAGUA -cwB0AGEAIABvAHAA5wDjAG8ALAAgAHAAcgBlAGMAaQBzAGEAIABpAGcAdQBhAGwAbQBlAG4AdABlACAA -ZABlACAAYQBjAHQAaQB2AGEAcgAgAGEAIABvAHAA5wDjAG8AICAcAEEAdQB0AGUAbgB0AGkAYwBhAHIA -IABsAGkAZwBhAOcA9QBlAHMgHQAgAHAAYQByAGEAIABnAGEAcgBhAG4AdABpAHIAIABhACAAcwBlAGcA -dQByAGEAbgDnAGEAIABkAG8AIABzAGkAcwB0AGUAbQBhAC4AIABTAGUAIABuAOMAbwAgAGEAYwB0AGkA -dgBhAHIAIABlAHMAdABhACAAbwBwAOcA4wBvACwAIABuAOMAbwAgAHMA4wBvACAAcABlAHIAbQBpAHQA -aQBkAGEAcwAgAGwAaQBnAGEA5wD1AGUAcwAgAGEAIABwAGEAcgB0AGkAcgAgAGQAZQAgAGEAcABsAGkA -YwBhAOcA9QBlAHMAIAByAGUAbQBvAHQAYQBzAC4AKV8QFU1lbnUgSXRlbSAoTWluaW1pemFyKVtTZXBh -cmF0b3ItNF8QFUJ1dHRvbiBDZWxsIChSZW1vdmVyKW8QWwBDAGgAZQBjAGsAIABCAG8AeAAgACgAQQBj -AHQAdQBhAGwAaQB6AGEAcgAgAFAAUgBJAE0AQQBSAFkAIAAoAGMAbABpAHEAdQBlACAAYwBvAG0AIABv -ACAAYgBvAHQA4wBvACAAYwBlAG4AdAByAGEAbAApACAAcQB1AGEAbgBkAG8AIABhACAA4QByAGUAYQAg -AGQAZQAgAGMAbwBsAGEAZwBlAG0AIABtAHUAZABhAHIALgApbxBvAFQAZQB4AHQAIABGAGkAZQBsAGQA -IABDAGUAbABsACAAKABEAGUAdgBpAGQAbwAgAGEAIABsAGkAbQBpAHQAYQDnAPUAZQBzACAAZABvACAA -cAByAG8AdABvAGMAbwBsAG8AIABYADEAMQAsACAAZQBzAHQAYQAgAG8AcADnAOMAbwAgAG4AZQBtACAA -cwBlAG0AcAByAGUAIABmAHUAbgBjAGkAbwBuAGEAcgDhACAAZQBtACAAYQBsAGcAdQBtAGEAcwAgAGEA -cABsAGkAYwBhAOcA9QBlAHMALgApXxAXTWVudSBJdGVtIChTYWlyIGRvIFgxMSlWVmlldy0ybxAjAFQA -ZQB4AHQAIABGAGkAZQBsAGQAIABDAGUAbABsACAAKABDAOkAbAB1AGwAYQAgAGQAZQAgAHQAZQB4AHQA -bwApAC0AMW8QIQBDAGgAZQBjAGsAIABCAG8AeAAgACgAQQBjAHQAaQB2AGEAcgAgAHMAaQBuAGMAcgBv -AG4AaQB6AGEA5wDjAG8AKW8QQgBUAG8AcAAgAFQAYQBiACAAVgBpAGUAdwAgACgARQBuAHQAcgBhAGQA -YQAsACAAUwBhAO0AZABhACwAIADBAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQAsACAASgBhAG4A -ZQBsAGEAcwAsACAAUwBlAGcAdQByAGEAbgDnAGEAKW8QIwBCAHUAdAB0AG8AbgAgAEMAZQBsAGwAIAAo -AEEAYwB0AGkAdgBhAHIAIABzAGkAbgBjAHIAbwBuAGkAegBhAOcA4wBvAClvEIgAUwB0AGEAdABpAGMA -IABUAGUAeAB0ACAAKABBACAAYwByAGkAYQDnAOMAbwAgAGQAZQAgAHUAbQBhACAAbgBvAHYAYQAgAGoA -YQBuAGUAbABhACAAWAAxADEAIABmAGEAegAgAGMAbwBtACAAcQB1AGUAIABYADEAMQAuAGEAcABwACAA -dgBlAG4AaABhACAAcABhAHIAYQAgAHAAcgBpAG0AZQBpAHIAbwAgAHAAbABhAG4AbwAgACgAZQBtACAA -dgBlAHoAIABkAGUAIABGAGkAbgBkAGUAcgAuAGEAcABwACwAIABUAGUAcgBtAGkAbgBhAGwALgBhAHAA -cAAsACAAZQB0AGMALgApAC4AKW8Q1QBUAGUAeAB0ACAARgBpAGUAbABkACAAQwBlAGwAbAAgACgATABh -AG4A5wBhAHIAIABvACAAWAAxADEAIABjAHIAaQBhACAAYwBoAGEAdgBlAHMAIABYAGEAdQB0AGgAbwBy -AGkAdAB5ACAAZABlACAAYwBvAG4AdAByAG8AbABvACAAZABlACAAYQBjAGUAcwBzAG8ALgAgAFMAZQAg -AG8AIABlAG4AZABlAHIAZQDnAG8AIABJAFAAIABkAG8AIABzAGkAcwB0AGUAbQBhACAAZgBvAHIAIABh -AGwAdABlAHIAYQBkAG8ALAAgAGUAcwB0AGEAcwAgAGMAaABhAHYAZQBzACAAcABlAHIAZABlAG0AIABh -ACAAdgBhAGwAaQBkAGEAZABlACwAIABwAG8AZABlAG4AZABvACwAIABhAHMAcwBpAG0ALAAgACAAaQBt -AHAAbwBzAHMAaQBiAGkAbABpAHQAYQByACAAYQAgAGUAeABlAGMAdQDnAOMAbwAgAGQAYQBzACAAYQBw -AGwAaQBjAGEA5wD1AGUAcwAgAFgAMQAxAC4AKW8QXQBCAHUAdAB0AG8AbgAgAEMAZQBsAGwAIAAoAEEA -YwB0AHUAYQBsAGkAegBhAHIAIABQAFIASQBNAEEAUgBZACAAKABjAGwAaQBxAHUAZQAgAGMAbwBtACAA -bwAgAGIAbwB0AOMAbwAgAGMAZQBuAHQAcgBhAGwAKQAgAHEAdQBhAG4AZABvACAAYQAgAOEAcgBlAGEA -IABkAGUAIABjAG8AbABhAGcAZQBtACAAbQB1AGQAYQByAC4AKW8QlABUAGUAeAB0ACAARgBpAGUAbABk -ACAAQwBlAGwAbAAgACgAUwBlACAAYQBzAHMAaQBuAGEAbABhAHIAIABlAHMAdABhACAAbwBwAOcA4wBv -ACwAIABhAG8AIABjAGwAaQBjAGEAcgAgAG4AdQBtAGEAIABqAGEAbgBlAGwAYQAgAGkAbgBhAGMAdABp -AHYAYQAsACAAbwAgAGMAbABpAHEAdQBlACAAbgDjAG8AIABzAPMAIABhACAAdAByAGEAegAgAHAAYQBy -AGEAIABhACAAZgByAGUAbgB0AGUAIABjAG8AbQBvACAAYQBjAHQAaQB2AGEAIABhACAAagBhAG4AZQBs -AGEAIABjAG8AbQBwAGwAZQB0AGEAbQBlAG4AdABlAC4AIAApbxBAAEMAaABlAGMAawAgAEIAbwB4ACAA -KABBAGMAdAB1AGEAbABpAHoAYQByACAAQwBMAEkAUABCAE8AQQBSAEQAIABxAHUAYQBuAGQAbwAgAGEA -IADhAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQAgAG0AdQBkAGEAcgAuAClvEBgATQBlAG4AdQAg -AEkAdABlAG0AIAAoAEEAcABsAGkAYwBhAOcA9QBlAHMAKQAtADFcTWVudSAoQWp1ZGEpVlZpZXctMV8Q -GVBvcHVwIEJ1dHRvbiAoRG8gbW9uaXRvcilvEDgAQwBoAGUAYwBrACAAQgBvAHgAIAAoAEEAYwB0AGkA -dgBhAHIAIABhAHMAIABlAHEAdQBpAHYAYQBsAOoAbgBjAGkAYQBzACAAZABlACAAdABlAGMAbABhAGQA -bwAgAHAAYQByAGEAIABYADEAMQApbxB5AFMAdABhAHQAaQBjACAAVABlAHgAdAAgACgAQQBvACAAYwBs -AGkAYwBhAHIALAAgAG0AYQBuAHQAZQBuAGgAYQAgAHAAcgBlAG0AaQBkAGEAcwAgAGEAcwAgAHQAZQBj -AGwAYQBzACAATwBwAOcA4wBvACAAbwB1ACAAQwBvAG0AYQBuAGQAbwAgAHAAYQByAGEAIABhAGMAdABp -AHYAYQByACAAbwBzACAAYgBvAHQA9QBlAHMAIABjAGUAbgB0AHIAYQBsACAAbwB1ACAAZABpAHIAZQBp -AHQAbwAgAGQAbwAgAHIAYQB0AG8ALgAKAClvEEIAQgB1AHQAdABvAG4AIABDAGUAbABsACAAKABBAGMA -dAB1AGEAbABpAHoAYQByACAAQwBMAEkAUABCAE8AQQBSAEQAIABxAHUAYQBuAGQAbwAgAGEAIADhAHIA -ZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQAgAG0AdQBkAGEAcgAuAClvEFUAVABlAHgAdAAgAEYAaQBl -AGwAZAAgAEMAZQBsAGwAIAAoAEUAcwB0AGEAIABvAHAA5wDjAG8AIABlAG4AdAByAGEAcgDhACAAZQBt -ACAAdgBpAGcAbwByACAAZABhACAAcAByAPMAeABpAG0AYQAgAHYAZQB6ACAAcQB1AGUAIABvACAAWAAx -ADEAIABmAG8AcgAgAGUAeABlAGMAdQB0AGEAZABvAC4AKW8QGwBNAGUAbgB1ACAASQB0AGUAbQAgACgA -UAByAGUAZgBlAHIA6gBuAGMAaQBhAHMALgAuAC4AKdIADgBFCOwMK4ECIqDSAA4ARQjsDC6BAiKg0gAO -AEUI7AwxgQIirxDaAJAH3wIDCEYBXgcKAJEFXAKvBM8AUABVAscEPwT0AGcFHwLtA6MHDgBzB2wFMAGX -CK0AmgCOBukEsgavBwgAZQNUCEIBLwgQCD4GBwPTB4YEyAHlAGMJLgQTAH8HEwBSAI0DjwCKAIYFcQB0 -BLgHxwgeAJkAbwCLAoIILQBgBPsAcgJTB2EFcgCIA6oCJQGAAyoFDAbRAHgEGQBiAI8H8ASHAF4AewfI -AtsIQABsAcgAaACMBHgB4gXHBJUC9AfOAHAAeQLpA8oB3wDcAN8AaQBuByQCkgN4CKwAXABtBmUAYQCA -AGsGOwN+BGMIrwapAIQGAQdGAIIBfQJ8AicIKgamAHwC8AbnAV0AWwevAGQDFABRAHUAkwNaCCwHiACJ -B58DwgBPAZoBTQH8AboAfgZ1ATsCaAKZB8kAgQWAAIMAVAM4AtIAVgCrA2sIUwbmAw4G6AAfBWYHCwF6 -BC0AkgBaBXACJgMRAHoAdgbAArYAUwRbCD8CXAY1AF0IKwljAHEGnQPaAGYAfQCHCC4AWQWvAZ0ERgB3 -AFgEmwePB4oBzgBXAF8HNQDSATwAhQanBOEAaoEB1IEBxIBdgQHqgDiBAZSBAdmBAgiAhoEBFIAagFCA -jIDtgQEegK+BASeAloDDgQGcgOyBAaeBASyARYEB+IALgQFtgQG8gQENgQF7gQGQgKuAsIEB6YAugQHV -gQHhgQFSgNCBAa6BARKAWYCjgQIYgOGBARyBAZKAPYEBa4C9gQFlgQFYgQE7gPKBAQ+BAb6BAdqAFoDP -gQFngHyBAfOAlIEBIIDrgG6BAaWBAT+BAVyAxYBigEGApIEBJIEBg4D8gOOAnYEB04EByIEBAoCLgQEK -gQHCgJCBAeiAwoBRgLSBAWmA/YBXgQFEgQEGgQF2gQHAgOCBAQGAlYDMgFaAHIAegLeAyoEBloB/gLiB -AfeAhIDIgQFugJuBAR2AwIEBYYC6gPaBAfuBAYGBAVSBAVCBAZ6BAU2AP4B6gGiBAd2BAXmBAQyAmIEB -ooA3gH6BAbiAqIChgC2A9IECBYCygQHvgQGygQFegQG0gMuACoBGgDWAXIBNgQEXgQF0gDGAdICBgQHG -gQEjgQE3gQFPgEyAqYCNgFWADIC1gQHlgQGNgJ6BAauAAoECEIEBmIA+gOiBAgOAeYEBMIBlgJ+BAQWA -+oEBf4CIgESA9YEB4oBvgQFfgIWBAeyBAiCA54EBiYDSgK2BARGBAVqBAf2Ad4EBPoBIgO+A+4BzgQEI -gQGwgQG2gFOAbYCPgQGagBuAMoEBVoEBfYEBGIC80gAOAEUI7A0OgQIirxDaDQ8NEA0RDRINEw0UDRUN -Fg0XDRgNGQ0aDRsNHA0dDR4NHw0gDSENIg0jDSQNJQ0mDScNKA0pDSoNKw0sDS0NLg0vDTANMQ0yDTMN -NA01DTYNNw04DTkNOg07DTwNPQ0+DT8NQA1BDUINQw1EDUUNRg1HDUgNSQ1KDUsNTA1NDU4NTw1QDVEN -Ug1TDVQNVQ1WDVcNWA1ZDVoNWw1cDV0NXg1fDWANYQ1iDWMNZA1lDWYNZw1oDWkNag1rDWwNbQ1uDW8N -cA1xDXINcw10DXUNdg13DXgNeQ16DXsNfA19DX4Nfw2ADYENgg2DDYQNhQ2GDYcNiA2JDYoNiw2MDY0N -jg2PDZANkQ2SDZMNlA2VDZYNlw2YDZkNmg2bDZwNnQ2eDZ8NoA2hDaINow2kDaUNpg2nDagNqQ2qDasN -rA2tDa4Nrw2wDbENsg2zDbQNtQ22DbcNuA25DboNuw28Db0Nvg2/DcANwQ3CDcMNxA3FDcYNxw3IDckN -yg3LDcwNzQ3ODc8N0A3RDdIN0w3UDdUN1g3XDdgN2Q3aDdsN3A3dDd4N3w3gDeEN4g3jDeQN5Q3mDecN -6IECvYECvoECv4ECwIECwYECwoECw4ECxIECxYECxoECx4ECyIECyYECyoECy4ECzIECzYECzoECz4EC -0IEC0YEC0oEC04EC1IEC1YEC1oEC14EC2IEC2YEC2oEC24EC3IEC3YEC3oEC34EC4IEC4YEC4oEC44EC -5IEC5YEC5oEC54EC6IEC6YEC6oEC64EC7IEC7YEC7oEC74EC8IEC8YEC8oEC84EC9IEC9YEC9oEC94EC -+IEC+YEC+oEC+4EC/IEC/YEC/oEC/4EDAIEDAYEDAoEDA4EDBIEDBYEDBoEDB4EDCIEDCYEDCoEDC4ED -DIEDDYEDDoEDD4EDEIEDEYEDEoEDE4EDFIEDFYEDFoEDF4EDGIEDGYEDGoEDG4EDHIEDHYEDHoEDH4ED -IIEDIYEDIoEDI4EDJIEDJYEDJoEDJ4EDKIEDKYEDKoEDK4EDLIEDLYEDLoEDL4EDMIEDMYEDMoEDM4ED -NIEDNYEDNoEDN4EDOIEDOYEDOoEDO4EDPIEDPYEDPoEDP4EDQIEDQYEDQoEDQ4EDRIEDRYEDRoEDR4ED -SIEDSYEDSoEDS4EDTIEDTYEDToEDT4EDUIEDUYEDUoEDU4EDVIEDVYEDVoEDV4EDWIEDWYEDWoEDW4ED -XIEDXYEDXoEDX4EDYIEDYYEDYoEDY4EDZIEDZYEDZoEDZ4EDaIEDaYEDaoEDa4EDbIEDbYEDboEDb4ED -cIEDcYEDcoEDc4EDdIEDdYEDdoEDd4EDeIEDeYEDeoEDe4EDfIEDfYEDfoEDf4EDgIEDgYEDgoEDg4ED -hIEDhYEDhoEDh4EDiIEDiYEDioEDi4EDjIEDjYEDjoEDj4EDkIEDkYEDkoEDk4EDlIEDlYEDlhDNEgAB -iBkRAXwQlRECFBEBgRIABJUuEgADDmcRAh0SAAGIFxIABJWuEgAElbQRARASAASVqxEBchIABJW1EgAE -lQcRAV8SAASVShECHxIABJW3EgAElZkRAScRASURAhkRAhoRAZIRAWESAASVuBIAAYgMEQF0EgAEla8S -AASVqRECIREBpxDLEI8SAAGICxIABJWnEgAElUYRAXcSAAGIHhEBBxEBHREBNhEBkRIAAYgUEgAElWUS -AASVaBCWEgAElboRAUERASkRAhMSAASVuREBeBAdEMQSAASVthEBgxIABJWmEBMRAYkSAAGIEhEBjBEC -IBIABJWHEQIXEQGGEgAElUsRAbMSAASVSBCREQEoEgABiBESAASVMBIAAYfWEQGPEQGLEgABiBsQhhEB -ERECEhEBeRAXEJASAASVaRIABJWjEQE0EQGHEIgRAV4RAj8SAASViBEBXBIAAYgYEQE3EQGuEQFwEQGk -EQF+EgAElYYSAASVohEBjREBphIAAYghEgAElVARAXMQXBIABJVnEgAEla0Q9BECFhEBiBIABJWwEgAB -h8QSAAGIExCpEQIYEQFxEQGsEQFrEgABiL8RAYUSAASVMhIABJWlEQF9EDgRAWwSAASVuxIAAYgQEgAE -lYURAhUSAASVahIABJVTEgAElSsSAAGIFhEBqhC1EQIbEgAElaoQoxIABJVMEQEwEgAElU0RAaURAhwR -AR4RAg8RAYAQBREBPhD1EQIMEDoSAASVUREBexEBLRECPREBihDPEgAElSoRAQ4RAY4RATEQghEBYBEB -dhIABJUxEgAElbwSAAGHxxEBghIABJVHEMwSAASVmxIABJWyEQEqEQF/EQFiEgAElbESAASVZhIAAYgN -EgABiL0RAS8QnRCDEDkRASQRAiIRAQ0T//////////0QzhEBXRIABJWoEQIjEQGEEQGtEQGjEQIlEQI+ -EgABh8USAASVrBIABJWzEQGxEgAElZgSAASVSRIABJVSEgAElaQRAiQQyhIAAYgiEgAElZ8RAg4SAASV -nBEBbRCBEQGv0gAOAEUATQ7EgDqg0gAOAEUI7A7HgQIioNIADgBFCOwOyoECIqDSADoAOw7MDs2iDs0A -P15OU0lCT2JqZWN0RGF0YQAIABkAIgAnADEAOgA/AEQAUgBUAGYHoAemB/EH+Af/CA0IHwg7CEkIVQhh -CG8IegiICKQIsgjFCNcI8Qj7CQgJCgkNCRAJEwkWCRgJGwkdCSAJIwkmCSkJKwktCTAJMwk4CTsJRAlQ -CVIJVAldCWcJaQl3CYAJiQmUCZsJrQm2Cb8JyAnNCdwJ7wn4CgMKBQoGCg8KFgojCikKMgo0CsEKwwrF -CscKyQrLCs0KzwrRCtMK1QrXCtkK2wrdCt8K4QrjCuUK5wrpCusK7QrvCvEK8wr1CvcK+Qr7Cv0K/wsB -CwMLBQsHCwkLCwsNCw8LEQsTCxULGAsbCx4LIQskCycLKgstCzALMws2CzkLPAs/C0ILRQtIC0sLTgtR -C1QLVwtaC10LYAtjC2YLdwuFC44LlguYC5oLnAueC78LxwvbC+YL9Av+DAsMEgwUDBYMGwwdDCIMJAwm -DCgMOQxADEwMTgxRDFQMVwx+DIAMjQycDJ4MoAyiDKoMvAzFDMoM3QzqDOwM7gzwDQMNDA0RDRwNJQ0n -DSkNNw1KDVMNWg1yDYENkg2UDZYNmA2aDbcNyQ3RDdgN4Q3rDfcN+Q37Df0N/w4CDgMOBQ4aDiUOJw4q -Di0OMA5IDoEOjQ6jDrEOxg7VDugO+g8FDw8PHQ8vDzwPSg9PD1EPUw9VD1cPWQ9bD10PXw9hD2MPZQ9n -D2wP1w/oD+8P+A/6EAMQBRAIEBUQHhAjECoQNxA5EDsQPRBGEE8QWxBdEF8QaBBtEIMQhBCNEJYQoxCw -ELkQxBDNENcQ3hDqEQkREhEZETARQRFDEUURRxFJEVoRXBFeEWARYhFnEXARchF3EXkRexGkEbIRvxHB -EcMRyBHJEcsRzBHOEdAR0hH7EgUSDhIQEhISFBIWEhgSGhIcEh4SMxJCEk8SURJTElUSXhJgEmUSZxJp -EpISlBKWEpcSmRKaEpwSnhKgEsESwxLFEscSyRLLEs0S6BLxEvgTBxMPExgTHRMmEzcTORM7Ez0TPxNc -E14TYBNiE2QTZRNnE3wTfhOBE4QThxOgE9kT2xPdE98T4RPjE+UT5xPpFA4UHRQuFDAUMhQ0FDYUUxRV -FFcUWRRbFF4UXxRhFHYUghSEFIcUihSNFKcU3BTeFOAU4hTkFOYU6BTqFOwU8RT6FQIVCxUNFSIVMxU1 -FTcVORU7FVwVXhVgFWIVZBVmFWgVhBWWFacVqRWrFa0VrxXMFc4V0BXSFdQV1RXXFe8WKBYqFiwWLhYw -FjIWNBY2FjgW2RbqFuwW7hbwFvIXDxcRFxMXFRcXFxgXGhcvFzEXNBc3FzoXUxeiF78X0RfjF/gYBhgP -GBAYEhgUGBYYGBgaGBwYHhggGCIYIxgkGCcYKhgsGDEYQhhEGEYYSBhRGFMYhBiNGJMYmxidGJ8YoRij -GKUYpxipGKsYtBjBGMMYxRjHGNIY5hjvGPEY/BkFGQcZEBkSGRQZFhkYGUUZRxlJGUsZTRlPGVEZUxlV -GVcZYRmOGZAZkhmUGZYZmBmaGZwZnhmgGakZ1hnYGdoZ3BneGeAZ4hnkGeYZ6Bn3GgAaDRohGjAaORpG -GlQaZRpnGmkaaxptGo4akBqSGpcamRqbGp0anxqwGrIatRq4Grsa6hrsGwEbEhsUGxYbGBsaGzcbORs7 -Gz0bPxtBG0MbURtxG4IbhBuGG4gbihujG7Qbthu4G7obvBvZG9sb3RvfG+Eb4hvkG/0cNhw4HDocPBw+ -HEAcQhxEHEYctRzGHMgcyhzMHM4c6xztHO8c8RzzHPQc9h0PHUgdSh1MHU4dUB1SHVQdVh1YHXAdhh2X -HZkdmx2dHZ8dsB2yHbQdth24HdUd1x3ZHdsd3R3eHeAd+R4yHjQeNh44HjoePB4+HkAeQh5pHn0ejh6Q -HpIelB6WHr8ewR7DHsQexh7HHskeyx7NHtoe3B7eHuEe8B8BHwMfBR8HHwkfKh8sHy4fMB8yHzQfNh9A -H0IfVR9mH2gfah9sH24fix+NH48fkR+TH5Qflh+vH7IftR+4H7sfvh/WIA8gESATIBUgFyAZIBsgHSAf -IHogjSCeIKAgoiCkIKYguSDKIMwgziDQINIg7yDxIPMg9SD3IPgg+iEPIREhFCEXIRohMyFsIW4hcCFy -IXQhdiF4IXohfCGlIbYhuCG6IbwhviHfIeEh4yHlIech6SHrIiAiIiI7IkwiTiJQIlIiVCJ9In8igSKC -IoQihSKHIokiiyKeIq8isSKzIrUityLUIuUi5yLpIusi7SMKIxsjHSMfIyEjIyNAI0IjRCNGI0gjSSNL -I2MjnCOeI6AjoiOkI6YjqCOqI6wkSyRcJF4kYCRiJGQkhSSHJIkkiySNJI8kkSSjJLQktiS4JLokvCTZ -JNsk3STfJOEk4iTkJPwlNSU3JTklOyU9JT8lQSVDJUUlbiV/JYElgyWFJYclrCWuJbAlsiW0JbYluCW6 -Jccl4CXxJfMl9SX3JfkmFCYlJicmKSYrJi0mSiZMJk4mUCZSJlMmVSZuJqcmqSarJq0mryaxJrMmtSa3 -Jssm4SbyJvQm9ib4JvonGScqJywnLicwJzInUydVJ1cnWSdbJ10nXydsJ24ncSd0J4EniyecJ54noCei -J6QnwSfDJ8UnxyfJJ8onzCflKAYoGigmKCgoKigsKC4oMCg1KDcpFCklKScpMCkyKTUpSilSKV8payl5 -KXspfSl/KYEpgymKKZcppCmsKa4puinDKcgp3SnfKeEp4ynlKfgqBSoHKgoqEyocKi4qNypCKk4qWSpq -KmwqbipwKnIqjyqRKpMqlSqXKpgqmiq0Kukq8ir0KvYq+Cr6Kvwq/isAKxUrHisgKzIrQytFK0crSStL -K2wrbitwK3IrdCt2K3grfSuKK5srnSufK6Eroyu0K7YruCu6K7wr2SvbK90r3yvhK+Ir5Cv8LB0sHywh -LCMsJSwnLCks5izxLQItBC0GLQgtCi0iLS8tMS0zLTUtVi1YLVotXC1eLWAtYi1vLXEtdC13LX4tgC2G -LZctmS2bLZ0tny2wLbIttC22LbgtyS3LLc0tzy3SLfMt9S33Lfkt+y39Lf8uCy4NLhguKS4rLi0uMC4z -LlguWi5dLl8uYS5jLmUucy55LooujC6OLpEuky6wLrIutC63Lrouuy69LtYvDy8RLxMvFS8XLxkvHC8e -LyEvTi9fL2EvYy9lL2gvdy+IL4ovjC+PL5Evri+wL7IvtS+4L7kvuy/TMAwwDjAQMBIwFDAWMBkwGzAe -MKMwtDC2MLkwuzC+MNsw3TDfMOIw5TDmMOgxATE6MTwxPjFAMUIxRDFHMUkxTDGZMaQxtTG3MbkxvDG/ -MeAx4jHlMegx6jHsMe4yDzIRMh0yLjIwMjIyNTI3MkgySjJNMk8yUjJvMnEyczJ2MnkyejJ8MpUyzjLQ -MtIy1DLWMtgy2zLdMuAzNTNBM1IzVDNXM1kzXDOrM80z1zPkM/k0BjQgNDw0VzRjNII0kTSdNKA0ozSo -NKs0rjSvNLI0uzTENMc0yDTLNM400TTaNQM1DTUXNSE1LzUyNTU1ODU6NT01QDVDNUY1STVMNVc1cDV8 -NX81gjWFNYg1izW0Nbc1ujW9NcA1wzXGNck1zDXWNd816DX8NhE2FDYXNho2HTZWNmI2azZ+Nos2lzal -Nqc2qjatNrA2sja1Nrg2uzbONtE20zbWNtk23DbzNvw3BTcTNxw3HjclNyg3KzcuN1c3ZjdzN3s3hjeV -N6A3qze4N7k3vDe/N8g3yzfUN9033jfhN/44AzgGOAk4DDgOOBE4FjgjOCU4MThGOEg4SjhNOE84YThq -OHU4iTiuOMQ4yTjLOM440TjTONY42DjaOPs5CDkKOQ05FjkbOSk5UjlTOVY5WTliOWU5bjlvOXI5jzmS -OZU5mDmaOZ05pTnKOcw5zznSOdQ51znZOds6BDoFOgg6CzoUOhc6IDohOiQ6QTpEOkc6SjpMOk86Vjpr -Om06cDpzOnU6gTqqOr46wDrDOsY6yTrMOs06zzrROuI65DrtOu87BDsGOwg7CzsNOyY7Ozs9O0A7QztF -O087XDteO2M7bDt3O4I7kzuVO5c7mTucO6I7szu1O7c7uju8O9k72zvdO+A74zvkO+Y8HzwhPCM8JTwn -PCk8LDwuPDE8ajx7PH08fzyBPIQ8jjyfPKE8pDymPKk8uzzMPM480DzSPNU85Dz1PPc8+Tz7PP49Bz0Y -PRo9HD0ePSE9LT0+PUA9Qj1FPUg9ZT1nPWk9bD1vPXA9cj2MPcE9wz3FPcc9yj3NPc890j3bPeQ95j3+ -Pg8+ET4UPhY+GT4yPkM+RT5HPkk+TD5YPmk+az5uPnA+cz6APpE+kz6VPpc+mj6oPrk+uz6+PsA+wz74 -PwU/Ej8oPzY/QD9OP2c/dD+GP5o/pD+wP7M/tj+5P7w/vz/EP8c/yj/NP9A/0z/uQBdAH0AoQCpAL0A6 -QE9AUUBUQFdAWkBjQGVAaEBrQJxAq0DEQNxA30DiQOVA6EDqQO1A7kDxQPJA9UD+QQBBA0EFQQ5BEEEd -QSBBI0EmQShBK0EuQUtBTUFPQVJBVUFWQVhBcEGVQZdBmUGcQZ5BoUGjQaVCrkLLQs1Cz0LSQtVC1kLY -QvFDFkMYQxpDHUMfQyJDJEMmQ/9EHEQeRCBEI0QmRCdEKURCRGdEaURrRG5EcERzRHVEd0UsRUVFTkVV -RW5Fd0V5RYRFh0WKRY1FkEWTRaxFuUXDRcZFyUXLRc5F0EXTRdxF3kXgRehF8UX2RgRGHUYgRiNGJUYo -RipGLUY2RjhGOkZDRkVGVkZYRltGXUZgRmNGZUZoRmtGiEaKRoxGj0aSRpNGlUatRtJG1EbWRtlG20be -RuBG4kf5SBZIGEgaSB1IIEghSCNIO0hgSGJIZEhnSGlIbEhuSHBIeEiVSJdImUicSJ9IoEiiSLtI4Eji -SORI50jpSOxI7kjwSXlJlkmYSZpJnUmgSaFJo0m8SeFJ40nlSehJ6kntSe9J8UrkSu9LCEsLSw5LEEsT -SxVLGEshSyNLLEsuSz9LQktFS0dLSUtLS01LT0tRS25LcEtyS3VLeEt5S3tLlEu1S7dLuUu8S75LwUvD -TMhM6U0CTQVNCE0KTQ1ND00STRtNHU0mTShNNU03TTpNPE0/TUFNRE1hTWNNZU1oTWtNbE1uTYdNqE2q -TaxNr02xTbRNtk69TtpO3E7eTuFO5E7lTudPAE8hTyNPJU8oTypPLU8vT3tPmE+aT5xPn0+iT6NPpU+9 -T95P4E/iT+VP50/qT+xQ41DrUQBRA1EFUQhRClENURZRGFEjUSVRKFErUS5RMVFOUVBRUlFVUVhRWVFb -UXRRmVGbUZ1RoFGiUaVRp1GpUzJTT1NRU1NTVlNZU1pTXFN0U5lTm1OdU6BTolOlU6dTqVVKVWdVaVVr -VW5VcVVyVXRVjVWyVbRVtlW5VbtVvlXAVcJWUVZkVm1WdlaBVplWpFauVrdWvFbPVttW7FbuVvBW81b1 -VwZXCFcKVw1XEFcxVzNXNlc5VztXPVc/V0ZXSFdWV2dXaVdsV25XcVeCV4RXh1eKV41XllefV6FXrFev -V7JXtVe4V7tX5FfmV+hX61ftV+9X8Vf0V/dX+1gEWAZYH1ghWCRYJ1gqWC1YL1gyWDVYN1g5WDxYPlhn -WGlYa1hsWG5Yb1hxWHNYdVieWKBYo1imWKhYqlisWK5YsVjCWNNY1VjYWNtY3ljnWOlY6lj8WSVZJ1kp -WSpZLFktWS9ZMVkzWVxZXllgWWFZY1lkWWZZaFlqWZNZlVmXWZhZmlmbWZ1Zn1mhWa5Z11nZWdtZ3Vnf -WeFZ41nmWelZ8ln0WflZ+1n9WiZaKFoqWi1aL1oxWjNaNlo5WkZaT1pRWlRaVlp/WoFag1qGWohailqM -Wo9aklqZWqJapFq3WrpavFq+WsFaxFrGWslay1rNWvZa+Fr6Wvta/Vr+WwBbAlsEWyVbJ1sqWy9bMls0 -WzZbOFtMW05bd1t5W3tbfFt+W39bgVuDW4VblFu9W79bwVvEW8ZbyFvKW81b0FvWW99b4VvkW+Zb8lv3 -XAhcClwMXA5cEVwgXDFcM1w1XDhcO1xIXFFcVF1/XYJdhF2HXYpdjF2OXZFdlF2WXZldnF2eXaFdpF2m -Xahdq12tXbBds121Xbhdu12+XcBdwl3EXcZdyF3LXc5d0V3UXddd2l3cXd5d4V3kXedd6V3sXe9d8V30 -XfZd+V37Xf5eAF4DXgZeCF4KXg1eEF4TXhZeGV4bXh1eH14hXiNeJl4oXipeLV4wXjJeNF42XjlePF4/ -XkFeRF5HXkpeTF5OXlBeUl5UXlZeWV5cXl9eYl5kXmdeal5sXm9ecl51XndeeV57Xn1ef16BXoReh16J -Xotejl6QXpNelV6YXppenV6fXqJepV6oXqterl6wXrNetl65Xrtevl7AXsJexF7GXshey17OXtFe1F7X -Xtpe3F7fXuJe5F7mXuhe6l7sXu9e8V7zXvZfG18lXyhfK18uXzFfNF83X0BfWF9lX25feV+EX41fj1+a -X51foF+jX6ZfqV+yX7Rft1+6X9Jf21/kX+9gEGATYBZgGWAcYB9gImArYERgTWBPYFJgVWBrYIRgjWCW -YKNgrGCuYLdgumC8YL9gwWDMYQFhA2EGYQlhDGEPYRJhFWEYYRphHWEgYTthaGFxYXNhfGGFYYdhimGT -YZhhoWGkYs9i0mLUYtZi2WLbYt1i32LhYuNi5WLoYupi7WLwYvJi9WL3Yvli+2L9Yv9jAWMEYwdjCmMN -Yw9jEWMTYxVjGGMbYx1jH2MhYyNjJWMoYypjLWMvYzFjNGM2YzljO2M9Yz9jQWNDY0VjSGNKY0xjT2NR -Y1NjVWNYY1pjXGNfY2FjY2NlY2djaWNsY29jcWNzY3VjeGN7Y31jf2OBY4RjhmOIY4pjjWOQY5JjlGOX -Y5pjnWOgY6JjpWOoY6pjrGOuY7Fjs2O1Y7djuWO7Y71jwGPDY8VjyGPLY81j0GPSY9Vj12PZY9xj3mPg -Y+Nj5WPoY+pj7WPwY/Jj9GP2Y/hj+mP8Y/5kAWQEZAdkCmQMZA9kEWQTZBZkGWQbZB5kIGQjZCVkJ2Qp -ZCtkLWQ2ZDllZmVpZWtlbmVxZXNldWV4ZXplfWWAZYNlhWWIZYtljWWPZZJllGWWZZllnGWfZaJlpWWn -Zallq2WtZbBlsmW1ZbdlumW9ZcBlwmXFZchly2XOZdBl02XWZdhl2mXdZeBl4mXlZedl6mXtZe9l8WX0 -Zfdl+mX9ZgBmAmYEZgZmCGYKZg1mD2YRZhRmF2YZZhtmHWYgZiNmJmYoZitmLmYxZjNmNWY3ZjlmO2Y9 -ZkBmQ2ZGZklmTGZOZlBmUmZVZlhmW2ZeZmBmYmZkZmZmaGZqZm1mcGZyZnRmd2Z5ZntmfmaBZoNmhmaI -ZotmjmaRZpRml2aZZpxmn2aiZqRmp2apZqtmrWavZrFmtGa3ZrpmvWbAZsNmxWbIZspmzGbOZtBm0mbU -Ztdm2WbcZt9m6GbraBhoG2geaCFoJGgnaCpoLWgwaDNoNmg5aDxoP2hCaEVoSGhLaE5oUWhUaFdoWmhd -aGBoY2hmaGlobGhvaHJodWh4aHtofmiBaIRoh2iKaI1okGiTaJZomWicaJ9oomilaKhoq2iuaLFotGi3 -aLpovWjAaMNoxmjJaMxoz2jSaNVo2GjbaN5o4WjkaOdo6mjtaPBo82j2aPlo/Gj/aQJpBWkHaQppDWkQ -aRNpFmkZaRxpH2kiaSVpKGkraS5pMWk0aTdpOmk9aUBpQ2lGaUlpTGlPaVJpVWlYaVtpXmlhaWRpZ2lq -aW1pcGlzaXZpeWl8aX9pgmmFaYhpi2mOaZFplGmXaZppnWmgaaNppmmpaaxpr2myabVpuGm7ab5pwWnE -acdpymnNadBp02nWa5trr2u7a9dr+2wwbDxscWyJbJRsqmzpbVJta22ibb1tyW3Vbq5vf2/scABwUXFo -cW9xdnGWch1zLHNVc2dzf3OLdLB00HUDdix2YXb+eCt4onnVehZ6InrZe/R8AHwJfB58Y3xvfMR9vX54 -fp9/BIAngIGA34D6gRyBK4FUgW2BeoGigcWDAIMNgyiDMoNOg2eECIWthdOGfobHhtOG+IcGhySHr4fQ -h+WIVoiDiJ2I3ojriTKJRolein+LJIs3i2iLiouii9WMIoxHjF2MdI1NjXCNs46wj2OPeI+Rj5yPx4/j -kBKQHpA4kTmRTZGSk0+TZ5Nzk4uURJUllT+VRpWPldSWW5akl7eZZJohm0ybz5wCnA+cFpwynKWdmp4h -ns6fB58QnxOfFJ8dnyCfIZ8qny2g5KDnoOqg7KDvoPGg9KD3oPqg/KD/oQGhA6EFoQehCqEMoQ+hEaET -oRahGKEboR6hIKEjoSWhKKEroS6hMaE0oTahOKE7oT2hQKFDoUahSKFLoU6hUKFSoVWhV6FaoV2hX6Fi -oWShZ6FqoW2hb6FyoXWheKF6oXyhf6GBoYShhqGJoYuhjaGQoZOhlqGYoZqhnKGeoaGhpKGmoaihqqGt -obChs6G1obihu6G9ocChwqHEocahyaHLoc2h0KHTodah2aHbod6h4KHioeSh5qHooeqh7KHvofGh86H2 -ofih+qH9of+iAqIEogeiCaILog6iEaIUoheiGqIdoh+iIaIjoiaiKaIsoi6iMaIzojWiOKI6ojyiPqJA -okOiRaJIokuiTqJRolOiVaJXolmiW6JdomCiY6JlomeiaaJsom+icqJ1oneieaJ7on2if6KBooSih6KJ -ooyijqKRopSilqKYopuinaKgoqKipKKnoqmirKKuorCisqK1oreiuqK8or+iwqLEoseiyaLLos6i0aLU -otai2aLbot2i36LhouSi56Lqouyi7qLwovOi9aL3ovqi/aMAowKjC6MOpMWkyKTLpM6k0aTUpNek2qTd -pOCk46TmpOmk7KTvpPKk9aT4pPuk/qUBpQSlB6UKpQ2lEKUTpRalGaUcpR+lIqUlpSilK6UupTGlNKU3 -pTqlPaVApUOlRqVJpUylT6VSpVWlWKVbpV6lYaVkpWelaqVtpXClc6V2pXmlfKV/pYKlhaWIpYuljqWR -pZSll6WapZ2loKWjpaalqaWspa+lsqW1pbilu6W+pcGlxKXHpcqlzaXQpdOl1qXZpdyl36XipeWl6KXr -pe6l8aX0pfel+qX9pgCmA6YGpgmmDKYPphKmFaYYphumHqYhpiSmJ6Yqpi2mMKYzpjamOaY8pj+mQqZF -pkimS6ZOplGmVKZXplqmXaZgpmOmZqZppmymb6ZypnWmeKZ7pn6mgaaEpoemiqaNppCmk6aWppmmnKaf -pqKmpaaopqumrqaxprSmt6a6pr2mwKbDpsamyabMps+m0qbVptim26bepuGm5Kbnpuqm7abwpvOm9qb5 -pvym/6cCpwWnCKcLpw6nEacUpxenGqcdpyCnI6cmpymnLKcvpzKnNac4pzunPqdBp0SnR6dKp02nUKdT -p1WnWqddp1+nYqdlp2qnb6dyp3enfKeBp4SniaeMp5GnlqeZp56noaemp6unrqexp7Snt6e6p72nwqfH -p8qnz6fUp9en2qfcp96n46fop+2n8Kf1p/in+6f+qAGoBqgLqBCoEqgXqBqoHaggqCWoKKgqqCyoMag0 -qDmoO6g+qEOoRqhJqE6oUahUqFmoXKhhqGOoZqhrqHCodah4qHuogKiCqIWoiKiLqI2oj6iUqJmonKif -qKGopKinqKyor6i0qLeouqi9qMCow6jIqM2o0KjTqNio3ajgqOKo56jsqO6o8aj0qPmo/qkDqQWpCKkL -qQ6pEakWqRmpHqkjqSapKKkrqTCpNak6qT2pQqlHqUypUalUqVapWaleqWCpZaloqW2pcKlzqXapeal8 -qX6pgamDqYapiKmNqZCpk6mWqZmpm6mgqaOppqmpqauprqmxqbapu6nAqcOpyKnKqc+p1KnXqdqp3ani -qeep7KnxqfSp9qn4qfqp/aoAqgOqDKoOqhGqFqoZqhyqH6oiqiWqKKotqjKqN6o6qj+qRKpJqk6qUapT -qliqXapgqmWqaKpqqm2qdqp4qnmqgqqFqoaqj6qSqpOqnKqhAAAAAAAAAgIAAAAAAAAOzgAAAAAAAAAA -AAAAAAAAqrA - diff --git a/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/keyedobjects.nib index 9aabfb63d1415e3bc07e2837890e8803b06bd68b..74a1efe39798b0da4c697972f6d7b1e8aef41f17 100644 GIT binary patch literal 51384 zcmeEv34Bvk*7&*izL%HuliYNuaeL>t&QBlNw-w}65#~oZp{Qu52}j5FW=n{Q^AF->0HyURJ}p8cH6 zs0@eViQL>*fB*#s3aH=$4`fX0G|!I3L(#~%PKjvc^nLm<{hWS5zoOsJZ|M*8H^!L43}&(>tQk9+wPDAymhZV5y ztPeYd4P?XFXf}pTWu+{@rZby`Sp}QN=CcKCF|%BWTg$Fv8(0n7!fs=? zv-{Zn>;d)&dy?&9FR&NcYwUIQ7JHlRWuLOo*thIE_9Oe7(o$)qv{sH*+9~Z7zjCaS ztrRLJDTBzZ%5Y_zGG3Xglq$9|Q>joQ$~UyT=}c=v+|pAK>1yzsz+_A98jC7?UVy*do^1*pmtVs z)LgYdJyAVL9jFdchpQvhaq4(=s#>bfRA;FXHLA{6R;UZqg(_FiRxeO5RWDPoR@bQ; z)lKTH>TT-X>OJZs>JD|6`jq;T`m*|#`nLLkvO@h({Yd>n{Zjow{Y^dKQe7^W;WAy# zT`gQ~UF}@QyRuv-xN=>E$_iI6S8rEe*Qu@|*C^LS*CbcKHQhDa6>?R&PIoO-R=Cb^ zEpjb(o#k4hv~zKna4mJ6>pIVMvFj4orLN0dSGulqZE)S_y2*8m>sHrR*Zr;sTo1ao zyB>8t<=X9f+Vzas!};*AK2=HAVAi8Cnyqnbt~cryZvq zuVrc3S~u+kt-IDkJ5f7H>!%IYhG<3FByF-*qJ^}Wwn&?-ov8_Jsdlb*p>~CKjkaF9 zUfZnQuHB>EtKFyFuRW$s)*jcM(q7UgYcFfBYkRfH+WXp<+CFW+cEIg&Yi_sO=gxE= ztxa~far@oJxI4Iycjvgfy7S!y?q2TR?o-?Y-Gki2w8`$V?g{QG?sE5Bci3Iwj=AIR z1@49Jv)oJEOWiBotKDnd)$S|ZSG(7_H@IuuTimy}Z*^~V-{ro~eZTu*_ap9|?%nRE z-7mObb-(6*+x?FFefKBsPu+j@oCCc)%RCo(R(sZXF7;gPS?Ag0xxsUz=N8W$o;y8T zJ$HMydmi#U<9XKe98#qNd(R7=7dE) zeY3trzd^rIze&GYzeT@QzfHegzeB%M->ToGZ`1GA@6qqo@6+$sAJ8Avx9bn-59^QU zJM>5O$Mnbbo%$2{llm_GDSfy8wEm3#tp1$-y#9jzqW+Tpvi^$xs{We(y8ed#rv8@x zw*HR(uD(ZqPv5J*uYaI_sDGq?tbd|^s(+^cMgLs?LjSAMR{v7}O8;8_M*mj-PXAut zr|;K)(0|l_(tp-}(SOzdrvIiN(0})Wmw2g{c@?kfb$K6R+j< zc{9CDz0JJMy)C>)d0Tp0d0Tsr_O|i1^|tf2_xioZcsqDIdOLZK^&aOv-kask_ICDm z@#c6>@a7v$jK3OR8ebV-8{Zh;8s8b;8~cp?#t+7i#!tr2#xKUN#@~$Jj048+CYZ#e zCNmXNHC?7=x=oLnVd|#WG)&WMVp^up%ru*t&CKRz3-c(mrP<1CZ60m5G25E$%=V_= zJjU!`b~HPg$C}5P$D3JZw%OV2V&<4#&2HuiX0DlM=9>j(ce97t(=0T5nZ3;u&6CWN z%|7NSW?!?P+20&s4m1augUuo4spe2~n0cBx+#F$!G>gnp=4f+_Io2#T$C=~J3Fbs| zk~!HdF{hYQ%~Erk88D}tL34&#W|o__In$hF&Nf5l9CNN2HY?1C88s`-)6JL}Hxp)+ zInSJLE-)9GXPAr3GtI^3S>_Uxo5DQXJjYyWo@*{MmzyihmF9Wo`Q|F~0`o%iB6GF5 z#=O|P#JtqJ%)H#Z!dz=sn^&4wnOB?Z%xlc`=C$T^<_5FI+-PnxuQxZFTg)5G8_k={ zo6TF)Eb~_LHuHA#4)acPt9h5X&Ai*Z$Gq3P&%ED!zZTEuj^(hNGbkw1sxi9{g|&bbyY~ z366#1;CRS_Z0HPKAP2faH#h-uClnQrjYbm_I+cZk@px%b@hC^E54RV_r2rp@*X{U( zV7SVT2dq{_#r@05?07shBNPrL7LE#)C%-E#Djpb(MC`IeC>n`RDJm`sR@ic!DMiIY zV!;Y~el#{0?{Y@O8A^(ZaR7WF6XVGN9gVi*VGVFFBqNiZ2o zU zgvD?cECCJz&W3YfDVz(-U^%RSm2e)M53Aq;xDYOa)vyLGhD&$`KZa-XF1!aniTCG2 z_)tEQkK>d1RDKb^oL|ka<2Ufz_*Q;De}q59pX1L9GDnc8AoB!SBnTHo2y(U{O9fdj z$Vx%Z7vv&ARtvI5kc$PmLXc`ft`cOOATJ8?k|3`L@|qxT2=b;N9|`h_AfE~HxgcK% z@|__21lcdhkAnOx$ghI@CddInK~N$n6I2z{C8+xqFyS(|9Ik-1Pz_hYRi#D6gY0-B z6p`eCh>ljp%It|n#Up|<>@fH9wp{1!Ux#&I!ZolSu7&Gh1JuAq*aX+ZX4nEXl3((v{GKZc# z=J%+T2_qp246nee6N-w9LuVjj zk?TwkRTA_xY4&Q%6*lh024c#)6S@+d1WLz?&Q3P3Swp;i@l7F7`IO z1Mk9~X+_0j?YN{o$;?{tX1w{tqGAayB+B`rMA>X-oDbl`4e%kdDJ#WxQqLl<_!vHc zPp2dwm4mh7EuAO-0-tYy&+*BoDQL+F9FiaH-1H@UwGqC8uVKApM-D2HDyAZ1M;?kF zoO{28?>51A@ICB<{m^$(YS76JHW6_sG3@zM)sQHai%ZWtX4m%=kC>tpp$rlbf_V^x82BL$A&5wtjY0%Ma0Ue7 zQ}_^~0jo)TVWccj8H^|F8PQ;@T*8gCCGBcRI|pvfB!os)CBk;17Hny7f-9k#bmUoF z=WTiCfaN;~DYZ8v7bRIFTe8U<-u(?QNf(ksx{_|>1d>bgNIoeb-C+mmNeW3X(tBc2 z@wiYTYzHi#bXiCiFfv*`G8ms*Qg@}asCZ<=u82lLWh0_xlZ%Q+Ih2a>F|@!gmt;Gk zsCc9usp18^TP9clymjW1-+%v|pTP5Y*O%o=P9i6hKID`s&Yi;&c12u}CW1U8$a7Qs zX8`pcvKNqKo`r;!Yl$1m4W1MEoEz}a@$+=^gqZu(6_W=e>g5 zAF!H?wqx;VBp42z5sY=~)-7OJ!OF^bK&pL#`0VKXbTmOVv?r^07H`WbKXp>M9kyo$ z6Lu|FS+=Hu3T_4ul$wLy>oJ~2rS6VlJiF7g!FElJ`Lfo~oSSgl3} z|YMI(uH@*vMcHF=R|@eWqT*rkVjJg4L}OF&)1XjX>W935xAx%wk(*5jSk`=L zas}e4yKBKgfb4~8@&V7{rMxY_@I9+3tRo+RNj@f@kWa~H&RE+ zYuG@(A>Wek;A!$b*+=%1A7BgliTq4{A-}?A@;BH*4v^o;ca%^Xu-X?D4~hk6%?d?k zIhq18>mkutQ8Y3lS{4jXE-D`9sJBy#iig_4ay#ZIY`&u60l~7lvtrSzNcq5MI2w}* zWB+hCIzK*cVWnMchwZWi>T%InB=yu$Ma5E;EVIMm;>uuIC^Bnes5~)Sn#2R6;i`&A z|EfeZX2(Nk;F1yxQJl0q_^F|GXx8jR$|gpwZAww`sj*OMDQyn1FS)5{MaAO~5zd5Y zS&xm*cShvX_yw6``*GmY`8*FV@7T}nXnq#y*w1+fJmBHyHT^yLk5A*XJNClO< zHsh##7N5!OcVQjvj3yTCLjFQ?;3nEt-q?+vKyzsx&8G#lJNbz=rG>N??M-v(N#wgJ zMa4sl%N*r#Qc-a{X}DM^G8`BVRpL&k78N_U^{+@EDkr2KN}3pUBq0G(BdAxFGeevW5<#gXs_+;*0o_x9CtX=`ea49ZpBkk+g`8qM5LTj-g{|F&#(8 z(+PAUY$1E6A*UFN2f#)etvzb~=Sl zrKNNl4bbWEGz}uD*$WbqU^5kQ0C=2N@VPw9qvMLA6;gI4O)F}{D|8mxP{%oEg!_En zHZOxoLv#+EOUF~RKIBNq5zsoHI6IWEd1QEQw*vf^-@7+BR2ZSr4KxaUCng_w6-*kX zA$mHE(YZ81tLQw628kRE?IWatU?Lcf&XU$rgvTrwKb==jC|(#(*cAb*$!y8fYB!U< zt}}ULKyGs8v*?mdbP45-?bPrDAR?qniQ^0j+2L}$@@5(YAAs%jY&wOWLzj{t=rY(v z_R^KGgPt$#wb9{VnLRriF1KTjFDkQH-hqC6A)m*qxW!9-3h>r^KI#$!;V%$|DhNXm z{L&BPm!ft7TD0k_zlcW$SLaGKy>bJ+ z68e_bW1WX4>TBqFdMzDKuXBhRY3|I9{U$rq#n0;4Z;(R_ha|Mk4xvf9T8wlxabUC} z7%7h)5mf6yhj2UeGViAM(0l24dSBf#dB=WZlFMA$v0tY{EfXH5rSu{CaP2bB<^q>F zp?@M6o*k_Rck%!ZkqI^FGWwh(lPwOR_@qpmAFq?U zd?8=PtN6LR)Pws(wIOxtUWHfa>v-z2Qm4+c>Me@CMXTuBa#1VzawLWpNn)rQU#>8n zsP@WJ+0*%#I+Y*L4{PX$^dspjP5M^*$6~>S6N`%F-}>`@N~`E+a^6+^d|o+uR!VB8 zPxK{^49e}+BYFD1rkR^)X37^)Qm4z;DoUuM(|vTm)Eigx%NnT5^hel8f2O~n2Y~*_ z*YGy{Vt$E-uW^LwHPRusfgXTc7%&2x=>h&G|C0Zezs=vQRhjd;_x$rJGs}Qobl*WL z^QGM4tD{yn6oU=3pbA3L2jHCT5X7MpqS7NEJpl5=<0~3{Ws(OtJ}&1KJqPIfwV?un z(;TZJjWt37;8z-sPzBzx!m15oGyyO{4F zC|t=cenr&EImj1+RuX#fPM45D4@tP51(nVL)8SDmO%8hrN6EWM>YiQT7FGnC*(m8Qqpbx!I$#~OXi)(=t@HCGNb-90 z$nh8CFJAm^(rMj@%bJaqF6+n0FR+VEU=v{%>kqqG37aA{?4>DRuf;d>>$$}@WV(9+ z$nTb&-S78+mD#^MR2GUxf-%1xwkzyNB8oZ~#)`h+O2BGT$1MU8yPo0CWh?|fYvtZ7a= zwxrf&hc2f(lGbx!Y5y`iR+e&_1+2EwSh*b=g642>A{Z$T#>)H8h*l*=2P1a49zR(D z)$BZ;#qZ*6`F#z*$X3Bdb|Je6!N^weZM+S?o8RN%+fo)oG8DotW0$8K6{7{|>m08h zIsW{-r0@05I4amRu#2rY2+a3#i{BNnIt&blPOq~4!9*-L&yL4~{yDg}VB8;y1j`bk zdBJ#TSvXWSH;|Yei&o95b5jsto1mI)=2`p!-j+YyVAJSuW;d~$CDU*m&JXhK9^O&z zs-Sz0Kd;9>5Y}OL!!EYzpj|!0E&f2%>Y3!CRgzme{$peu$PM3@?4V9_#E1xLlCz}D z@Jl`$gh*1JprjcHBVZVeh5;}N`omZl1b(Q1D#=`8&@EuKkv{3NaHvwcq|t>^=b)~o zN&;*|!@?8f3j6KR8V~^JY>`DG8e=G&C?idHl?}1#lhm3>uTDrw8B}35_uVN^s(nPTopOUFGRhlWy;c+@%X`vi7 z7434&nm|uOz-p2Dn2fBB3@$(qmE)aLuXu2tjOUf6o|J)<$wkEz z$4S3O?RA;<(Z~#;NOA^e9XP|}BDDYUvNTPdFHpBfM<*H+&K2onL)QV`?+k-pl#uPr z#a|a>Hh)!+azSSCmoi5$0N^k4*Z7Nq%oN1tuLP`?DE51!sPBbmv}ZvXwwZMibefo1DO1>L&m=J(3CyA<@w@uz)QT(YPjKR3sp z-#vG61Iy z4E{C$id+0G4}aamze%mBH?HYNz9#j#4_|q`a*EPd>BoG^0J@LA!}s!!_!ay!zPbU^ zM59JIRT+xwOd2)s@;x5D=I_c8P{zP6<&=X?*L&RJ??kPmp%_Av;iH&9W*38?WJ`6b zHwHCO4@I_=aD4j*t&}~gOj0J-uJlR%KK~$PR21~g@%Jc{+&vHR*=zCQMvQ!izbn(} zbfqtQ4lQEI;XmYIzSnV%oFk1WG#8L@Vn7wyDjGv5{OW?Namkn+)1uChI@r)SSeKq5 zVSo@w?Y=_ZRVANBQwOd@Y5|V-e**yw_ zIzfY@;(4i%vxHz~@_9T(h?kKvsUZm68iRdEnUe8kPip_x!^F z|8zQC>6ZrlPkESso<$`#65`XfESb}Lt-gS*_0BtkPob_`=y4)5jP z^KbbY{wCkazr*2sLZPyrD`WB|4vr*Z!SbL~hLjCT%?70=<=jlM`G%8S4>fYK8~OKq zKlkFOf^ewItfxZAH<3m5zrkutoWZu2eo&J_%T@ z>#|EQ_s}j&^bdz-MbN_`6}tYhSakmAXgq{@Tk^{2m_5^u#q9FI<;ncL@o_tjD$9^q zv;s3(Fku$c{^By5#qqH8KhV#^TU)~gvG@W0JGTS@{;S91!*orO={mdL@2EJZWy+yr znfsEIk6xB{lrNKE@mfEF@|E(n@{RHw$ydIwi`Oe3D?gFn$uE=eh{k5wiAkx%v+;Ok z)6=k~YNoSP zEp4f8%RM>2M^Aql#<34K)=~AwYNNJw#>z+=OShU#8W{@D4*tPV9qJ8ryqe_UffmFirGb*)bq$vc*JyTqI zX7WiJ7RdMjDv-#JqmA%4*r-lYr9$pFHw8IbkTxm!7Zm3Bdr4!idm)OQzc)chErVUk zJq?WtLE0i_T1Tz^GCvp9bkwy_XA8>JVty`~7mjM|C^V>a;P=R*D*<)0KPEN#YnJiFOW2ET|XeaJDu_Dz)1cTH2WyF!0SYzSZkbvk+C zCsYt{O^7N-ARjTHp_>iG5QHyL4Q-%Qsf&n;N|m~Ve=o?fyrZL4ot)&`s8ywy^-{ia z3nA(``^Kx&{#|eX&mpk|juX z%DL#AbxG?zx+l%gLpT@JwRF0=EahAjq%$J*c=Rla1}H@YpqAp$q(g~y>Ujr=vPzi+ z7=sQ;06X46C)ATdt)ru1{(6I4;4~Da?)@X*u7kEwP%JrygH%V0ngLZXGpQ?~?$?;l z7iSp_V__JKlz!mJwSuSN?Mvxpqx=OG&UnHI2y_50OKU3PE-UPeU z`Em6KZ0eN2fVR;->Gg*-*>JcdFlHubWFq^NNs;_ zNr$=}cBuzNGz7`VeV-7u&`Xc5j)va*|mGnet6-2F~LqO|Dc7<*+46R}= zFUr|;X;q)1QgRs$aI}`npbSFtL_5+sErUl|Fj1J-h|HFZ>^1fET39_PNH0Npr(h+c zB;BPO4I@m436iLL=yY{e9UnUp`B)+Hu~Hc!K`q4L76=E7IXGPDV3z}GC+PHxO8N<> zX(MQhIaVExkseuzB)K9&1FLb+Mdyc^P?gM#Mox!fs7@KqUUoIJ*V((j_4WFi0Jv6ue_eEP`_n+)bG`O>VAHgApQ7m zK?VsjRFDx3SO8na9#wxJ7hS^Md)<(+d51Q zL`?NVOr4!{b|OSlmVC-Z+ZfytA3=$qbPpZc%MM)q4O9@cz0>___&idl^K^=9M3P)0 z4&Nsg8Aqc-)g|3OhxkQ2J5JGb%RhaN##AAPFQsa>(ob18@HYZ@m&cWXCnN>=v2Olh z@kG?0uq*t*@T{sxJQ>K3`-A1!3?v$FC^;~S=4$0?UAy`=f(#SnwAAV`7@n6a{p8*M zR50At33jOmr63719GT(JfYn?^((H=bD0n0~FWAtPkHqcj;>xLA<&%Pp6r@P5viTxO z+=bF|`lC>-tAI{d_t$}V6oPmJ()Jlr8AYuJd21>n>m2D6wW6;I^MM-DZJjL?lvJ3K zYblCNsnWS4Tg+M65P4?seGIxK$H!AM zPF_I{iYF>u?>nqREQ4;44c#W5=Hwo{3TB;$lSr4N>lFSyALa0;U{W7;_2(-$k@c*z zYmjTOYX~pm>jW7m$Rt6gHaHffhCS*!%{5#K4oqQsQjqb2Oh_d$Ne$SE0d()(^A9|W zuCa8wYf!prGZFDN&M|EsgAo!+pC+w3gjNb8DSYDT$4CG|54riIr0q9bTCb=zFRaJF zk!K(d9O>e~8o35Ojs8D0i!gi6;ZMk8930s2shl6P7g9z`eXk#KCCAoIcdMi1OP5}_ z#`-IEGi5LDQ|jy2u#PLt4pHQbIbC6=8uh zq@aTws$odc34fx7hE&riU4&f~>2y&l$g~t=!039{yrhwaNlS-wgSirPx@$-}VFZvc zraFW%q}C0Fn{d>@RP-v{*Wef(&cXU0bB2W^mDa_NcAc}qbxyL7+ex$-XIE5)g9$rX?pKNIzBVHT z)oyt59kg5iv0<%9|>s;5=Wq%5Cx*#zRuc^!KOy;f~ zNp@$lA%V>9bY1V-47*%wo$O9o32h0I5G0O&D<_V%E28skSwmi%yqTGnyoq(0iH4iG z!*!>#nfZd8(MYkNYa8kAx;s^qhu~Tu$U>*^Zt}=bBvgSVqGKuomQ~?=vI9;vUIVB- z;@aU%bfzFn8k^{G(%rQ)eWJyJoaIb3VTfHeI~W@?zqBkIjW<4lvNf5f^lMt465>l; z?tCFgm$YvPC|jZ0^%l?KzalQr8DDN!rqxjraP5I=*Iu3_$hmmKvLh{A!~)y8>coN5 zBnBF*Ok|6o+VwTh;QiA-*rk%az@ zX)wkw$ok|LMGd}CSEkTX(BK=bjn>v7l}iMEhjdc8G!rsOh9H-vDndJr zwqs?{Sj>*4DdYY)M!3tP{!m0(5M#~?SXO1so)?N%#Sfxd0?Iv5t#w7{wnpf#4OlG> zs`i%^*|l7V0NVrAS^>}EyYZ1L16I?S(Xy&|U}jVnb_Ob;Fg}N`yf$Dp31C~I*t}4g z9Y+lO`Q=ND{85cGrk|(ny0N2DO(xXIJKXJUwbCwXwSrMlCTrnRI&&(6_K-Sqqf%A7 zE*+|lRIN>mpE@!cPsEaC<9`w$jqU7C(p}q{lH|Cvy9C+h$nhz~!B8yeRv2^o)PU3F z%1&aWQF0e#Y26;QKH8(afDaVp-ZUb=Zw~Z7SV>F~z!QAs2G<_45XHrSL(m_IkkjkU z@**$beFS+hZI*f*_Bi4ZLH5V<4x7 z{E)A_!S#si4($`|Q|&XYjrKX&j{M_Hfx5tBg6tIJ34uKLDL$T;G=_q&>*mBp0)jlA zJVz78l|-WzM~ZChK~P7=6B?Px4Q}G5=^X#bOt6SskXmU&kD2}_7cec5%I!@Z z;zmiPH|bNif31(ZH80>@1$ib7=Fg6oeN>Vlceg_w_icFFe znH|yuBLU?UsCIYZS^OQ86faMm8JueeX2@nzb;Vc&SZAnq=kYAQ4sUz4Bq^~HW$E%n zT?y6hLX;;3c-QLztEJN!Cl;y*#uf%b6%}@QD44Lr3+pXSIVHKYcj_%oW6<6`0EfE( z#nXr5(xi`j2p)`|+(QLfCCEF6AYk|KdgqV1#~?ZFNjrcS2=Z=i3JY249xu7@y@I@# zg6<@~a)W!ayF`$^g1mo(xOWdvCq6;;G)8?h>+p>C3-Un<$9pQ0nTAdxmE**aWexu0 zCZXDdkf;SA0rzmIcAt)r+Jk`qc$!qLq>9*(4%%xo-SZuD=5|3o4OlIzB4~~D4~Nrw z_QmVeL8Kk+6Zc|AcX~{azf3(N8m%};vBCS)WT~ehL(?#c-?*2%S2!d5RgiBRF>lZ( zJ|A5B4FPo(RJ&in5es=+L1|qPOn%y38iQ*0TX@$6c$YF+Qh!6juV%?*^SkP=dO1|P zKgOrK;L}>FbgKTUYYVAr=S8?G_oN`vnqMXvhWktRSArgQn{}zW&pp|-f*w#VQD0Xz zQ;6t>+gC*8{rzxRLSmplU*6gYS$f5&3xMD>bJ@^E#PYHx`u^lo))Cn zx^lExs#}?(Y;GpYv6j=~s71h)g>~YsxvQs%lEhG`BQRgZ{wa@52vfWjoUZ>3_LS3ou zRCMKI^%wdhxn7w}Y;~yeoU(|mASLSeG*>&#J)HE`Y-Ov`*RxprL>sO#Iu3>HP{~^7 z@;3z;D@bpd?AMzA$QMbQVigbZ8_|p2j=#X~;T?DmdasrUnjz3exP`Ch+XczvoA?H) zWjrj%1ip2k?+2__0W=`B30Fm#c#6Z^Amvt;9|+aINwcZ160n8r3}KdCn)lz-G@X zs(CJ)Ec;HD*^vadu`x{(K@CAoZg=eaiMt$|mN+H2SQ{#%s7`B~9*Y-G4U|Vy?O&Xx zf}V>#mu&J}k}7n=R-4J5GH;}o(qJKLlgqfOc5+{G@~>Z;gH2Lorn_tmlP805GA`G< zS8W2jXFWz{zN076Jld4}#HS&`sFw$Mc~aDSHlrf7mzSpY;S5yU;m2t*!!*v?oqz1VS2iec32dt)x7Ud<|)Hq`lE?(@c(g||r_!s44U?(3V&C);Vxy!R{ zqi35lc5Me8%zRIcelK6S(Y@TYmTIiOB)3X#^9?17x))+zGUs{1^Q31NJnnhQv)l7D63%Qv{epH7^jJaL@s|ZXM$oo`cCvIqI||y~sVwW6 zo8#}E>vStiO}-c#Ct}45hOhk%>>9_1>?APA;1li%Q~%p?Ws>w#RaQD~TF*=LqYc=& zLhjoArRP-=>c_>@-fsv4cV*p(HPkaHKYb=pgmhbRMMN&kiF0z+LIF2 znQc;6u>Lfc?9}?W1}PU4mF{y7S3af($WBs1O6U;RU{V4#%Ex4)`#pQ!o8f-P))f+ zn@%;25taFHWo#AOgHI@Hh)PsaLR6YdRJNVwY9r{6%3a!UWwmmzathgrGrNYU%SnlL z8d24i>}TaU^;@MUS+DdZ5oMdQRT;omX~Wnm&tk2Qd#E-NS5JS0_P9f6PX`ggx1l0f z$X`d6S||wNUhd_kl3!lHOSzYi;$BYqUA!aj%17~1PC4a;d>wxP+0X`FgI3-(lC$;U z9rU$!5dp6!@=(;U&E32dXWbWMP_y*w|OBl@)3B6@Q?V9 zd?0_5ufYU8osZ(%cpuQ?*+Ugze28d8{h3b*NJ!J9eE+| z$ZL2_OP^nh!{;bc1^+ohhicayX|nwqS8JNbLXFFI*C2Wl%67Q^P_mt@XM5mE z){=chHKk{rY*+dnxon5_Y0~|Bn#)$GLrDor`Gcf8(}p|JeJ|>%Z%PN;A4~Toj&$!( zC*3!tm&Fu6!eFe z?nQhz*LgL6hTHs``qKTQKPBB!4^NZtgLn;QIJM-3DCiF%-!H&Zkd*I(-Cyd8L$JE4 zyL3%=>mEHr*LAOM=%(I8w{)MLsW;V|>CN>P`cZmIy_MctKUy20x7FL}?RCF?jNU=- zsCUwj)sNGU*R%9&y|dm$&(XW;-SiXmTs=?E*9-LSdJny)UI;(wz4a6Ilk}7IKKdzo zU%j8+Umu_k)CcK<^&$GH`cQqCewsd9AEA%bi}X?YXnl-6Rxj4a>ErbY`b2$_K3Ol( zr|47lQhk~p(5LG`eTH79m+Q7ZQ=g^J)nrq?`g!{K`YQbb{X+dBeYL(uzgWLS zzf`|Wzg)jUU#nLO+F8&pg60U?RnTsNo*-zhpm~Dk3tAv(cR_my+EdU%L3;_>ThJ2) zJxS1$1??l~DT4MDw4WgB1??~B06_-|I!MsLf({Y%R6&OdI!w^h1RXBu2th{*S|sQw zK}QQZM$oZ>77IE~(D8y!5OkuTlLVbCXo;XxcsoI-3R)`YG(iJ`P8T#N=nO&21T7cT z7Idbdvjm+jXh_gGg3c8*ENF$G5kaGZRtkE$pfN$?f+hs55_F!R^95ZX=t4oy5Ok5C zX9~Jl(6a3+gf?hA^ zW$Nk10UoC8b?5MRCie*g1sibjo&>R$H{kQrv*<&4%go!3W%)bj*Eo4Vizta=e zpOx%3m>sa1q~U*3US9U(+M^$^n$~{^TVG}eto$@~aAcjFvZGesA?WF!)&UIZV%cHn zBE1iNW0|t*Az??}MPb;=w4SkUOt`s2n>*#WD0edIfhAF~5i%QS*X z??ay*wZp}bA4sO{| zs{jVbl0Ymjh%}HV|I{-v=r9vCUQ2`7fPYjWRKEfQc}`=MM`?9L2=mgvdnx}SWj)A1 z{iCbmvr~v|45tArGwozJIZ+KRIw9Wd3FwLHS`f8fJp$$8zZu8>0vX3hy#o%*F&Y-6 z{f`}@R%wpGbnVq)8jS=xaqWeNIe95P+DW%{Qi1=W)~q;T`#;dN53lf}zLIv9>Y5;A z2dvz*FAhp7@J9|xBWobB($ifU*bDUdWX2$lJlOVOVFn;{eZQswz0W{_|g| zts+v)B}YIp>0TM95cWT;{R{%?#lv9!zg~iW2`@pw@=dT~iBMUZppRNB4uiP=NWqGY zmm3$Rhia!Se@hY%0mh=R@mphl(dBEY@~`wI+F6D)}q5u(!cF*Kj5ive@KfSd4W@5 z?=%O%m`%gB0@(qpZCcDyT50LOsE{4C+8ttoBVs90>%_xwrF7i|SNBizIs~lt^;piq z`wCdc43Ix_W0xoG&Lkn%5j93OQZ4=c4V2Dg7wKfYA}?xPbQt`6LpPROOC)e{5O_-0jqgEWi{n^ER~vQDxMs*jz0u`|J1LW zpuB8#ke5Fd#;8c+FInlu(2$f9`BCeeRkBEbOZ#FiUa(MBn%BW4D$ZJiT8kYR2qcS`Y2>a zEnmHZ*{Br}wMq^_4UO;MNYs!2@jkJ5a;E;>!2cIn`qboaq)ELylrTsY60x z`}nwj)clAYi&~c+!NExR4F02Ih)xbwcMO3Y+9A~c$jrm2b=eVv-EmO-$Nu^jGWqm0 zw}H{hP!N4*6YJ$X{PR)*rllVs%&qK}X2~Bx9&6MZe+0Nq$(sM=m~)Av)?pfUz-m7_ zTInBOnMyfyGI!Hbp`zB@BiPyh$&gTsG*R}4uCe-&*{sGTA9RJhsSb1<&o2J@be+>K zeUiVs>5|l!M@K8GYH?K`O=}KgaXP&GKc1;f9b6ttjE+TT#ex;_fMumAIoPTwd(xm} zvzDlpc?h(nwPiw$;h&Sdmxlu#PQKLl+aD%bJX!hb?I!4P*QP$?rGMxyOAOz_ZWrq7 zFdq9{z}L?z-vYZ^u$x&fcD8_Wm;x7L4Xo4M0#>j^Foxa>6I@f_0++fpwXQI= zejf{}L6|)b%Ux^LLUk_Gz%n=!&euM}9u_bQdsx84x-J&vdN_mFkf`foL35!Ls<49v z_OF1kbR3L>MOX<870M;p;{zsZ!<_yeFkQJ9&S4k9JeUR-!Cco6D8n8f+6XAYAIwSb z>j5iaW~!?PRKr>7w^{%ex>{o=4|=UO3ocX!VCN3^a)`hJ?NjX90defw;T{U3WX}$+ zu2NTkjr}=DL>Wr=sn@}|&>lkcN0_5bhE?kK5Or#FmA7X+Ej9$%&u{11d?_Cy8*3a8WR4)q)7xsu zrW%yVrW!FpZkByC(wb-pa=swhg1o{_K`lOv_mCYl-VkJ^pl9vWCI&ar{UKG{IE8TQWb3i6#GFA4H1HqpQq8vJ?LL4yx%&_iR4AnUM& z#_F^#8oY*IF31|$Kf~#s!MpGTKS_`mlNHTE)~S22kK;HjBA0zi_zi-z6XY{~k02NG zs|6*3EW(Z@_dD%Muv&dG-^y=0s6UAyKl10&x|3kt@@ujo$tFRr667@5jRaef+$ktv z_mOdejF45yXA4p-JF8*S5kW4JT}QCzNCx&C5yWW&Z~}h{yNmEXd=HlNcNOFdEHRE^ z_53{kfgr!hpH5hsDlNvYA*zri#e#g|^b8s7{?hO{2j0juni|cF=0*$SD5Is(%4lsI zZL~4k8tshshTk~G=wNg-IvK|r#~H^PSw^JnlaoMVT?42j8VpDV~jD@ zC^p6!W10~#rW-+HhEZme8@4gim}Sg1LdG0pt`RmWjEE66 zDvi^Pm=QM;MwKzom~SjF78++5i;Odk#l~625`!DUINLbKSZbVWEHjoHD~y%KdB*w1 zD&qpF)VR#J+_=J6Yg8Lo8dn)t8|#c~jP=H~#&yO9qsG{1Y%;Dl zHXB=v8;l!`n~a-{TZ~(c+lYL zpic?9ThONkeMZn{1$|D?=LLO1&=&=LNzj)CeMQh$1$|A>*9Cn;&^HBrOVGCkeMiuD z1>Ga)dxGv2^nF1;5cESqKN9p~K|c}nQ$ary^e=*bF6bA6{#DQ~1^r6UuLb=^&~F9( zPSEcK-6!aNL4OeRM?rrQ^k+eT5%gC<|0d{ff*ug`cfmj~A{Z5n38o093g!|_6U;4` zN3aaRbiurW8G@ODH4)4b%qLi;U`+*UCRlU9S_pQOU@Zk}C0J|0juxzqU~L6!Cs=#I z{DK`LSO>v63f4)mV+A`-u;T^G5-eM=&VqFjEJv`ef^`$@1i^9z%M&bLumZul3)Vxh zo`Mw$)=RM7f}JSXNrIg$SRcVo5v;FZ{RHbT*Z{!>3N}cv!GaAD>{P*q3N}oz(*zqX z*a*Q!3RWc8D8WVxHb$_qf)xukPO$NUO%QCNV3P!!ELe$PQv{nTSgBys1Pcf@U9g~F zGXyIWtXwc#u$h9*5^T0$A;IPdHdnB)U=@Nz1d9q*DcI?P#RQ8BmJqB;uz7;b7i@uG z3k5qvutkEMDcEAc&Jt{iU|cXE*x7=eBiK^G&J}E#V9NztA=pa6&J*l>!Bz=&fnXO3 zc9CGK1zRK7#e!WT*rkG9CfMbIT_M<7!Kwwj(np(H%Q8W^>}DV7?js2w$;MCj`>5C2 z=cAeUVTF%u^3kK@Z({!b`|rQuwd*s1tT+naZOjC+{55=cw~utizqk5GPwQ#Cp(TFI z$Cph$+Q~Z6M?3gvUmv*zzifrqZ}X8`eWX9Wy$@eT`p9(aC?Bcx(Uv}PvyYsO!|$|K zndN1Ni`Y9CpO*SF&XPg=r9kM)rnA34w3hF?G6BY8f0w2z$Q zBUwIDh}SfHxf)+K?3g>neQXZe6+pw9DXy@N89+w8hm??^{kI9!gse=ZGH3@ zO9HkFUYPA8ci>tweYBa6aJ+P`kG8fh$9Hq^+hooOm0;UlN}$O8OwtdDf^k#q5F$eM~seB4JC`p5-7GQ&FCM@=8? zh|gO-GS5eD#QSc-ml}MT=_7Nk8}Mu0M`CzogOB9m-v@o<1Rn`lyYWjeUbzcjM)-)& zM+_fr;v*YEh|;$@3I=dU$$y zPV)5g4D^ifO!Aa?rh05o)N{ILiD!jpjpu4ljc1$ZAlC}uV=iO@pi_$8SiDhpYdVF#~Ghy{3YXy zj4w03&iFRt`;7e=KW6-#@oUBbo#=|L=^47ATY6Kyh2BbUqqo;P=*Q|=dKbN$o~L)$ z3-uHAK6*cWpgu$&rjO7^>0|Zr`XqgdK1~nm<@zjrj$WZx>T!LZzED3?U!t$puhBQ_ zx9NB2TlH=FJ^Cy9C;C_Ve*J*g?QQ05;ce+{?QP?2@AZ2-cniG)yo0<$yu-Z1z2)9@ z-W$9Rd!O}w;QiK6j26Z*Mi-;EG2EDB%rxd26-LxJ-H01i#(ZO;vB+3#EHQ*}jPD@KtL|AxUA6A5=y!eZd%e#u_n+~c3A++@E$m*{gRn9jBe6-Jm_7J*T}3 z?;PGeyk|HqTo9feUKHLpye52T_@wYD;nTurgwG1c!^!Ya_=fO};hVy@gdYn(5q>hf zJ^Wnw6S{;RM~|l`(q(ixJ(ZqL&!AV+Yw2U?ljzIo6n#CtmA;9-h2BQLOutIMPQOXN zP5;jLiNR;YGn9-xMg_ydurlln55vpo$M7>CMvyU*F^MsiF@rIiv5c{ffip-(h_R3H zC*u^OopF|NkMS?#CF2Y8M`k3G!{jjqOc67mS;#DAmNCnjI;MeXV%9MI%>K*)%t6d1 zW;1gq^91uG^EC4e^BnUP^9}PI^8@n}^9!?s)twc_qO({m9!tPVX7y&}u?kp4tP)m$ z)t?2keq{|}4Pn)?#L`6>&4-cEsNi_aYudhDGut6C-7j^2n6Pw8-?xj7VjqIHSW(eYIZ^hg+Ng0+v!ckTol!@k+M zoPC@FoWq8S6&z|oEORC@OV4{uasxy)$m~62;LOleBKHk z&LemfZ#{1tZwGG|?-1`K?-Z|{_muaZ_l4KN`_Avo|AGG_zdN7L7xLrziTq@K7Qd9Q z=NtJRzMl{CYx&dp4g9ryl)sLT^GSY)zlDE?MvKOZ>P6#46Ge+ei$zVMX3<*F zcF|7JZqZ)RAEL{m`=WnDuSB24oyBx9N1P%~6D!2M#42&VSSL1!E5%jf{^DWcDdK73 z8RA*uIbu>A5^oT16mJ%95pNZr7M~HH6JHQt6kisTL~o7W9(^JDV)W(ctI^k^Z$#gUeixG(lOB^1ql{6IF^6J~#I(iSi+K?9Fy?X0)0lr_{*!c*y53Bt%(I=1F-{Q zhsVy0T@<@G7K_~xyDN52?7rCju{UCG#omd%8+$+YLF~iWZ*iG%*>Re<+_?O>!noqN z(zrfxL*we>=EW_DTNJlAt}*WSxNUJe;&#RDiQ5;qKkjtgv$&49@6yiFAEZA@CDJ%) zyfjfNlO{`3q(#yasaD!os*?t!&C<0}RJu-zOG#-+x^mBYv zJU5;nFN_z*N5@OzHSr_j>*9Zl9}{06KR$k9{N(tl@oy5C39$*%goK2ogye*>gz^Mk zf+4|_U{0t^7??0GVL`&8gvAMs3Cj|i5}FgoCN4~DNL-S*G;w(%mbfu-cVb)Oxx~AP z_Y?m~e3bYksaw*|N!^orCef0@lNd>|BrqwE)ISMM`ZZ}#(vYOuq~S?3l9nf}OlnGM zPFkC^C24EY_N1Ljdy+oMy2->cxvWTLlDTC;*(BL~*>YJ(wqJHac2Ra&c1?Cec3XB= zc3<{b_Eh#v_FVQ#_Ez>jnUS26T$EgqtWUNi4@n-AydZf|^5W#iefsl1QeD!0p>a<{xn4#<7-aqt?kNc=Nh!%GDJf|w=_wg0Nx-s>5>a*16sV`Gsr@l>npZYQNbJ|~NFVkM9 zy-j%u}HC4(WqFaSfN;@SgpVnq#~sFU9nejP;o}_NbyARui`(&3&ktNTSbTBdq(Gs z?ioEZgc;(Dn2gwr_>82Cu#@my&m-HQ0kPha;$Qm5>;+i?pE$m?o;kp9#S4rwkeM*PbyC< z+m&aO=am%VAC#X|GF2~CZ&i`1T%}VPRAyDB%BFIt+$yhXfNGFxsA{-s zysAO9O0`-=szR3}vLR3B8IR9{u!)Sc8_)IX|!R(Dsk)rIO}b*Z{c zU9Q%t4QjL6sJ{oH^%^yz-mKoO-mgBczNmhz{*c)zGc1#z znU$H7**h~ovnaDTvozD2IXQD`=Jd>2nR7DdXD-Za$XuDZGjn(5-pu`(hcXXm9?iU! z)g`NIR=2EQvU+6EvgldNtW{aNvi4-{%Q}#CIO|AOTh^`Y$ZSqFFI$i;%8t&C&6Z{- zX18Xa%s!ocCi{H$#q3MjSF&H`MC3%}aB~DXqMVqV*c_>bqlwk@*5qjlHN~1zO&?9U zrcz_m02-gBRx?~vrx~rO*G$k%(oE4z*R*Ib4WS8XS~VLrn>BxGo@$d-;MY%D#ak*`I`%j1p^BP7Yr>JUQkyss$g`%qJrNGwiWCs*j=!0OqN-9h2 zC5{qT$*_|3C9Nf!O16}2E!keOt7K2fA0?McUYEQrd0+CW)(%z-{ zrG=#>rCM#Swp8oZR%rpPPuou$&<@rP)sEGU(@xM%)=tyT)M8pfOKCS~H)%I(f7hPU zzSO?fzSVxve$sx`e(TezY*rawMwW%jTFW+zBBCOyf?GjW?5#Lj(Oz-2;$_7b-H$q& zj-`v&W$21^rMf=4a-Ci`OgBO|N;gJVuN$wMsGF=?sB6$I*HOClx>nt0-B#T>-38r6 z-4)$+-3{F>-3Pr~pQ=ySXXsV>EPakXS6`|(=uP^7zE1y}evE#cexe@Hx9D*_rC+aa z)o;@8*6-Dy(cjVE)!)}Y)ITwFH}o`w8<+;RA=1Dxhz&7@G(&-*$WUU?8p;eVgU8@C z_ze9F!wn-1qYR@B^@hoY#fC=1a>Gi)YQr(Z3ByUlDMP#AjNzQ&g5jd!zTvImz2T$b zv!TP-)5taQjY4CzG2WPI%r^Em<{1l(1B?TWgN;LswZ>t_5ym>>Xya_-JmW%RgR#-r zYTR!;Xgq8@YCLAVV!UR&VZ3F$V|;0RZG3C|VEkn2Zt7{GnHVOvNoC43<(TqKMWzyy z)>LL1VyZPwH8q-+nO2&bOlwTLOn;hAnc7WfO&3g$O`l9(OdY20<}PNMS!|9m$C=~J zN#-1LuDQTmY}T5MW~bS04w!@HU(JKfwdN7#)n>v>nb(^)nm3z&H*YiVH19F*H@BNF zo3EN*nctY-nLnDpn7>&%S$?o|v;1P|X$iM5EgDO%CErqDDY6t>N-cdXeJ#T*BP^pV zV=VQS@s^2}$(CuBr53^xvb0(@Tee#ES@v5FSk7BMTfSPpS-w|xuIy6TwX$2~&y|YG zUX`j!b!Ap%cBQ5=w=%!dSJ|&JP#LToP&u%2aAiy7iOQ3e?UiRM&sY9cd8zWAwTCs# z8g8XqnO2rH!Ww1eT63(ut@+j>Yl&5BEwfs!b}ML|Yn^XhXkBb=v@Wx*ur^uOShrdK zupY1;wH~+rX?<;dYkhD1Wc_08uzt67vHfUc+W0o1E!rlrRoL`4qs?No+Uz!`&0_;> z0o!2PP}>ySblWW3T-yR$gRRlF+_uuzWc$N*z;@Vn)OO5v!gkVj*7ni%+4j}eVf$|H zWbb0{YVT%GuqWB&c7YQJm0Z+~ciY=3M27Y624yGg4A$24;k{ohJwxiska~K>Z zN2LRB3~|&tMmXvmqa8~en1gUoj`faK$9~5_#}P-H&Wpa64gIz;i!(1a> zqg*pxvt4st3tSDZO|C7jt*#xe-L5^ZeXh&y9_}!AxSQc-yQAD(x4+31k8}KyM%)C<01=K0rC32aJFjumTRi1ylh5Py_e@2!Mfszz|>3%CQ^1?~g?0FQyEz%$@E@Dg|fyaPT0Ux1G4PSsti zyH@{H-Mu=jnqJMUW>*WV#nqDPKGo*x%4%D+v)WS)RQsyo>Pgk}tCv-y)veWMs?Swl zsJ>KvwfaW&t?Gx>-+e#(y89x0Q9hne=o9;5d@`Thm*!LW`uZ$Bj}P(<@zwf9`09Lf zeVA{fZ>R65uibanchz^pciZ>3@1F0!8hK4>jiN?blUb8flUtKtQ&dx0Q&v-6qpva5 z{93cT2B~SO*-*2+W>3wLnq&Q5^?TFreZPpE9>{H5K{gl( zazGv^07YOlC;{WZcrX!^fpRbnRDiue6_^ETz&x-3ECNfxGO!%ffdXC~yo|4~_>Xf|J2%;0$m!I2W7`E(9CECEzk}1-J@a z4XyzZum!|H5)6T@;3jYjxDDJ1?gsaP`@w_YVelw;3_Jmz1W$u!!Smo>;3e=1cn!P( z-U9D{_rM3>Bk(Es4158;0^fk|zz^VOumk+=@8a+3|H=Q0zlWdZr~8?Hwm;I(_4EBg zzt}JF$N3ZdGJlFc-JjuC`qlm{e~v%bpYJd97yEU7W1v1TAuu^GH83MEJ1{S>Ft9k# z7+4lq8CV@y6F>qj0X#qkLV*o|je#wJt$`hZ-GP09{egpl!-2NI@xaMId*E!~Lf~TH zO5j@HX5dcXUf`d=qrj8Ev%rhM>%hCfhrs7RN8mfu8R`mkgMNW}Lg5e-ihwu}9}+^* zkOY!KiBK|>0;NG2kP6C#a-dwO04jz`p*~PKq=!t91+qa-$PHCN)ld!Ohae~j4S)th zgQ20&FlYo+2aSg6q4CfpXbLnPnhDK;=0OXf251Si6j}kTf|{YV5DH-s39W}(q0P`% zXgjnE+5`Oo9e@r&N1!(71auNQ4V{I~Lw`Y+psUag=oa)hbPsv}J%XM>|3NRI*U($2 zqkpGhN-#axE2s`;2YUzegGIs8U|FytXb75v)}SNk4tj&WAQ*&#aByI7NN`wiWbn7( z*x>l!q~O%xjNt6xyx_v%;^5NYieOW4O%M%YK{B{LxG}gTxGlIdxF`5W@L=#r@L2Ff z@Ko?j@O{|;}5cfot%{qQ09D100~ z3Ae-N;J@I@@HO}*d>u#v*NeaYJ8>n2-F33MU+bpU z?X0^{_k2|5Z(m0zjLskJ7!8i;I;P*41!IV@ys`21ee0jse;&simo?5XZrZp-<1UYX zHNIm){KVKvz@!0_rcSm^89yy{TITff=~Jd3n|^2do9W+Y2xq8gzL~|Dl|4&8YvSzD zv-ixtK8HJJ;hf*+T%Pl3Zl`%M^VZG#cmB}@yB7{yGAU1>N~Y7BmH$ zmNgx0YG2J;t#0--2b;$>PiX6@%vB)@NA~FS;j?6;lA`6fPWC^kqS%EYmYY-H{5CRDy8<3627GxW;6WN38Lk=K^ zkRwPNavb>+Ifa}-&LJ0&i^yf&Rd5e5NJ|SO`?`RkF zNAxGOJK7TsM;Ry!jYPR99~Gf7Xe=6!CZfq`Dw>XFph{GYW}!J~E?R&Vp`~aUT8`>a z18PRCs2z2oRcJNZ5A~z{Q5gLd9fS@+hoK|UQRo=79-V+rMyH`O(AnrbbRpV+E`#+LF*B zYe{KIZ|T*dZpmuNX~}IVXen;dwv@G)TdY_QjD|5VHWr2PFd-I=#bWVT5+=veunbIv zWnmgD4=cnth%LufVa*tVt-}Z`gtcOuv8~t+Y&W(KJAfU=+OQMYDeMe(9=nKL!LDPsu)neU z*hB0I_6&Q0y~f^QAF(gkH@q|675@qEj)&oNoP|f?TwH*QaS1NP6Y*p`6<6R&JQL5s zbMXSa7}w%`aUE{NEw~ML;vO8pYj8i_A0L1Z!iVC+@j84oUXM?}C*#xbnfM%hKE4QF zf-l2Y;;Zqscngl>6utr9g#V6j$9Lg-@%{KA{3w1LKZ&>F=kUMq%lI|?CVmIMhyQ~= z#{b2i>>jz}P6L<*5k^di(mHqo2N zCyIztqKv2@41}4m5)Q&mcnKc?5)c6s1BoHTFk&R}8!?s`PfQ}F5;KU|#5`glv6xs& ztRR|*W}=0_35wW2Y$3K0JBZ!He&P^ulxQa|5Lbws#9iVc@q~CzydvHZABhgK3;84Y z6WN^%Bk5!W$s>hiG$|!zWD1!^W{@f}i`0+>WD(hiEGLbmm2{9*WHsq0`;!C7T5>p9 zM~)`z$?@bAaymJSoJ%es8^~p36N!*Gxt`oeZXtJ&yUBgzA@Ue`iabM}CohuM$eZLH z@&WmTd`7+?Uy~om&*WFCGu4&qM*Twdq!?5r#i96AG$o~El$=VVlvFmAM-@}0R2fx4 znJ5coqnwnR@=`u3KnM+$tout~SbJQj3Ds`Q@Lp`7#QctL7)GO)@^^xkJzK6PmehT#rF+%K6 zWQZFQgv6n^P(nx+N((7M>QHv5cPKwp7%B<%3F$({kR{{@RfTFo{ty)UH8eOhJX9AN z8yX*)6q*v68JZVr2sMV5hgOA}Lr4e@QK9vrjiIffeWCrK1ECY4Q=!wLOQEZwYoU9g UN1gtsE?xdt+WG(W{|deTe-_vE_W%F@ literal 51308 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 diff --git a/hw/xquartz/bundle/Resources/ru.lproj/locversion.plist b/hw/xquartz/bundle/Resources/ru.lproj/locversion.plist index e086cf7a0..2c58741c7 100644 --- a/hw/xquartz/bundle/Resources/ru.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/ru.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/sv.lproj/locversion.plist b/hw/xquartz/bundle/Resources/sv.lproj/locversion.plist index 5c8d62349..0fbea3558 100644 --- a/hw/xquartz/bundle/Resources/sv.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/sv.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib index 759ead2c9..808d57c7e 100644 --- a/hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib @@ -1,11 +1,15 @@ - + 1050 - 9C31 - 677 - 949.26 - 352.00 + 10A314 + 718 + 1013 + 415.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 718 + YES @@ -15,7 +19,7 @@

YES - + YES @@ -68,7 +72,7 @@ - SW5zdMOkbGxuaW5nYXIuLi4 + Inställningar... , 1048576 2147483647 @@ -88,7 +92,7 @@ - VGrDpG5zdGVyA + Tjänster 1048576 2147483647 @@ -96,7 +100,7 @@ submenuAction: - VGrDpG5zdGVyA + Tjänster YES @@ -116,7 +120,7 @@ - VsOkeGxhIGhlbHNrw6RybXNsw6RnZQ + Växla helskärmsläge a 1572864 2147483647 @@ -136,7 +140,7 @@ - R8O2bSBYMTE + Göm X11 h 1048576 2147483647 @@ -146,7 +150,7 @@ - R8O2bSDDtnZyaWdhA + Göm övriga h 1572864 2147483647 @@ -250,7 +254,7 @@ - RsO2bnN0ZXI + Fönster 1048576 2147483647 @@ -258,12 +262,12 @@ submenuAction: - RsO2bnN0ZXI + Fönster YES - U3TDpG5nA + Stäng w 1048576 2147483647 @@ -301,7 +305,7 @@ - QmzDpGRkcmEgZ2Vub20gZsO2bnN0ZXI + Bläddra genom fönster ` 1048840 2147483647 @@ -310,7 +314,7 @@ - QmzDpGRkcmEgZ2Vub20gZsO2bnN0ZXIgYmFrbMOkbmdlcw + Bläddra genom fönster baklänges ~ 1179914 2147483647 @@ -330,7 +334,7 @@ - TMOkZ2cgYWxsYSDDtnZlcnN0A + Lägg alla överst 1048576 2147483647 @@ -354,7 +358,7 @@ - SGrDpGxwA + Hjälp 1048576 2147483647 @@ -362,12 +366,12 @@ submenuAction: - SGrDpGxwA + Hjälp YES - WDExIEhqw6RscA + X11 Hjälp 1048576 2147483647 @@ -388,12 +392,12 @@ 2 {{288, 302}, {484, 308}} 1350041600 - WDExLWluc3TDpGxsbmluZ2FyA + X11-inställningar NSPanel View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -428,7 +432,7 @@ Emulera treknappsmus LucidaGrande - 1.300000e+01 + 13 1044 @@ -456,12 +460,10 @@ 67239424 4194304 - T20gZGUgw6RyIGFrdGl2ZXJhZGUga2FuIHRhbmdlbnRlciBzb20gbW90c3ZhcmFyIG1lbnlyYWRlbiBo -YW1uYSBpIGtvbmZsaWt0IG1lZCBYMTEtcHJvZ3JhbSBzb20gYW52w6RuZGVyIG1ldGFtb2RpZmllcmFy -ZW4uA + Om de är aktiverade kan tangenter som motsvarar menyraden hamna i konflikt med X11-program som använder metamodifieraren. LucidaGrande - 1.100000e+01 + 11 3100 @@ -470,9 +472,9 @@ ZW4uA 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NjY3AA @@ -535,8 +537,7 @@ ciBzw6UgYWt0aXZlcmFzIG11c2VucyBtaXR0LSByZXNwZWt0aXZlIGjDtmdlcmtuYXBwLgo 67239424 4194304 - VGlsbMOldGVyIGF0dCDDpG5kcmluZ2FyIGkgaW5kYXRhbWVueW4gc2tyaXZlciDDtnZlciBkZSBiZWZp -bnRsaWdhIFgxMS10YW5nZW50a29wcGxpbmdhcm5hLg + Tillåter att ändringar i indatamenyn skriver över de befintliga X11-tangentkopplingarna. @@ -553,7 +554,7 @@ bnRsaWdhIFgxMS10YW5nZW50a29wcGxpbmdhcm5hLg 67239424 0 - RsO2bGogZGF0b3JucyB0YW5nZW50Ym9yZHNsYXlvdXQ + Följ datorns tangentbordslayout 1211912703 @@ -592,7 +593,7 @@ bnRsaWdhIFgxMS10YW5nZW50a29wcGxpbmdhcm5hLg 67239424 0 - QW52w6RuZCBzeXN0ZW1ldHMgdmFybmluZ3NlZmZla3Q + Använd systemets varningseffekt 1211912703 @@ -614,9 +615,7 @@ bnRsaWdhIFgxMS10YW5nZW50a29wcGxpbmdhcm5hLg 67239424 4194304 - WDExLWxqdWRldCBibGlyIGRldCB2YW5saWdhIHN5c3RlbXZhcm5pbmdzbGp1ZGV0IHNvbSB2YWx0cyBw -w6UgaW5zdMOkbGxuaW5nc3BhbmVsZW4gTGp1ZGVmZmVrdGVyIGkgU3lzdGVtaW5zdMOkbGxuaW5nYXIu -A + X11-ljudet blir det vanliga systemvarningsljudet som valts på inställningspanelen Ljudeffekter i Systeminställningar. @@ -639,7 +638,7 @@ A 1 LucidaGrande - 1.300000e+01 + 13 16 @@ -650,7 +649,7 @@ A 75 - RnLDpW4gYmlsZHNrw6RybQ + Från bildskärm 1048576 2147483647 @@ -671,7 +670,7 @@ A - MjU2IGbDpHJnZXI + 256 färger 1048576 2147483647 @@ -706,6 +705,7 @@ A + 3 YES @@ -739,7 +739,7 @@ A 67239424 4194304 - QWx0ZXJuYXRpdmV0IGLDtnJqYXIgZ8OkbGxhIG7DpHN0YSBnw6VuZyBYMTEgw7ZwcG5hcy4 + Alternativet börjar gälla nästa gång X11 öppnas. @@ -756,7 +756,7 @@ A 67239424 0 - SGVsc2vDpHJtc2zDpGdlA + Helskärmsläge 1211912703 @@ -778,7 +778,7 @@ A 67239424 0 - VmlzYSBtZW55ZsOkbHRldCBhdXRvbWF0aXNrdCBpIGhlbHNrw6RybXNsw6RnZQ + Visa menyfältet automatiskt i helskärmsläge 1211912703 @@ -800,8 +800,7 @@ A 67239424 4194304 - QWt0aXZlcmFyIFgxMTpzIHJvdGbDtm5zdGVyLiBUcnljayBuZWQga29tbWFuZG8tYWx0LUEgZsO2ciBh -dHQgdsOkeGxhIHRpbGwgb2NoIGZyw6VuIGhlbHNrw6RybXNsw6RnZS4 + Aktiverar X11:s rotfönster. Tryck ned kommando-alt-A för att växla till och från helskärmsläge. @@ -856,9 +855,7 @@ dHQgdsOkeGxhIHRpbGwgb2NoIGZyw6VuIGhlbHNrw6RybXNsw6RnZS4 67239424 4194304 - QWt0aXZlcmFyIG1lbnlhbHRlcm5hdGl2ZXQg4oCdS29waWVyYeKAnSBvY2ggZ8O2ciBkZXQgbcO2amxp -Z3QgYXR0IHN5bmtyb25pc2VyYSBtZWxsYW4gdXJrbGlwcCBpIE9TWCBvY2ggQ0xJUEJPQVJELSBvY2gg -UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 + Aktiverar menyalternativet ”Kopiera” och gör det möjligt att synkronisera mellan urklipp i OSX och CLIPBOARD- och PRIMARY-buffertarna i X11. @@ -874,7 +871,7 @@ UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 67239424 0 - VXBwZGF0ZXJhIENMSVBCT0FSRCBuw6RyIHVya2xpcHAgw6RuZHJhcy4 + Uppdatera CLIPBOARD när urklipp ändras. 1211912703 @@ -896,7 +893,7 @@ UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 67239424 0 - VXBwZGF0ZXJhIFBSSU1BUlkgKG1lbGxhbmtsaWNrKSBuw6RyIHVya2xpcHAgw6RuZHJhcy4 + Uppdatera PRIMARY (mellanklick) när urklipp ändras. 1211912703 @@ -918,7 +915,7 @@ UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 67239424 0 - VXBwZGF0ZXJhIHVya2xpcHAgZGlyZWt0IG7DpHIgbnkgdGV4dCBtYXJrZXJhcy4 + Uppdatera urklipp direkt när ny text markeras. 1211912703 @@ -940,7 +937,7 @@ UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 67239424 0 - VXBwZGF0ZXJhIHVya2xpcHAgbsOkciBDTElQQk9BUkQgw6RuZHJhcy4 + Uppdatera urklipp när CLIPBOARD ändras. 1211912703 @@ -962,8 +959,7 @@ UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 67239424 4194304 - QXZha3RpdmVyYSBkZXQgaMOkciBhbHRlcm5hdGl2ZXQgb20gZHUgdmlsbCBhbnbDpG5kYSB4Y2xpcGJv -YXJkLCBrbGlwcGVyLCBlbGxlciBuw6Vnb24gYW5uYW4gdXJrbGlwcHNoYW50ZXJhcmUgaSBYMTEuA + Avaktivera det här alternativet om du vill använda xclipboard, klipper, eller någon annan urklippshanterare i X11. @@ -979,8 +975,7 @@ YXJkLCBrbGlwcGVyLCBlbGxlciBuw6Vnb24gYW5uYW4gdXJrbGlwcHNoYW50ZXJhcmUgaSBYMTEuA 67239424 4194304 - UMOlIGdydW5kIGF2IGJlZ3LDpG5zbmluZ2FyIGkgWDExLXByb3Rva29sbGV0IGthbnNrZSBkZXQgaMOk -ciBhbHRlcm5hdGl2ZXQgaW50ZSBmdW5nZXJhciBpIHZpc3NhIHByb2dyYW0uA + På grund av begränsningar i X11-protokollet kanske det här alternativet inte fungerar i vissa program. @@ -1012,7 +1007,7 @@ ciBhbHRlcm5hdGl2ZXQgaW50ZSBmdW5nZXJhciBpIHZpc3NhIHByb2dyYW0uA 67239424 0 - S2xpY2thIGlnZW5vbSBpbmFrdGl2YSBmw7Zuc3Rlcg + Klicka igenom inaktiva fönster 1211912703 @@ -1028,7 +1023,7 @@ ciBhbHRlcm5hdGl2ZXQgaW50ZSBmdW5nZXJhciBpIHZpc3NhIHByb2dyYW0uA 256 - {{23, 175}, {385, 31}} + {{32, 175}, {385, 31}} YES @@ -1053,7 +1048,7 @@ cmthIGlubmVow6VsbGV0Lgo 67239424 0 - Rm9rdXMgZsO2bGplciBtdXM + Fokus följer mus 1211912703 @@ -1069,14 +1064,13 @@ cmthIGlubmVow6VsbGV0Lgo 256 - {{23, 128}, {385, 17}} + {{32, 128}, {385, 17}} YES 67239424 4194304 - RsO2bnN0ZXJmb2t1cyBpIFgxMSBmw7ZsamVyIHBla2FyZW4uIERldCBow6RyIGhhciBuw6VncmEgYmll -ZmZla3Rlci4 + Fönsterfokus i X11 följer pekaren. Det här har några bieffekter. @@ -1093,7 +1087,7 @@ ZmZla3Rlci4 67239424 0 - Rm9rdXMgcMOlIG55YSBmw7Zuc3Rlcg + Fokus på nya fönster 1211912703 @@ -1109,15 +1103,13 @@ ZmZla3Rlci4 256 - {{23, 73}, {385, 28}} + {{32, 73}, {385, 28}} YES 67239424 4194304 - TWVkIGRldCBow6RyIGFsdGVybmF0aXZldCBrb21tZXIgc2thcGFuZGV0IGF2IGV0dCBueXR0IFgxMS1m -w7Zuc3RlciBhdHQgbMOkZ2dhIFgxMSDDtnZlcnN0IChpc3TDpGxsZXQgZsO2ciBGaW5kZXIsIFRlcm1p -bmFsLCBldGMuKQ + Med det här alternativet kommer skapandet av ett nytt X11-fönster att lägga X11 överst (istället för Finder, Terminal, etc.) @@ -1128,7 +1120,7 @@ bmFsLCBldGMuKQ {{10, 33}, {438, 246}} - RsO2bnN0ZXI + Fönster @@ -1169,7 +1161,7 @@ bmFsLCBldGMuKQ 67239424 0 - VGlsbMOldCBhbnNsdXRuaW5nYXIgZnLDpW4gbsOkdHZlcmtza2xpZW50ZXI + Tillåt anslutningar från nätverksklienter 1211912703 @@ -1191,9 +1183,7 @@ bmFsLCBldGMuKQ 67239424 4194304 - TsOkciBkdSDDtnBwbmFyIFgxMSBza2FwYXMgWGF1dGhvcml0eS1ueWNrbGFyIHNvbSBrb250cm9sbGVy -YXIgw6V0a29tc3QuIE9tIGRhdG9ybnMgSVAtYWRyZXNzIMOkbmRyYXMgYmxpciBueWNrbGFybmEgb2dp -bHRpZ2Egdmlsa2V0IGthbiBmw7ZyaGluZHJhIGF0dCBYMTEtcHJvZ3JhbSDDtnBwbmFzLg + När du öppnar X11 skapas Xauthority-nycklar som kontrollerar åtkomst. Om datorns IP-adress ändras blir nycklarna ogiltiga vilket kan förhindra att X11-program öppnas. @@ -1210,10 +1200,7 @@ bHRpZ2Egdmlsa2V0IGthbiBmw7ZyaGluZHJhIGF0dCBYMTEtcHJvZ3JhbSDDtnBwbmFzLg 67239424 4194304 - T20gZGV0IMOkciBha3RpdmVyYXQgbcOlc3RlIEF1dGVudGlzZXJhIGFuc2x1dG5pbmdhciBvY2tzw6Ug -dmFyYSBha3RpdmVyYXQgZsO2ciBhdHQgc8Oka2Vyc3TDpGxsYSBzw6RrZXJoZXRlbiBpIHN5c3RlbWV0 -LiBPbSBkZXQgw6RyIGF2YWt0aXZlcmF0IHRpbGzDpXRzIGludGUgYW5zbHV0bmluZ2FyIGZyw6VuIGZq -w6RycnByb2dyYW0uA + Om det är aktiverat måste Autentisera anslutningar också vara aktiverat för att säkerställa säkerheten i systemet. Om det är avaktiverat tillåts inte anslutningar från fjärrprogram. @@ -1230,7 +1217,7 @@ w6RycnByb2dyYW0uA 67239424 4194304 - QWx0ZXJuYXRpdmVuIGLDtnJqYXIgZ8OkbGxhIG7DpHN0YSBnw6VuZyBYMTEgw7ZwcG5hcy4 + Alternativen börjar gälla nästa gång X11 öppnas. @@ -1241,7 +1228,7 @@ w6RycnByb2dyYW0uA {{10, 33}, {438, 246}} - U8Oka2VyaGV0A + Säkerhet @@ -1261,7 +1248,7 @@ w6RycnByb2dyYW0uA {{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs @@ -1274,7 +1261,7 @@ w6RycnByb2dyYW0uA View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1359,12 +1346,12 @@ w6RycnByb2dyYW0uA YES - 1.227310e+02 - 6.273100e+01 - 1.000000e+03 + 122.73099999999999 + 62.731000000000002 + 1000 - 75628032 - 0 + 75628096 + 2048 Namn @@ -1398,12 +1385,12 @@ w6RycnByb2dyYW0uA - 1.000000e+02 - 4.000000e+01 - 1.000000e+03 + 100 + 40 + 1000 - 75628032 - 0 + 75628096 + 2048 Kommando @@ -1426,12 +1413,12 @@ w6RycnByb2dyYW0uA - 6.900000e+01 - 1.000000e+01 - 1.000000e+03 + 69 + 10 + 1000 - 67239424 - 0 + 75628096 + 2048 Kortkom. @@ -1448,7 +1435,7 @@ w6RycnByb2dyYW0uA Text Cell LucidaGrande - 1.200000e+01 + 12 16 @@ -1458,7 +1445,7 @@ w6RycnByb2dyYW0uA 6 System controlBackgroundColor - + @@ -1469,8 +1456,8 @@ w6RycnByb2dyYW0uA - 3.000000e+00 - 2.000000e+00 + 3 + 2 6 @@ -1481,16 +1468,20 @@ w6RycnByb2dyYW0uA MC41AA - 1.700000e+01 + 17 1379958784 + + 1 -1 0 YES + 0 {{1, 17}, {301, 198}} + 4 @@ -1502,7 +1493,7 @@ w6RycnByb2dyYW0uA _doScroller: - 9.949238e-01 + 0.99492380000000002 @@ -1512,7 +1503,7 @@ w6RycnByb2dyYW0uA 1 _doScroller: - 6.885246e-01 + 0.68852460000000004 @@ -1523,6 +1514,7 @@ w6RycnByb2dyYW0uA {{1, 0}, {301, 17}} + 4 @@ -1531,6 +1523,7 @@ w6RycnByb2dyYW0uA {{20, 20}, {318, 231}} + 50 @@ -1548,7 +1541,7 @@ w6RycnByb2dyYW0uA -2080244224 137887744 - TMOkZ2cgdGlsbCBvYmpla3Q + Lägg till objekt -2038284033 @@ -1567,7 +1560,7 @@ w6RycnByb2dyYW0uA {{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps @@ -1611,7 +1604,7 @@ w6RycnByb2dyYW0uA - QW5wYXNzYeKApg + Anpassa… 1048576 2147483647 @@ -2186,28 +2179,26 @@ w6RycnByb2dyYW0uA YES 0 - - YES - + -2 - - RmlsZSdzIE93bmVyA + + File's Owner -1 - + First Responder -3 - + Application @@ -2221,7 +2212,7 @@ w6RycnByb2dyYW0uA - + MainMenu @@ -2466,7 +2457,7 @@ w6RycnByb2dyYW0uA 196 - + X11Controller @@ -2476,7 +2467,7 @@ w6RycnByb2dyYW0uA YES - + PrefsPanel @@ -2740,7 +2731,7 @@ w6RycnByb2dyYW0uA YES - + EditPrograms @@ -2763,7 +2754,7 @@ w6RycnByb2dyYW0uA - + DockMenu @@ -3315,10 +3306,8 @@ w6RycnByb2dyYW0uA YES - + YES - -1.IBPluginDependency - -2.IBPluginDependency -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency @@ -3376,7 +3365,6 @@ w6RycnByb2dyYW0uA 169.editorWindowContentRectSynchronizationRect 19.IBPluginDependency 19.ImportedFromIB2 - 196.IBPluginDependency 196.ImportedFromIB2 200295.IBPluginDependency 200295.IBShouldRemoveOnLegacySave @@ -3391,6 +3379,7 @@ w6RycnByb2dyYW0uA 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect 244.IBEditorWindowLastContentRect + 244.IBPluginDependency 244.IBPropertyAccessControl 244.IBViewEditorWindowController.showingLayoutRectangles 244.IBWindowTemplateEditedContentRect @@ -3412,6 +3401,7 @@ w6RycnByb2dyYW0uA 272.IBPluginDependency 272.ImportedFromIB2 285.IBEditorWindowLastContentRect + 285.IBPluginDependency 285.IBViewEditorWindowController.showingBoundsRectangles 285.IBViewEditorWindowController.showingLayoutRectangles 285.IBWindowTemplateEditedContentRect @@ -3586,6 +3576,7 @@ w6RycnByb2dyYW0uA 379.IBPluginDependency 379.IBPropertyAccessControl 379.ImportedFromIB2 + 380.IBEditorWindowLastContentRect 380.IBPluginDependency 380.ImportedFromIB2 381.IBPluginDependency @@ -3664,13 +3655,11 @@ w6RycnByb2dyYW0uA YES com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3689,330 +3678,330 @@ w6RycnByb2dyYW0uA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{168, 821}, {113, 23}} com.apple.InterfaceBuilder.CocoaPlugin - + {{202, 626}, {154, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - + {{349, 858}, {315, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + {{271, 666}, {301, 153}} {{444, 200}, {484, 308}} - + com.apple.InterfaceBuilder.CocoaPlugin + {{444, 200}, {484, 308}} - + {{184, 290}, {481, 345}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + {{58, 803}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{100, 746}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{68, 585}, {496, 271}} - - + com.apple.InterfaceBuilder.CocoaPlugin + + {{68, 585}, {496, 271}} - + {{433, 406}, {486, 327}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - + {{145, 836}, {347, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + {{67, 819}, {336, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + + {{530, 368}, {171, 83}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{84, 676}, {127, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{20, 641}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + {{79, 616}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + YES - - YES - + YES @@ -4020,9 +4009,7 @@ w6RycnByb2dyYW0uA YES - - YES - + YES @@ -4060,6 +4047,15 @@ w6RycnByb2dyYW0uA 0 + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES ../X11.xcodeproj 1 diff --git a/hw/xquartz/bundle/Resources/sv.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/sv.lproj/main.nib/keyedobjects.nib index 11f4bc9352d3b6378a85a767ea51b1544a0c6001..ae0faf9bc6c4343371cc792e9b9a698f6e07fe01 100644 GIT binary patch literal 52576 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 RmoES7$zA`~|DUbT{vShZ7m@$~ literal 50165 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 S^sQUB|JkqOfBt_hivI)s*y3aW diff --git a/hw/xquartz/bundle/Resources/zh_CN.lproj/locversion.plist b/hw/xquartz/bundle/Resources/zh_CN.lproj/locversion.plist index 8b8767f06..1cbc91af8 100644 --- a/hw/xquartz/bundle/Resources/zh_CN.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/zh_CN.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 75.1 + 83 diff --git a/hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist b/hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist index 15f4f1b9e..866f0f1ef 100644 --- a/hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib index 96b6f1fa3..14a5fd064 100644 --- a/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib @@ -396,7 +396,7 @@ {3.40282e+38, 3.40282e+38} {320, 240} - + 256 YES @@ -405,6 +405,7 @@ 256 {{13, 10}, {458, 292}} + YES @@ -421,6 +422,7 @@ 256 {{18, 210}, {402, 18}} + YES 67239424 @@ -452,6 +454,7 @@ 256 {{36, 92}, {399, 14}} + YES 67239424 @@ -469,7 +472,7 @@ 6 System controlColor - + 3 MC42NjY2NjY2OQA @@ -488,8 +491,9 @@ 256 - {{36, 162}, {385, 42}} + {{36, 176}, {385, 28}} + YES 67239424 @@ -508,6 +512,7 @@ vKDnmoTkuK3plpPmiJblj7PpgormjInpiJXjgIIKA 256 {{18, 112}, {402, 18}} + YES 67239424 @@ -530,6 +535,7 @@ vKDnmoTkuK3plpPmiJblj7PpgormjInpiJXjgIIKA 256 {{36, 141}, {385, 14}} + YES 67239424 @@ -548,6 +554,7 @@ h4njgII 256 {{18, 161}, {402, 18}} + YES 67239424 @@ -568,6 +575,7 @@ h4njgII {{10, 33}, {438, 246}} + 6Ly45YWlA @@ -1113,7 +1121,7 @@ uOWPjeeahOaViOaenOOAgg 67239424 4194304 55W25ZWT55So5pmC77yM5paw5bu655qEIFgxMSDoppbnqpflsIfmnIPkvb8gWDExLmFwcO+8iOiAjOS4 -jeaYryBGaW5kZXIuYXBw44CBVGVybWluYWwuYXBwIOetie+8ieenu+iHs+acgOWJjeOAgg +jeaYryBGaW5kZXIuYXBw44CB57WC56uv5qmfLmFwcCDnrYnvvInnp7voh7PmnIDliY3jgII @@ -1252,6 +1260,8 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9 {484, 308} + + {{0, 0}, {1440, 878}} {320, 262} @@ -1450,7 +1460,7 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9 6 System controlBackgroundColor - + diff --git a/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/keyedobjects.nib index 4c99736818c82e681197832fade0bbc79cb85915..3f516a318ba58ab18905864a8a445ffee71acb4f 100644 GIT binary patch literal 42003 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 z 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 From 6e6927247359cc0db47501fb9d2dbb7856aa5985 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Wed, 27 May 2009 15:51:19 -0400 Subject: [PATCH 88/89] Fix alpha map computation in miComputeCompositeRegion() According to the RENDER spec, the origin of the alpha map is interpreted relative to the origin of the drawable of the image, not the origin of the drawable of the alpha map. This commit fixes that and adds an alpha-test.c test program. The only use of alpha maps I have been able to find is in Qt and they don't use a non-zero alpha origin. --- render/mipict.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/render/mipict.c b/render/mipict.c index c653ec4f5..e0d40ae34 100644 --- a/render/mipict.c +++ b/render/mipict.c @@ -459,8 +459,8 @@ miComputeCompositeRegion (RegionPtr pRegion, if (pSrc->alphaMap) { if (!miClipPictureSrc (pRegion, pSrc->alphaMap, - xDst - (xSrc + pSrc->alphaOrigin.x), - yDst - (ySrc + pSrc->alphaOrigin.y))) + xDst - (xSrc - pSrc->alphaOrigin.x), + yDst - (ySrc - pSrc->alphaOrigin.y))) { pixman_region_fini (pRegion); return FALSE; @@ -477,8 +477,8 @@ miComputeCompositeRegion (RegionPtr pRegion, if (pMask->alphaMap) { if (!miClipPictureSrc (pRegion, pMask->alphaMap, - xDst - (xMask + pMask->alphaOrigin.x), - yDst - (yMask + pMask->alphaOrigin.y))) + xDst - (xMask - pMask->alphaOrigin.x), + yDst - (yMask - pMask->alphaOrigin.y))) { pixman_region_fini (pRegion); return FALSE; From e08c6a0752772745f35f7afcf6c2b1c927b91cc0 Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Mon, 4 May 2009 19:24:47 -0500 Subject: [PATCH 89/89] randr: bug #21554 - re-probe outputs when coming back from laptop unsuspend Make xf86 RANDR wrap the EnterVT call chain, so it can re-probe the outputs when a laptop comes back from suspend/unsuspend (actually, any time that we enter our VT again). The X server should then send RR* events to clients, so they can cope with a monitor that was unplugged while the laptop was suspended. Signed-off-by: Federico Mena Quintero --- hw/xfree86/modes/xf86RandR12.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c index 1e3b70c09..0de21e253 100644 --- a/hw/xfree86/modes/xf86RandR12.c +++ b/hw/xfree86/modes/xf86RandR12.c @@ -55,6 +55,13 @@ typedef struct _xf86RandR12Info { int pointerY; Rotation rotation; /* current mode */ Rotation supported_rotations; /* driver supported */ + + /* Used to wrap EnterVT so we can re-probe the outputs when a laptop unsuspends + * (actually, any time that we switch back into our VT). + * + * See https://bugs.freedesktop.org/show_bug.cgi?id=21554 + */ + xf86EnterVTProc *orig_EnterVT; } XF86RandRInfoRec, *XF86RandRInfoPtr; #ifdef RANDR_12_INTERFACE @@ -1745,11 +1752,26 @@ xf86RandR12ChangeGamma(int scrnIndex, Gamma gamma) return Success; } +static Bool +xf86RandR12EnterVT (int screen_index, int flags) +{ + ScreenPtr pScreen = screenInfo.screens[screen_index]; + XF86RandRInfoPtr randrp = XF86RANDRINFO(pScreen); + + if (randrp->orig_EnterVT) { + if (!randrp->orig_EnterVT (screen_index, flags)) + return FALSE; + } + + return RRGetInfo (pScreen, TRUE); /* force a re-probe of outputs and notify clients about changes */ +} + static Bool xf86RandR12Init12 (ScreenPtr pScreen) { ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; rrScrPrivPtr rp = rrGetScrPriv(pScreen); + XF86RandRInfoPtr randrp = XF86RANDRINFO(pScreen); rp->rrGetInfo = xf86RandR12GetInfo12; rp->rrScreenSetSize = xf86RandR12ScreenSetSize; @@ -1767,6 +1789,10 @@ xf86RandR12Init12 (ScreenPtr pScreen) rp->rrSetConfig = NULL; pScrn->PointerMoved = xf86RandR12PointerMoved; pScrn->ChangeGamma = xf86RandR12ChangeGamma; + + randrp->orig_EnterVT = pScrn->EnterVT; + pScrn->EnterVT = xf86RandR12EnterVT; + if (!xf86RandR12CreateObjects12 (pScreen)) return FALSE;