From f0d31a52b7eb0682f4b114c475f9212355720051 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 10 Feb 2008 01:51:34 -0500 Subject: make white font shadows (negative shadowtint) work right.. this has been busted a long time. thank you nvidia. --- render/font.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'render') diff --git a/render/font.c b/render/font.c index 356b9c6e..369f262e 100644 --- a/render/font.c +++ b/render/font.c @@ -258,9 +258,20 @@ void RrFontDraw(XftDraw *d, RrTextureText *t, RrRect *area) } if (t->shadow_offset_x || t->shadow_offset_y) { - c.color.red = t->shadow_color->r | t->shadow_color->r << 8; - c.color.green = t->shadow_color->g | t->shadow_color->g << 8; - c.color.blue = t->shadow_color->b | t->shadow_color->b << 8; + /* From nvidia's readme (chapter 23): + + When rendering to a 32-bit window, keep in mind that the X RENDER + extension, used by most composite managers, expects "premultiplied + alpha" colors. This means that if your color has components (r,g,b) + and alpha value a, then you must render (a*r, a*g, a*b, a) into the + target window. + */ + c.color.red = (t->shadow_color->r | t->shadow_color->r << 8) * + t->shadow_alpha / 255; + c.color.green = (t->shadow_color->g | t->shadow_color->g << 8) * + t->shadow_alpha / 255; + c.color.blue = (t->shadow_color->b | t->shadow_color->b << 8) * + t->shadow_alpha / 255; c.color.alpha = 0xffff * t->shadow_alpha / 255; c.pixel = t->shadow_color->pixel; -- cgit v1.2.3 From ed81992aeaf5b81aa9c4ee5e1491c43d7aa8862e Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 10 Feb 2008 15:04:26 -0500 Subject: make rendertest exit cleanly when it is unmapped (iconify/desktopchange) --- render/test.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'render') diff --git a/render/test.c b/render/test.c index 307e2629..05416a3f 100644 --- a/render/test.c +++ b/render/test.c @@ -44,6 +44,7 @@ gint main() Window win; RrInstance *inst; RrAppearance *look; + int done; Window root; XEvent report; @@ -67,8 +68,10 @@ gint main() inst = RrInstanceNew(ob_display, ob_screen); look = RrAppearanceNew(inst, 0); - look->surface.grad = RR_SURFACE_PYRAMID; + look->surface.grad = RR_SURFACE_SPLIT_VERTICAL; look->surface.secondary = RrColorParse(inst, "Yellow"); + look->surface.split_secondary = RrColorParse(inst, "Red"); + look->surface.split_primary = RrColorParse(inst, "Green"); look->surface.primary = RrColorParse(inst, "Blue"); look->surface.interlaced = FALSE; if (ob_display == NULL) { @@ -77,7 +80,8 @@ gint main() } RrPaint(look, win, w, h); - while (1) { + done = 0; + while (!done) { XNextEvent(ob_display, &report); switch (report.type) { case Expose: @@ -87,8 +91,10 @@ gint main() report.xconfigure.width, report.xconfigure.height); break; + case UnmapNotify: + done = 1; + break; } - } RrAppearanceFree (look); -- cgit v1.2.3 From 1d00d9947067da76ac4d8d0a6b9ef2c28e73349e Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 10 Feb 2008 16:49:16 -0500 Subject: use memcpy's to make splitvertical gradient much faster - using log n memcpy's is much quicker than setting a pointer value n times Here are some profiling results. splitvertical1 is the original code, splitvertical2 is some slight improvements in locality for it, and splitvertical3 is the new O(log n) memcpy code % cumulative self self total time seconds seconds calls ms/call ms/call name 49.44 0.88 0.88 1063 0.83 0.83 gradient_splitvertical1 47.19 1.72 0.84 1063 0.79 0.79 gradient_splitvertical2 2.81 1.77 0.05 1063 0.05 0.05 gradient_splitvertical3 i also tested this with 'time' to draw 1000 gradients, and the new code used approximately half the user time, and finished 10 seconds quicker. so yeah, it's magical and works well. --- render/gradient.c | 78 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 59 insertions(+), 19 deletions(-) (limited to 'render') diff --git a/render/gradient.c b/render/gradient.c index 6439b301..bbd2a5c9 100644 --- a/render/gradient.c +++ b/render/gradient.c @@ -425,8 +425,7 @@ static void gradient_splitvertical(RrAppearance *a, gint w, gint h) { gint x, y1, y2, y3; RrSurface *sf = &a->surface; - RrPixel32 *data = sf->pixel_data; - RrPixel32 current; + RrPixel32 *data, *start; gint y1sz, y2sz, y3sz; VARS(y1); @@ -455,28 +454,69 @@ static void gradient_splitvertical(RrAppearance *a, gint w, gint h) } SETUP(y3, sf->secondary, sf->split_secondary, y3sz); - for (y1 = y1sz; y1 > 0; --y1) { - current = COLOR(y1); - for (x = w - 1; x >= 0; --x) - *(data++) = current; + /* find the color for the first pixel of each row first */ + data = sf->pixel_data; + for (y1 = y1sz-1; y1 > 0; --y1) { + *data = COLOR(y1); + data += w; NEXT(y1); } - - for (y2 = y2sz; y2 > 0; --y2) { - current = COLOR(y2); - for (x = w - 1; x >= 0; --x) - *(data++) = current; - + *data = COLOR(y1); + data += w; + for (y2 = y2sz-1; y2 > 0; --y2) { + *data = COLOR(y2); + data += w; NEXT(y2); } + *data = COLOR(y2); + data += w; + for (y3 = y3sz-1; y3 > 0; --y3) { + *data = COLOR(y3); + data += w; + NEXT(y3); + } + *data = COLOR(y3); - for (y3 = y3sz; y3 > 0; --y3) { - current = COLOR(y3); - for (x = w - 1; x >= 0; --x) - *(data++) = current; + /* copy the first pixels into the whole rows */ - NEXT(y3); + start = sf->pixel_data; + data = start + 1; + + for (y1 = h; y1 > 0; --y1) { + /* for really small things, just copy ourselves */ + if (w < 8) { + for (x = w-1; x > 0; --x) + *(data++) = *start; + } + /* for >= 8, then use O(log n) memcpy's... */ + else { + gint len = 4; + gint lenbytes = 4 * sizeof(RrPixel32); + + /* copy the first 3 * 32 bits (3 words) ourselves - then we have + 3 + the original 1 = 4 words to make copies of at a time + + this is faster than doing memcpy for 1 or 2 words at a time + */ + for (x = 3; x > 0; --x) + *(data++) = *start; + + for (x = w - 4; x > 0;) { + memcpy(data, start, lenbytes); + x -= len; + data += len; + len <<= 1; + lenbytes <<= 1; + if (len > x) { + len = x; + lenbytes = x * sizeof(RrPixel32); + } + } + } + + start += w; + ++data; } } @@ -551,13 +591,13 @@ static void gradient_vertical(RrSurface *sf, gint w, gint h) for (y = h - 1; y > 0; --y) { /* 0 -> h-1 */ current = COLOR(y); - for (x = w - 1; x >= 0; --x) /* 0 -> w */ + for (x = w; x > 0; --x) /* 0 -> w */ *(data++) = current; NEXT(y); } current = COLOR(y); - for (x = w - 1; x >= 0; --x) /* 0 -> w */ + for (x = w; x > 0; --x) /* 0 -> w */ *(data++) = current; } -- cgit v1.2.3 From 3611c8210cc632c2a21c67ccbf40857342c10371 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 10 Feb 2008 17:06:18 -0500 Subject: use memcpy's to speed up vertical gradients too. split the fancy memcpy() code out into the repeat_pixel function. --- render/gradient.c | 115 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 66 insertions(+), 49 deletions(-) (limited to 'render') diff --git a/render/gradient.c b/render/gradient.c index bbd2a5c9..d1d90e41 100644 --- a/render/gradient.c +++ b/render/gradient.c @@ -197,6 +197,52 @@ static void create_bevel_colors(RrAppearance *l) l->surface.bevel_dark = RrColorNew(l->inst, r, g, b); } +/*! Repeat the first pixel over the entire block of memory + @param start The block of memory. start[0] will be copied + to the rest of the block. + @param w The width of the block of memory (including the already-set first + element +*/ +static inline void repeat_pixel(RrPixel32 *start, gint w) +{ + gint x; + RrPixel32 *dest; + + dest = start + 1; + + /* for really small things, just copy ourselves */ + if (w < 8) { + for (x = w-1; x > 0; --x) + *(dest++) = *start; + } + + /* for >= 8, then use O(log n) memcpy's... */ + else { + gint len = 4; + gint lenbytes = 4 * sizeof(RrPixel32); + + /* copy the first 3 * 32 bits (3 words) ourselves - then we have + 3 + the original 1 = 4 words to make copies of at a time + + this is faster than doing memcpy for 1 or 2 words at a time + */ + for (x = 3; x > 0; --x) + *(dest++) = *start; + + for (x = w - 4; x > 0;) { + memcpy(dest, start, lenbytes); + x -= len; + dest += len; + len <<= 1; + lenbytes <<= 1; + if (len > x) { + len = x; + lenbytes = x * sizeof(RrPixel32); + } + } + } +} + static void gradient_parentrelative(RrAppearance *a, gint w, gint h) { RrPixel32 *source, *dest; @@ -423,9 +469,9 @@ static void gradient_solid(RrAppearance *l, gint w, gint h) static void gradient_splitvertical(RrAppearance *a, gint w, gint h) { - gint x, y1, y2, y3; + gint y1, y2, y3; RrSurface *sf = &a->surface; - RrPixel32 *data, *start; + RrPixel32 *data; gint y1sz, y2sz, y3sz; VARS(y1); @@ -479,44 +525,10 @@ static void gradient_splitvertical(RrAppearance *a, gint w, gint h) *data = COLOR(y3); /* copy the first pixels into the whole rows */ - - start = sf->pixel_data; - data = start + 1; - + data = sf->pixel_data; for (y1 = h; y1 > 0; --y1) { - /* for really small things, just copy ourselves */ - if (w < 8) { - for (x = w-1; x > 0; --x) - *(data++) = *start; - } - /* for >= 8, then use O(log n) memcpy's... */ - else { - gint len = 4; - gint lenbytes = 4 * sizeof(RrPixel32); - - /* copy the first 3 * 32 bits (3 words) ourselves - then we have - 3 + the original 1 = 4 words to make copies of at a time - - this is faster than doing memcpy for 1 or 2 words at a time - */ - for (x = 3; x > 0; --x) - *(data++) = *start; - - for (x = w - 4; x > 0;) { - memcpy(data, start, lenbytes); - x -= len; - data += len; - len <<= 1; - lenbytes <<= 1; - if (len > x) { - len = x; - lenbytes = x * sizeof(RrPixel32); - } - } - } - - start += w; - ++data; + repeat_pixel(data, w); + data += w; } } @@ -582,23 +594,28 @@ static void gradient_mirrorhorizontal(RrSurface *sf, gint w, gint h) static void gradient_vertical(RrSurface *sf, gint w, gint h) { - gint x, y; - RrPixel32 *data = sf->pixel_data; - RrPixel32 current; + gint y; + RrPixel32 *data; VARS(y); SETUP(y, sf->primary, sf->secondary, h); - for (y = h - 1; y > 0; --y) { /* 0 -> h-1 */ - current = COLOR(y); - for (x = w; x > 0; --x) /* 0 -> w */ - *(data++) = current; + /* find the color for the first pixel of each row first */ + data = sf->pixel_data; + for (y = h - 1; y > 0; --y) { /* 0 -> h-1 */ + *data = COLOR(y); + data += w; NEXT(y); } - current = COLOR(y); - for (x = w; x > 0; --x) /* 0 -> w */ - *(data++) = current; + *data = COLOR(y); + + /* copy the first pixels into the whole rows */ + data = sf->pixel_data; + for (y = h; y > 0; --y) { + repeat_pixel(data, w); + data += w; + } } -- cgit v1.2.3 From 9c729986844a65545f7736d053359ad24d2df120 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 10 Feb 2008 18:08:05 -0500 Subject: a small optimization for the vertical gradients, and use the same log(n) strategy to use less memcpy's for filling out the horizontal gradients --- render/gradient.c | 79 ++++++++++++++++++++++++++++++++++++++++++------------- render/test.c | 14 +++++++++- 2 files changed, 73 insertions(+), 20 deletions(-) (limited to 'render') diff --git a/render/gradient.c b/render/gradient.c index d1d90e41..d7401a98 100644 --- a/render/gradient.c +++ b/render/gradient.c @@ -218,8 +218,8 @@ static inline void repeat_pixel(RrPixel32 *start, gint w) /* for >= 8, then use O(log n) memcpy's... */ else { - gint len = 4; - gint lenbytes = 4 * sizeof(RrPixel32); + gchar *cdest; + gint lenbytes; /* copy the first 3 * 32 bits (3 words) ourselves - then we have 3 + the original 1 = 4 words to make copies of at a time @@ -229,16 +229,38 @@ static inline void repeat_pixel(RrPixel32 *start, gint w) for (x = 3; x > 0; --x) *(dest++) = *start; - for (x = w - 4; x > 0;) { - memcpy(dest, start, lenbytes); - x -= len; - dest += len; - len <<= 1; + /* cdest is a pointer to the pixel data that is typed char* so that + adding 1 to its position moves it only one byte + + lenbytes is the amount of bytes that we will be copying each + iteration. this doubles each time through the loop. + + x is the number of bytes left to copy into. lenbytes will alwaysa + be bounded by x + + this loop will run O(log n) times (n is the number of bytes we + need to copy into), since the size of the copy is doubled each + iteration. it seems that gcc does some nice optimizations to make + this memcpy very fast on hardware with support for vector operations + such as mmx or see. here is an idea of the kind of speed up we are + getting by doing this (splitvertical3 switches from doing + "*(data++) = color" n times to doing this memcpy thing log n times: + + % cumulative self self total + time seconds seconds calls ms/call ms/call name + 49.44 0.88 0.88 1063 0.83 0.83 splitvertical1 + 47.19 1.72 0.84 1063 0.79 0.79 splitvertical2 + 2.81 1.77 0.05 1063 0.05 0.05 splitvertical3 + */ + cdest = (gchar*)dest; + lenbytes = 4 * sizeof(RrPixel32); + for (x = (w - 4) * sizeof(RrPixel32); x > 0;) { + memcpy(cdest, start, lenbytes); + x -= lenbytes; + cdest += lenbytes; lenbytes <<= 1; - if (len > x) { - len = x; - lenbytes = x * sizeof(RrPixel32); - } + if (lenbytes > x) + lenbytes = x; } } } @@ -534,12 +556,14 @@ static void gradient_splitvertical(RrAppearance *a, gint w, gint h) static void gradient_horizontal(RrSurface *sf, gint w, gint h) { - gint x, y; + gint x, y, cpbytes; RrPixel32 *data = sf->pixel_data, *datav; + gchar *datac; VARS(x); SETUP(x, sf->primary, sf->secondary, w); + /* set the color values for the first row */ datav = data; for (x = w - 1; x > 0; --x) { /* 0 -> w - 1 */ *datav = COLOR(x); @@ -549,22 +573,32 @@ static void gradient_horizontal(RrSurface *sf, gint w, gint h) *datav = COLOR(x); ++datav; - for (y = h - 1; y > 0; --y) { /* 1 -> h */ - memcpy(datav, data, w * sizeof(RrPixel32)); - datav += w; + /* copy the first row to the rest in O(logn) copies */ + datac = (gchar*)datav; + cpbytes = 1 * w * sizeof(RrPixel32); + for (y = (h - 1) * w * sizeof(RrPixel32); y > 0;) { + memcpy(datac, data, cpbytes); + y -= cpbytes; + datac += cpbytes; + cpbytes <<= 1; + if (cpbytes > y) + cpbytes = y; } } static void gradient_mirrorhorizontal(RrSurface *sf, gint w, gint h) { - gint x, y, half1, half2; + gint x, y, half1, half2, cpbytes; RrPixel32 *data = sf->pixel_data, *datav; + gchar *datac; VARS(x); half1 = (w + 1) / 2; half2 = w / 2; + /* set the color values for the first row */ + SETUP(x, sf->primary, sf->secondary, half1); datav = data; for (x = half1 - 1; x > 0; --x) { /* 0 -> half1 - 1 */ @@ -586,9 +620,16 @@ static void gradient_mirrorhorizontal(RrSurface *sf, gint w, gint h) ++datav; } - for (y = h - 1; y > 0; --y) { /* 1 -> h */ - memcpy(datav, data, w * sizeof(RrPixel32)); - datav += w; + /* copy the first row to the rest in O(logn) copies */ + datac = (gchar*)datav; + cpbytes = 1 * w * sizeof(RrPixel32); + for (y = (h - 1) * w * sizeof(RrPixel32); y > 0;) { + memcpy(datac, data, cpbytes); + y -= cpbytes; + datac += cpbytes; + cpbytes <<= 1; + if (cpbytes > y) + cpbytes = y; } } diff --git a/render/test.c b/render/test.c index 05416a3f..36c962da 100644 --- a/render/test.c +++ b/render/test.c @@ -68,7 +68,7 @@ gint main() inst = RrInstanceNew(ob_display, ob_screen); look = RrAppearanceNew(inst, 0); - look->surface.grad = RR_SURFACE_SPLIT_VERTICAL; + look->surface.grad = RR_SURFACE_MIRROR_HORIZONTAL; look->surface.secondary = RrColorParse(inst, "Yellow"); look->surface.split_secondary = RrColorParse(inst, "Red"); look->surface.split_primary = RrColorParse(inst, "Green"); @@ -79,6 +79,18 @@ gint main() return 0; } +#if BIGTEST + int i; + look->surface.pixel_data = g_new(RrPixel32, w*h); + for (i = 0; i < 10000; ++i) { + printf("\r%d", i); + fflush(stdout); + RrRender(look, w, h); + } + exit (0); +#endif + + RrPaint(look, win, w, h); done = 0; while (!done) { -- cgit v1.2.3 From b92cb6a08a1dc560e439d2a01cfbb32f50130324 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 10 Feb 2008 18:41:11 -0500 Subject: remove an XXX comment, the sanity check seems to have worked out fine. --- render/image.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'render') diff --git a/render/image.c b/render/image.c index 2eb043a2..fa630b74 100644 --- a/render/image.c +++ b/render/image.c @@ -126,9 +126,6 @@ void RrImageDraw(RrPixel32 *target, RrTextureRGBA *rgba, dw = (gint)(dh * ((gdouble)sw / sh)); } - if (!(dw && dh)) - return; /* XXX sanity check */ - if (sw != dw || sh != dh) { /*if (!(rgba->cache && dw == rgba->cwidth && dh == rgba->cheight))*/ { g_free(rgba->cache); -- cgit v1.2.3 From 6bda8c29038649f4bd4c54ce011473b1344bb291 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Mon, 11 Feb 2008 01:15:06 -0500 Subject: speed up the pyramid gradient using memcpy's. also make it not crash for 1px high textures. here are some sample profiling results. pyramid2 is the new code % cumulative self self total time seconds seconds calls ms/call ms/call name 58.78 1.54 1.54 255 6.04 6.04 gradient_pyramid1 40.46 2.60 1.06 255 4.16 4.16 gradient_pyramid2 54.88 2.25 2.25 504 4.46 4.46 gradient_pyramid1 44.88 4.09 1.84 504 3.65 3.65 gradient_pyramid2 --- render/gradient.c | 87 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 39 deletions(-) (limited to 'render') diff --git a/render/gradient.c b/render/gradient.c index d7401a98..fc75047f 100644 --- a/render/gradient.c +++ b/render/gradient.c @@ -754,14 +754,13 @@ static void gradient_crossdiagonal(RrSurface *sf, gint w, gint h) *data = COLOR(x); } -static void gradient_pyramid(RrSurface *sf, gint inw, gint inh) +static void gradient_pyramid(RrSurface *sf, gint w, gint h) { - gint x, y, w = (inw >> 1) + 1, h = (inh >> 1) + 1; - RrPixel32 *data = sf->pixel_data; - RrPixel32 *end = data + inw*inh - 1; - RrPixel32 current; + RrPixel32 *ldata, *rdata; + RrPixel32 *cp; RrColor left, right; RrColor extracorner; + gint x, y, halfw, halfh, midx, midy; VARS(lefty); VARS(righty); @@ -771,54 +770,64 @@ static void gradient_pyramid(RrSurface *sf, gint inw, gint inh) extracorner.g = (sf->primary->g + sf->secondary->g) / 2; extracorner.b = (sf->primary->b + sf->secondary->b) / 2; - SETUP(lefty, (&extracorner), sf->secondary, h); - SETUP(righty, sf->primary, (&extracorner), h); + halfw = w >> 1; + halfh = h >> 1; + midx = w - halfw - halfw; /* 0 or 1, depending if w is even or odd */ + midy = h - halfh - halfh; /* 0 or 1, depending if h is even or odd */ + + SETUP(lefty, sf->primary, (&extracorner), halfh + midy); + SETUP(righty, (&extracorner), sf->secondary, halfh + midy); + + /* draw the top half + + it is faster to draw both top quarters together than to draw one and + then copy it over to the other side. + */ + + ldata = sf->pixel_data; + rdata = ldata + w - 1; + for (y = halfh + midy; y > 0; --y) { /* 0 -> (h+1)/2 */ + RrPixel32 c; - for (y = h - 1; y > 0; --y) { /* 0 -> h-1 */ COLOR_RR(lefty, (&left)); COLOR_RR(righty, (&right)); - SETUP(x, (&left), (&right), w); + SETUP(x, (&left), (&right), halfw + midx); - for (x = w - 1; x > 0; --x) { /* 0 -> w-1 */ - current = COLOR(x); - *(data+x) = current; - *(data+inw-x) = current; - *(end-x) = current; - *(end-(inw-x)) = current; + for (x = halfw + midx - 1; x > 0; --x) { /* 0 -> (w+1)/2 */ + c = COLOR(x); + *(ldata++) = *(rdata--) = c; NEXT(x); } - current = COLOR(x); - *(data+x) = current; - *(data+inw-x) = current; - *(end-x) = current; - *(end-(inw-x)) = current; - - data+=inw; - end-=inw; + c = COLOR(x); + *ldata = *rdata = c; + ldata += halfw + 1; + rdata += halfw - 1 + midx + w; NEXT(lefty); NEXT(righty); } - COLOR_RR(lefty, (&left)); - COLOR_RR(righty, (&right)); - SETUP(x, (&left), (&right), w); + /* copy the top half into the bottom half, mirroring it, so we can only + copy one row at a time - for (x = w - 1; x > 0; --x) { /* 0 -> w-1 */ - current = COLOR(x); - *(data+x) = current; - *(data+inw-x) = current; - *(end-x) = current; - *(end-(inw-x)) = current; + it is faster, to move the writing pointer forward, and the reading + pointer backward - NEXT(x); + this is the current code, moving the write pointer forward and read + pointer backward + 41.78 4.26 1.78 504 3.53 3.53 gradient_pyramid2 + this is the opposite, moving the read pointer forward and the write + pointer backward + 42.27 4.40 1.86 504 3.69 3.69 gradient_pyramid2 + + */ + ldata = sf->pixel_data + (halfh - 1) * w; + cp = ldata + (midy + 1) * w; + for (y = halfh; y > 0; --y) { + memcpy(cp, ldata, w * sizeof(RrPixel32)); + ldata -= w; + cp += w; } - current = COLOR(x); - *(data+x) = current; - *(data+inw-x) = current; - *(end-x) = current; - *(end-(inw-x)) = current; } - -- cgit v1.2.3 From 8186a81fe0095a46c2a65e252268f19d5798095a Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Mon, 11 Feb 2008 22:10:21 -0500 Subject: split menu overlap into x and y components --- render/theme.c | 11 ++++++++--- render/theme.h | 3 ++- 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'render') diff --git a/render/theme.c b/render/theme.c index 9fc1f1db..b1b15ff2 100644 --- a/render/theme.c +++ b/render/theme.c @@ -177,9 +177,14 @@ RrTheme* RrThemeNew(const RrInstance *inst, const gchar *name, theme->osd_font = RrFontOpenDefault(inst); /* load direct dimensions */ - if (!read_int(db, "menu.overlap", &theme->menu_overlap) || - theme->menu_overlap < -100 || theme->menu_overlap > 100) - theme->menu_overlap = 0; + if ((!read_int(db, "menu.overlap.x", &theme->menu_overlap_x) && + !read_int(db, "menu.overlap", &theme->menu_overlap_x)) || + theme->menu_overlap_x < -100 || theme->menu_overlap_x > 100) + theme->menu_overlap_x = 0; + if ((!read_int(db, "menu.overlap.y", &theme->menu_overlap_y) && + !read_int(db, "menu.overlap", &theme->menu_overlap_y)) || + theme->menu_overlap_y < -100 || theme->menu_overlap_y > 100) + theme->menu_overlap_y = 0; if (!read_int(db, "window.handle.width", &theme->handle_height) || theme->handle_height < 0 || theme->handle_height > 100) theme->handle_height = 6; diff --git a/render/theme.h b/render/theme.h index 2c35284f..3f87ce93 100644 --- a/render/theme.h +++ b/render/theme.h @@ -45,7 +45,8 @@ struct _RrTheme { gint obwidth; /*!< osd border width */ gint cbwidthx; gint cbwidthy; - gint menu_overlap; + gint menu_overlap_x; + gint menu_overlap_y; /* these ones are calculated, not set directly by the theme file */ gint win_font_height; gint menu_title_font_height; -- cgit v1.2.3 From 8f5540f76dec892ce5e632bef55bf989c55dc71a Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Wed, 13 Feb 2008 00:37:03 -0500 Subject: turn the new openbox.png into the default icon.h --- render/icon.h | 795 ++++++++++++++++++++++++++++------------------------------ 1 file changed, 388 insertions(+), 407 deletions(-) (limited to 'render') diff --git a/render/icon.h b/render/icon.h index 13eff847..f0b2d267 100644 --- a/render/icon.h +++ b/render/icon.h @@ -1,3 +1,5 @@ +/* GIMP RGBA C-Source image dump (icon.h) */ + /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- icon.h for the Openbox window manager @@ -16,17 +18,14 @@ See the COPYING file for a copy of the GNU General Public License. */ -/* GIMP RGBA C-Source image dump (icon.h) */ - #define OB_DEFAULT_ICON_WIDTH (48) #define OB_DEFAULT_ICON_HEIGHT (48) #define OB_DEFAULT_ICON_BYTES_PER_PIXEL (4) /* 3:RGB, 4:RGBA */ #define OB_DEFAULT_ICON_COMMENT \ - "To recreate this file, save an image as \"C-Source\" in The Gimp. " \ - "Use \"ob_default_icon\" as the Prefixed Name. Enable Glib Types. " \ - "Enable Save Alpha Channel. Enable Use Macros instead of Struct." + "To recreate this file, save an image as \"C-Source\" in The Gimp. Use \"ob_default_icon\" as the Prefixed Name. Enable Glib Types. Enable Save Alpha Channel. Enable Use Macros instead of Struct." #define OB_DEFAULT_ICON_PIXEL_DATA ((guint8*) OB_DEFAULT_ICON_pixel_data) static const guint8 OB_DEFAULT_ICON_pixel_data[48 * 48 * 4 + 1] = +("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" @@ -36,406 +35,388 @@ static const guint8 OB_DEFAULT_ICON_pixel_data[48 * 48 * 4 + 1] = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\10" - "\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373" - "\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10" - "\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10" - "\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10" - "\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373" - "\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10" - "\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10" - "\10\373\10\10\10\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10" - "\373\10\10\10\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22" - "\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20" - "\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373" - "\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24" - "\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22" - "\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20" - "\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373\20\22\24\373" - "\20\22\24\373\23\26\32\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\20\22\24\373\277\324\347\373\277\325\347\373\277\324\347\373\277" - "\324\347\373\277\324\347\373\277\324\347\373\277\324\347\373\277\324\347\373" - "\277\324\347\373\277\324\347\373\277\324\347\373\277\324\347\373\277\324\347" - "\373\277\325\347\373\277\324\347\373\300\324\347\373\277\324\347\373\277\324" - "\347\373\277\324\347\373\277\324\347\373\300\324\347\373\277\324\347\373\277" - "\324\347\373\277\324\347\373\277\324\347\373\277\324\347\373\277\324\347\373" - "\277\324\347\373\277\324\347\373\277\324\347\373\277\324\347\373\300\324\347" - "\373\277\324\347\373\277\324\347\373\277\324\347\373\277\324\347\373\277\325" - "\347\373\277\324\347\373\277\324\347\373\277\324\347\373\20\22\24\373\10\10" - "\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\20\22\24\373\277\323" - "\347\373l\232\277\373n\232\277\373n\232\300\373n\232\300\373o\233\300\373" - "o\233\300\373o\233\301\373o\235\301\373q\235\303\373q\235\303\373q\235\303" - "\373r\236\304\373r\236\304\373t\236\304\373t\237\304\373t\237\305\373t\237" - "\305\373u\237\305\373u\237\306\373u\241\306\373u\241\306\373w\241\307\373" - "w\242\307\373y\242\307\373y\242\307\373y\242\310\373y\245\310\373z\245\311" - "\373z\244\311\373z\245\311\373|\245\311\373|\245\313\373|\245\313\373}\247" - "\313\373}\247\314\373}\247\314\373}\250\314\373\177\251\315\373t\232\277\373" - "\20\22\24\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\20" - "\22\24\373\277\323\346\373l\232\276\373l\230\277\373l\230\277\373n\232\277" - "\373n\232\300\373n\233\300\373o\233\300\373o\233\301\373o\233\301\373o\233" - "\301\373q\235\301\373q\235\303\373q\236\303\373r\236\303\373r\236\304\373" - "r\237\304\373t\236\304\373t\237\305\373t\237\305\373t\241\305\373u\241\306" - "\373u\241\306\373u\242\306\373w\241\306\373w\241\307\373w\242\307\373y\244" - "\307\373y\244\310\373y\244\310\373y\245\310\373z\245\311\373z\244\311\373" - "z\245\311\373|\247\313\373|\247\313\373|\245\313\373}\250\313\373}\250\314" - "\373q\230\276\373\20\22\24\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\10\10\10\373\20\22\24\373\275\322\345\373l\227\276\373k\230\276\373l\230" - "\276\373l\232\277\373l\230\277\373n\232\277\373n\233\300\373n\232\300\373" - "n\232\300\373o\233\300\373o\233\301\373o\233\301\373q\233\301\373q\235\303" - "\373q\235\303\373r\235\303\373r\236\304\373r\237\304\373r\237\304\373t\236" - "\304\373t\237\305\373t\237\305\373u\237\305\373u\241\306\373u\241\306\373" - "u\241\306\373w\242\307\373y\241\307\373w\244\307\373y\242\307\373y\244\310" - "\373z\244\310\373y\244\310\373z\244\311\373z\245\311\373z\245\311\373|\245" - "\313\373|\245\313\373o\230\275\373\20\22\24\373\10\10\10\373\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\10\10\10\373\17\22\24\373\273\322\344\373k\227\275\373" - "k\227\275\373k\230\276\373k\227\276\373l\230\276\373l\232\277\373l\232\277" - "\373n\232\277\373n\232\277\373n\232\300\373n\233\300\373o\232\300\373o\233" - "\301\373o\233\301\373o\233\301\373q\235\303\373r\236\303\373q\235\303\373" - "r\235\303\373r\236\304\373r\237\304\373r\237\304\373u\237\305\373t\237\305" - "\373t\241\305\373u\237\306\373u\237\306\373w\241\306\373w\241\306\373w\242" - "\307\373w\242\307\373w\242\307\373z\242\310\373y\244\310\373z\244\310\373" - "y\244\310\373|\244\311\373z\245\311\373n\225\273\373\17\22\24\373\10\10\10" - "\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\17\22\24\373\273\321\344" - "\373k\227\275\373i\227\275\373k\227\275\373k\230\276\373k\227\276\373l\230" - "\276\373l\230\276\373l\232\277\373l\232\277\373l\230\277\373n\232\277\373" - "n\232\300\373n\233\300\373o\233\300\373o\233\301\373o\235\301\373o\235\301" - "\373q\235\301\373r\235\303\373q\236\303\373r\235\303\373r\236\304\373r\236" - "\304\373r\236\304\373t\237\304\373t\236\305\373t\237\305\373t\237\305\373" - "w\241\306\373u\241\306\373u\241\306\373w\242\306\373w\242\307\373w\242\307" - "\373w\244\307\373y\244\310\373y\244\310\373z\244\310\373l\225\272\373\17\22" - "\24\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\17\22\24" - "\373\272\321\343\373i\225\273\373i\225\273\373i\227\275\373k\225\275\373i" - "\227\275\373k\227\275\373k\230\276\373l\230\276\373l\230\276\373l\230\276" - "\373n\232\277\373l\230\277\373n\232\277\373n\232\300\373o\233\300\373o\233" - "\300\373o\233\300\373o\233\301\373o\235\301\373o\233\301\373q\235\303\373" - "r\235\303\373q\236\303\373r\236\303\373t\236\304\373r\236\304\373r\237\304" - "\373t\237\304\373u\237\305\373t\237\305\373t\241\305\373u\241\306\373u\241" - "\306\373w\241\306\373u\242\306\373w\242\307\373w\242\307\373w\242\307\373" - "k\224\271\373\17\22\24\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\17\22\24\373\271\320\343\373h\224\272\373_\212\260\373_\212\260" - "\373`\212\261\373`\212\261\373`\212\261\373`\212\261\373`\212\261\373`\214" - "\261\373b\214\263\373b\214\263\373b\214\263\373b\214\263\373b\214\263\373" - "c\214\263\373c\216\264\373e\216\264\373e\216\264\373c\216\264\373e\216\264" - "\373e\216\264\373f\217\265\373f\217\265\373e\217\265\373f\217\265\373f\217" - "\265\373f\217\265\373f\221\265\373f\217\266\373f\221\266\373h\221\266\373" - "i\221\266\373h\221\266\373h\222\266\373h\222\270\373i\221\270\373i\222\270" - "\373i\222\270\373i\222\270\373\17\22\24\373\10\10\10\373\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\10\10\10\373\17\21\24\373T\201\250\373T\201\250\373T\201\250" - "\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201" - "\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373" - "T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250" - "\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201" - "\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373" - "T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250\373T\201\250" - "\373T\201\250\373T\201\250\373T\201\250\373\17\21\24\373\10\10\10\373\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\17\21\24\373T\201\250\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373T\201" - "\250\373\17\21\24\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10" - "\373\17\21\24\373T\201\250\373\375\376\376\373\375\376\376\373\375\376\376" - "\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375" - "\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373" - "\375\376\376\373\375\376\376\373\375\375\376\373\375\375\376\373\375\375\376" - "\373\375\376\376\373\375\375\376\373\375\375\376\373\375\376\376\373\375\375" - "\376\373\375\375\376\373\375\376\376\373\375\375\376\373\375\375\376\373\375" - "\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373" - "\375\375\376\373\375\375\376\373T\201\250\373\17\21\24\373\10\10\10\373\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\17\21\24\373T\201\250\373\373" - "\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373" - "\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376" - "\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375" - "\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373" - "\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373" - "\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376" - "\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375" - "\376\373\373\375\376\373\373\375\376\373\373\375\376\373\373\375\376\373T" - "\201\250\373\17\21\24\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\17\21\24\373T\201\250\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375" - "\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373" - "\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376" - "\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375" - "\376\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373" - "\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373T\201\250\373\17\21\24\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\17\21\23\373T\201\250\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373T" - "\201\250\373\17\21\23\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\17\21\23\373T\201\250\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375" - "\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373" - "\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376" - "\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\375\376\373\375" - "\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373" - "\375\375\376\373\375\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373T\201\250\373\17\21\23\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\17\21\23\373T\201\250\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373T" - "\201\250\373\17\21\23\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\17\21\23\373T\201\250\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375" - "\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373" - "\375\376\376\373\375\376\376\373\375\375\376\373\375\375\376\373\375\376\376" - "\373\375\375\376\373\375\376\376\373\375\375\376\373\375\376\376\373\375\375" - "\376\373\375\376\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375" - "\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373T\201\250\373\17\21\23\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\17\20\23\373T\201\250\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373T" - "\201\250\373\17\20\23\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\17\20\23\373T\201\250\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375" - "\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\375\376\373" - "\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376" - "\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375" - "\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375" - "\375\376\373\375\375\376\373\375\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373T\201\250\373\17\20\23\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\17\20\23\373T\201\250\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373T" - "\201\250\373\17\20\23\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\16\20\23\373T\201\250\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375" - "\376\376\373\375\376\376\373\375\375\376\373\375\375\376\373\375\375\376\373" - "\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376" - "\373\375\375\376\373\375\375\376\373\375\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\375\375\376\373\374\375\376\373\375\375\376\373\375" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373T\201\250\373\17\20\23\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\16\20\22\373T\201\250\373\373" - "\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373" - "\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375" - "\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375" - "\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373" - "\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373" - "\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375" - "\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375" - "\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373T" - "\201\250\373\16\20\22\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\16\20\22\373T\201\250\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375\376\376\373\375" - "\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373" - "\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373T\201\250\373\16\20\22\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\16\20\22\373T\201\250\373\373" - "\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373" - "\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375" - "\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375" - "\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373" - "\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373" - "\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375" - "\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375" - "\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373T" - "\201\250\373\16\20\22\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\16\20\22\373T\201\250\373\375\376\376\373\375\376\376\373\375\376" - "\376\373\375\376\376\373\375\376\376\373\375\375\376\373\375\375\376\373\375" - "\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373" - "\375\375\376\373\375\375\376\373\375\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373T\201\250\373\16\20\22\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\16\20\22\373T\201\250\373\373" - "\375\375\373\373\374\375\373\373\374\375\373\373\375\375\373\373\375\375\373" - "\373\374\375\373\373\375\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\375\375\373\373\374\375\373\373\375\375\373\373\374\375\373\373" - "\375\375\373\373\374\375\373\373\374\375\373\373\375\375\373\373\375\375\373" - "\373\374\375\373\373\374\375\373\373\375\375\373\373\375\375\373\373\374\375" - "\373\373\374\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375" - "\375\373\373\375\375\373\373\375\375\373\373\374\375\373\373\374\375\373T" - "\201\250\373\16\20\22\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\16\20\22\373T\201\250\373\375\375\376\373\375\375\376\373\375\375" - "\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375" - "\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373" - "\375\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373T\201\250\373\16\20\22\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\16\20\22\373T\201\250\373\373" - "\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373" - "\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373" - "\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373" - "\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373]" - "\211\261\373\16\20\22\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\16\20\22\373T\201\250\373\375\375\376\373\375\375\376\373\375\375" - "\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\375" - "\375\376\373\375\375\376\373\375\375\376\373\375\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\373\375\375\373\\\211\260\373\15\20\22\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\15\20\22\373T\201\250\373\373" - "\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373" - "\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373" - "\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373" - "\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373[" - "\207\257\373\15\20\22\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\15\20\22\373T\201\250\373\375\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\375\373\374\375\375\373\374\375\375\373\374\375\375\373\374" - "\375\375\373\374\375\375\373\374\375\375\373\374\375\375\373\374\375\375\373" - "\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375" - "\373\373\375\375\373\373\375\375\373Y\206\255\373\15\20\22\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\15\20\22\373T\201\250\373\373" - "\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373" - "\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373" - "\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373" - "\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373V" - "\204\254\373\15\20\22\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\15\20\22\373T\201\250\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\375\373\374\375" - "\375\373\374\375\375\373\374\375\375\373\374\375\375\373\374\375\375\373\374" - "\375\375\373\374\375\375\373\374\375\375\373\373\375\375\373\373\375\375\373" - "\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375" - "\373\373\375\375\373\373\374\375\373V\202\253\373\15\20\22\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\15\20\22\373T\201\250\373\373" - "\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373" - "\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373" - "\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373" - "\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374" - "\375\373\373\374\375\373\373\374\375\373\373\374\375\373\373\374\375\373V" - "\202\253\373\15\20\22\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10" - "\10\10\373\15\17\22\373T\201\250\373\374\375\376\373\374\375\376\373\374\375" - "\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374" - "\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373" - "\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376\373\374\375\376" - "\373\374\375\376\373\374\375\375\373\374\375\375\373\374\375\375\373\374\375" - "\375\373\374\375\375\373\374\375\375\373\374\375\375\373\374\375\375\373\374" - "\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373" - "\373\375\375\373\373\375\375\373\373\375\375\373\373\375\375\373\373\374\375" - "\373\373\374\375\373\373\374\375\373U\201\251\373\15\20\22\373\10\10\10\373" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\15\17\22\373T\201\250\373T\201" - "\250\373T\177\250\373T\177\250\373T\177\250\373T\177\250\373T\177\250\373" - "T\177\250\373T\177\250\373T\201\250\373T\177\250\373T\201\250\373T\177\250" - "\373R\177\250\373T\201\250\373R\177\250\373T\177\250\373T\201\250\373T\177" - "\250\373R\177\250\373T\201\250\373T\177\250\373T\177\250\373T\177\250\373" - "T\177\250\373T\201\250\373T\177\250\373T\177\250\373T\201\250\373T\177\250" - "\373T\177\250\373T\177\250\373T\177\250\373R\177\250\373R\177\250\373T\177" - "\250\373T\177\250\373T\177\250\373T\177\250\373T\177\250\373\15\17\22\373" - "\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\15\17\22\373\202" - "\247\300\373\201\244\300\373}\242\277\373\177\244\277\373\201\245\300\373" - "\202\247\301\373\204\247\303\373\206\250\303\373Ju\236\373\212\254\305\373" - "\214\255\306\373\216\257\307\373\217\260\307\373\221\261\310\373\222\261\311" - "\373\224\263\311\373\225\264\313\373\227\265\314\373\230\266\315\373\233\266" - "\315\373\235\270\316\373\236\272\317\373\237\273\320\373\237\272\320\373\237" - "\272\320\373\237\273\320\373\237\273\320\373\237\273\320\373\237\273\320\373" - "\237\273\320\373\237\273\320\373Ju\236\373\236\273\320\373\237\272\320\373" - "\237\272\320\373\237\272\320\373\237\273\320\373\236\272\320\373\237\273\320" - "\373\237\273\320\373\15\17\22\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\10\10\10\373\15\17\21\373\201\245\277\373My\241\373My\241\373Ly\241\373" - "My\241\373My\241\373My\241\373My\241\3733V\202\373Ny\242\373Nz\242\373Ny\242" - "\373Nz\242\373Mz\242\373Ny\242\373Nz\242\373Mz\242\373Nz\242\373Nz\242\373" - "Nz\242\373Nz\242\373Nz\242\373P|\244\373Pz\244\373N|\244\373Pz\244\373P|\244" - "\373Pz\244\373Pz\244\373P|\244\373P|\244\373-Nz\373Nz\244\373P|\244\373P|" - "\244\373P|\244\373P|\244\373P|\244\373P|\244\373P|\244\373\15\17\21\373\10" - "\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\10\10\10\373\15\17" - "\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15" - "\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373" - "\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21" - "\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17" - "\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15" - "\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373" - "\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\15\17\21\373\10\10\10" - "\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\373\10\10\10\373" - "\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10" - "\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10" - "\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10" - "\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373" - "\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10" - "\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10" - "\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10\10\10\373\10" - "\10\10\373\10\10\10\373\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0"; + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\40J\207\15\40J\207\23\40J\207" + "\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J" + "\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23" + "\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207" + "\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J" + "\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23" + "\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207\23\40J\207" + "\23\40J\207\15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'P\213\267'Q\214\275'Q\214\275" + "'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214" + "\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275" + "'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275(R\215\275'Q\214\275'Q\214" + "\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275" + "'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275'Q\214\275(R\215" + "\275(R\215\275(R\215\275&P\213\267\40J\207\20\0\0\0\0\0\0\0\0\40J\207+Y{\252" + "\377\216\253\320\377\204\243\314\377\204\243\314\377\204\243\314\377\204\243" + "\314\377\204\243\314\377\204\243\314\377\204\243\314\377\204\243\314\377\204" + "\243\314\377\204\243\314\377\204\243\314\377\204\243\314\377\204\243\314\377" + "\204\243\314\377\204\243\314\377\204\243\314\377\204\243\314\377\204\243\314" + "\377\204\243\314\377\204\243\314\377\204\243\314\377\204\243\314\377\204\243" + "\314\377\204\243\314\377\203\243\314\377\203\243\313\377\203\243\313\377\203" + "\243\313\377\203\242\313\377\202\242\313\377\202\242\313\377\202\241\313\377" + "\201\241\312\377\201\241\312\377\201\240\312\377\201\240\312\377\200\240\312" + "\377\200\240\312\377\200\240\312\377\200\240\312\377\211\247\316\377Jn\241" + "\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+Wy\251\377]\207\275\377>o\260\377>o" + "\260\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260" + "\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260\377" + ">o\260\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260\377>o\260" + "\377>o\260\377>o\260\377>o\260\377>o\260\377=o\260\377=o\260\377=o\260\377" + "=o\260\377=o\260\377=o\260\377=o\260\377=o\260\377=o\260\377=o\260\377=o\260" + "\377=o\260\377_\210\275\377Hm\241\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+Tw" + "\251\377]\207\276\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r" + "\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263" + "\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377" + "?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263" + "\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377" + "?r\263\377?r\263\377?r\263\377?r\263\377?r\263\377]\210\277\377Fl\241\377" + "\40J\207+\0\0\0\0\0\0\0\0\40J\207+Rv\250\377\\\210\300\377At\265\377At\265" + "\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377" + "At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265" + "\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377" + "At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265" + "\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377At\265\377" + "At\265\377\\\210\300\377Dj\240\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+Ot\247" + "\377\\\211\302\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271" + "\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377" + "Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271" + "\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377" + "Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377Dw\271" + "\377Dw\271\377Dw\271\377Dw\271\377Dw\271\377[\211\302\377Bi\240\377\40J\207" + "+\0\0\0\0\0\0\0\0\40J\207+Ls\247\377\\\211\303\377Fy\273\377Fy\273\377Fy\273" + "\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377" + "Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273" + "\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377" + "Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273" + "\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377Fy\273\377" + "\\\211\303\377Ah\240\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+Jq\246\377\\\212" + "\305\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277" + "\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377" + "I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277" + "\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377" + "I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277" + "\377I}\277\377I}\277\377I}\277\377[\212\305\377?g\237\377\40J\207+\0\0\0\0" + "\0\0\0\0\40J\207+Jq\246\377\\\212\305\377I}\277\377I}\277\377I}\277\377I}" + "\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277" + "\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377I}\277\377" + "I}\277\377I}\277\377I}\277\377J~\300\377K\177\301\377K\177\301\377K\177\301" + "\377K\177\301\377K\177\301\377K\177\301\377K\177\301\377K\177\301\377K\177" + "\301\377K\177\301\377K\177\301\377K\177\301\377K\177\301\377K\177\301\377" + "K\177\301\377K\177\301\377K\177\301\377K\177\301\377Z\212\307\377=f\237\377" + "\40J\207+\0\0\0\0\0\0\0\0\40J\207+Ip\247\377\\\213\307\377J\177\301\377J\177" + "\301\377J\177\301\377J\177\301\377J\177\301\377J\177\301\377J\177\301\377" + "J\177\301\377J\177\301\377J\177\301\377J\177\301\377J\177\301\377J\177\301" + "\377J\177\301\377J\177\301\377J\177\301\377J\177\301\377J\177\301\377J\177" + "\301\377J\177\301\377J\177\301\377K\200\302\377K\200\302\377K\200\302\377" + "K\200\302\377K\200\302\377K\200\302\377K\200\302\377K\200\302\377K\200\302" + "\377K\200\302\377K\200\302\377K\200\302\377K\200\302\377K\200\302\377K\200" + "\302\377K\200\302\377K\200\302\377K\200\302\377K\200\302\377Z\212\307\377" + "=f\237\377\40J\207+\0\0\0\0\0\0\0\0\40J\207+Ho\247\377e\223\314\377Z\213\310" + "\377Z\213\310\377Z\213\310\377Z\213\310\377Z\213\307\377Z\213\307\377Z\213" + "\307\377Z\213\307\377Z\213\307\377Y\212\307\377Y\212\307\377Y\212\307\377" + "Y\212\307\377Y\212\307\377X\212\307\377X\212\307\377X\212\307\377X\211\307" + "\377X\212\307\377X\212\307\377X\211\307\377X\211\307\377X\211\307\377X\211" + "\307\377X\211\307\377X\211\307\377X\211\307\377X\211\307\377X\211\307\377" + "X\211\307\377W\211\307\377W\211\307\377W\211\307\377W\211\307\377W\211\307" + "\377W\211\307\377V\211\307\377V\211\307\377V\210\307\377V\210\307\377`\217" + "\312\377