From c9e0a6e125f95ba6efe0d200fffca4bf319539df Mon Sep 17 00:00:00 2001 From: John Lindgren Date: Mon, 30 Sep 2024 03:41:25 -0400 Subject: [PATCH] icon-loader: add a new loader for XPM icons, used by many legacy X11 apps Adapted from gdk-pixbuf, see the original at: https://gitlab.gnome.org/GNOME/gdk-pixbuf/-/blob/master/gdk-pixbuf/io-xpm.c rgb.txt is from X.org, see: https://gitlab.freedesktop.org/xorg/app/rgb/-/blob/master/rgb.txt Differences from the gdk-pixbuf version: - GdkPixbuf replaced with struct lab_data_buffer - Progressive and in-memory loading code removed - Two functions that had separate BSD copyright rewritten - Stores colors as ARGB32 earlier in the decoding process for efficiency - Limited to 1024x1024 px and 1024 colors to prevent abuse - Uses struct buf to build strings, in place of manual g_new/g_realloc - Uses xzalloc/xznew_n for other memory allocations - Uses g_strlcpy in place of banned strcpy/strncpy/strncat - Uses standard C types (int, bool, etc.) in place of the GLib ones - Follows labwc coding style (whitespace, braces, letter case, etc.) - Et cetera ... v2: add Perl fixes from @domo141 --- include/img/img-xpm.h | 9 + scripts/checkpatch.pl | 2 +- src/icon-loader.c | 3 +- src/img/gen-color-table.pl | 80 ++ src/img/img-xpm.c | 423 ++++++++++ src/img/meson.build | 1 + src/img/rgb.txt | 782 ++++++++++++++++++ src/img/xpm-color-table.h | 1582 ++++++++++++++++++++++++++++++++++++ 8 files changed, 2880 insertions(+), 2 deletions(-) create mode 100644 include/img/img-xpm.h create mode 100755 src/img/gen-color-table.pl create mode 100644 src/img/img-xpm.c create mode 100644 src/img/rgb.txt create mode 100644 src/img/xpm-color-table.h diff --git a/include/img/img-xpm.h b/include/img/img-xpm.h new file mode 100644 index 00000000..919b810b --- /dev/null +++ b/include/img/img-xpm.h @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef LABWC_IMG_XPM_H +#define LABWC_IMG_XPM_H + +struct lab_data_buffer; + +void img_xpm_load(const char *filename, struct lab_data_buffer **buffer); + +#endif /* LABWC_IMG_XPM_H */ diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index 72368147..b2499234 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl @@ -5657,7 +5657,7 @@ sub process { #labwc-custom check to ignore some pango/libxml2/etc CamelCase variants $var !~ /^(?:_?Pango\w+)/ && $var !~ /^(?:xml\w+)/ && - $var !~ /^(?:GString|GError)/ && + $var !~ /^(?:GString|GError|GHashTable)/ && $var !~ /^(?:RsvgRectangle|RsvgHandle)/ && $var !~ /^(?:XKB_KEY_XF86Switch_VT_1)/ && diff --git a/src/icon-loader.c b/src/icon-loader.c index 2c932116..83d91c50 100644 --- a/src/icon-loader.c +++ b/src/icon-loader.c @@ -10,6 +10,7 @@ #include "config.h" #include "icon-loader.h" #include "img/img-png.h" +#include "img/img-xpm.h" #if HAVE_RSVG #include "img/img-svg.h" @@ -211,7 +212,7 @@ icon_loader_lookup(struct server *server, const char *app_id, int size, int scal #endif break; case SFDO_ICON_FILE_FORMAT_XPM: - /* XPM is not supported */ + img_xpm_load(ctx.path, &icon_buffer); break; } diff --git a/src/img/gen-color-table.pl b/src/img/gen-color-table.pl new file mode 100755 index 00000000..e6ffa49a --- /dev/null +++ b/src/img/gen-color-table.pl @@ -0,0 +1,80 @@ +#!/usr/bin/perl -w + +# Generates xpm-color-table.h from X11's rgb.txt +# Adapted from gdk-pixbuf (LGPL-2.0-or-later) + +if (@ARGV != 1) { + die "Usage: gen-color-table.pl rgb.txt > xpm-color-table.h\n"; +} + +open IN, '<', $ARGV[0] or die "Cannot open $ARGV[0]: $!\n"; + +@colors = (); +while () { + next if /^!/; + if (!/^\s*([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+(.*\S)\s*$/) { + die "Cannot parse line $_"; + } + + push @colors, [$1, $2, $3, $4]; +} + +close IN or die "close IN failed: $!\n"; + +@colors = sort { lc($a->[3]) cmp lc($b->[3]) } @colors; + +$offset = 0; + +$date = gmtime; + +print <[3]; + + if ($offset != 0) { + print qq(\n); + } + print qq( "$name\\0"); + + $color->[4] = $offset; + $offset += length($name) + 1; +} + +print ";\n\n"; + +print <[0]; + $green = $color->[1]; + $blue = $color->[2]; + $offset = $color->[4]; + + if ($i != 0) { + print ",\n"; + } + print " { $offset, $red, $green, $blue }"; + $i++; +} + +print "\n};\n"; diff --git a/src/img/img-xpm.c b/src/img/img-xpm.c new file mode 100644 index 00000000..45ca0f48 --- /dev/null +++ b/src/img/img-xpm.c @@ -0,0 +1,423 @@ +// SPDX-License-Identifier: LGPL-2.0-or-later +/* + * XPM image loader adapted from gdk-pixbuf + * + * Copyright (C) 1999 Mark Crichton + * Copyright (C) 1999 The Free Software Foundation + * + * Authors: Mark Crichton + * Federico Mena-Quintero + * + * Adapted for labwc by John Lindgren, 2024 + */ + +#include +#include +#include +#include +#include + +#include "buffer.h" +#include "common/buf.h" +#include "common/macros.h" +#include "common/mem.h" +#include "img/img-xpm.h" + +#include "xpm-color-table.h" + +enum buf_op { op_header, op_cmap, op_body }; + +struct xpm_color { + char *color_string; + uint32_t argb; +}; + +struct file_handle { + FILE *infile; + struct buf buf; +}; + +static inline uint32_t +make_argb(uint8_t a, uint8_t r, uint8_t g, uint8_t b) +{ + return ((uint32_t)a << 24) | ((uint32_t)r << 16) | ((uint32_t)g << 8) | b; +} + +static int +compare_xcolor_entries(const void *a, const void *b) +{ + return g_ascii_strcasecmp((const char *)a, + color_names + ((const struct xcolor_entry *)b)->name_offset); +} + +static bool +lookup_named_color(const char *name, uint32_t *argb) +{ + struct xcolor_entry *found = bsearch(name, xcolors, ARRAY_SIZE(xcolors), + sizeof(struct xcolor_entry), compare_xcolor_entries); + if (!found) { + return false; + } + + *argb = make_argb(0xFF, found->red, found->green, found->blue); + return true; +} + +static bool +parse_color(const char *spec, uint32_t *argb) +{ + if (spec[0] != '#') { + return lookup_named_color(spec, argb); + } + + int red, green, blue; + switch (strlen(spec + 1)) { + case 3: + if (sscanf(spec + 1, "%1x%1x%1x", &red, &green, &blue) != 3) { + return false; + } + *argb = make_argb(255, (red * 255) / 15, (green * 255) / 15, + (blue * 255) / 15); + return true; + case 6: + if (sscanf(spec + 1, "%2x%2x%2x", &red, &green, &blue) != 3) { + return false; + } + *argb = make_argb(255, red, green, blue); + return true; + case 9: + if (sscanf(spec + 1, "%3x%3x%3x", &red, &green, &blue) != 3) { + return false; + } + *argb = make_argb(255, (red * 255) / 4095, (green * 255) / 4095, + (blue * 255) / 4095); + return true; + case 12: + if (sscanf(spec + 1, "%4x%4x%4x", &red, &green, &blue) != 3) { + return false; + } + *argb = make_argb(255, (red * 255) / 65535, + (green * 255) / 65535, (blue * 255) / 65535); + return true; + default: + return false; + } +} + +static bool +xpm_seek_string(FILE *infile, const char *str) +{ + char instr[1024]; + + while (!feof(infile)) { + if (fscanf(infile, "%1023s", instr) < 0) { + return false; + } + if (strcmp(instr, str) == 0) { + return true; + } + } + + return false; +} + +static bool +xpm_seek_char(FILE *infile, char c) +{ + int b, oldb; + + while ((b = getc(infile)) != EOF) { + if (c != b && b == '/') { + b = getc(infile); + if (b == EOF) { + return false; + } else if (b == '*') { /* we have a comment */ + b = -1; + do { + oldb = b; + b = getc(infile); + if (b == EOF) { + return false; + } + } while (!(oldb == '*' && b == '/')); + } + } else if (c == b) { + return true; + } + } + + return false; +} + +static bool +xpm_read_string(FILE *infile, struct buf *buf) +{ + buf_clear(buf); + int c; + + do { + c = getc(infile); + if (c == EOF) { + return false; + } + } while (c != '"'); + + while ((c = getc(infile)) != EOF) { + if (c == '"') { + return true; + } + buf_add_char(buf, c); + } + + return false; +} + +static uint32_t +xpm_extract_color(const char *buffer) +{ + const char *p = buffer; + int new_key = 0; + int key = 0; + int current_key = 1; + char word[129], color[129], current_color[129]; + char *r; + + word[0] = '\0'; + color[0] = '\0'; + current_color[0] = '\0'; + while (true) { + /* skip whitespace */ + for (; *p != '\0' && g_ascii_isspace(*p); p++) { + /* nothing */ + } + /* copy word */ + for (r = word; *p != '\0' && !g_ascii_isspace(*p) + && r - word < (int)sizeof(word) - 1; + p++, r++) { + *r = *p; + } + *r = '\0'; + if (*word == '\0') { + if (color[0] == '\0') { /* incomplete colormap entry */ + return 0; + } else { /* end of entry, still store the last color */ + new_key = 1; + } + } else if (key > 0 && color[0] == '\0') { + /* next word must be a color name part */ + new_key = 0; + } else { + if (strcmp(word, "c") == 0) { + new_key = 5; + } else if (strcmp(word, "g") == 0) { + new_key = 4; + } else if (strcmp(word, "g4") == 0) { + new_key = 3; + } else if (strcmp(word, "m") == 0) { + new_key = 2; + } else if (strcmp(word, "s") == 0) { + new_key = 1; + } else { + new_key = 0; + } + } + if (new_key == 0) { /* word is a color name part */ + if (key == 0) { /* key expected */ + return 0; + } + /* accumulate color name */ + int len = strlen(color); + if (len && len < (int)sizeof(color) - 1) { + color[len++] = ' '; + } + g_strlcpy(color + len, word, sizeof(color) - len); + } else { /* word is a key */ + if (key > current_key) { + current_key = key; + g_strlcpy(current_color, color, sizeof(current_color)); + } + color[0] = '\0'; + key = new_key; + if (*p == '\0') { + break; + } + } + } + + uint32_t argb; + if (current_key > 1 && (g_ascii_strcasecmp(current_color, "None") != 0) + && parse_color(current_color, &argb)) { + return argb; + } else { + return 0; + } +} + +static const char * +file_buffer(enum buf_op op, struct file_handle *h) +{ + switch (op) { + case op_header: + if (!xpm_seek_string(h->infile, "XPM")) { + break; + } + if (!xpm_seek_char(h->infile, '{')) { + break; + } + /* Fall through to the next xpm_seek_char. */ + + case op_cmap: + xpm_seek_char(h->infile, '"'); + if (fseek(h->infile, -1, SEEK_CUR) != 0) { + return NULL; + } + /* Fall through to the xpm_read_string. */ + + case op_body: + if (!xpm_read_string(h->infile, &h->buf)) { + return NULL; + } + return h->buf.data; + + default: + g_assert_not_reached(); + } + + return NULL; +} + +/* This function does all the work. */ +static struct lab_data_buffer * +pixbuf_create_from_xpm(struct file_handle *handle) +{ + const char *buffer = file_buffer(op_header, handle); + if (!buffer) { + wlr_log(WLR_DEBUG, "No XPM header found"); + return NULL; + } + + int w, h, n_col, cpp, x_hot, y_hot; + int items = sscanf(buffer, "%d %d %d %d %d %d", &w, &h, &n_col, &cpp, + &x_hot, &y_hot); + + if (items != 4 && items != 6) { + wlr_log(WLR_DEBUG, "Invalid XPM header"); + return NULL; + } + + if (w <= 0) { + wlr_log(WLR_DEBUG, "XPM file has image width <= 0"); + return NULL; + } + if (h <= 0) { + wlr_log(WLR_DEBUG, "XPM file has image height <= 0"); + return NULL; + } + /* Limits (width, height, colors) modified for labwc */ + if (h > 1024 || w > 1024) { + wlr_log(WLR_DEBUG, "XPM file is larger than 1024x1024"); + return NULL; + } + if (cpp <= 0 || cpp >= 32) { + wlr_log(WLR_DEBUG, "XPM has invalid number of chars per pixel"); + return NULL; + } + if (n_col <= 0 || n_col > 1024) { + wlr_log(WLR_DEBUG, "XPM file has invalid number of colors"); + return NULL; + } + + /* The hash is used for fast lookups of color from chars */ + GHashTable *color_hash = g_hash_table_new(g_str_hash, g_str_equal); + + char *name_buf = xzalloc(n_col * (cpp + 1)); + struct xpm_color *colors = znew_n(struct xpm_color, n_col); + uint32_t *data = znew_n(uint32_t, w * h); + struct xpm_color *fallbackcolor = NULL; + char pixel_str[32]; /* cpp < 32 */ + + for (int cnt = 0; cnt < n_col; cnt++) { + buffer = file_buffer(op_cmap, handle); + if (!buffer) { + wlr_log(WLR_DEBUG, "Cannot read XPM colormap"); + goto out; + } + + struct xpm_color *color = &colors[cnt]; + color->color_string = &name_buf[cnt * (cpp + 1)]; + g_strlcpy(color->color_string, buffer, cpp + 1); + buffer += strlen(color->color_string); + + color->argb = xpm_extract_color(buffer); + + g_hash_table_insert(color_hash, color->color_string, color); + + if (cnt == 0) { + fallbackcolor = color; + } + } + + for (int ycnt = 0; ycnt < h; ycnt++) { + uint32_t *pixtmp = data + w * ycnt; + int wbytes = w * cpp; + + buffer = file_buffer(op_body, handle); + if (!buffer || (strlen(buffer) < (size_t)wbytes)) { + /* Advertised width doesn't match pixels */ + wlr_log(WLR_DEBUG, "Dimensions do not match data"); + goto out; + } + + for (int n = 0, xcnt = 0; n < wbytes; n += cpp, xcnt++) { + g_strlcpy(pixel_str, &buffer[n], cpp + 1); + + struct xpm_color *color = + g_hash_table_lookup(color_hash, pixel_str); + + /* Bad XPM...punt */ + if (!color) { + color = fallbackcolor; + } + + *pixtmp++ = color->argb; + } + } + + g_hash_table_destroy(color_hash); + free(colors); + free(name_buf); + + return buffer_create_wrap(data, w, h, 4 * w, true); + +out: + g_hash_table_destroy(color_hash); + free(colors); + free(name_buf); + free(data); + + return NULL; +} + +void +img_xpm_load(const char *filename, struct lab_data_buffer **buffer) +{ + if (*buffer) { + wlr_buffer_drop(&(*buffer)->base); + *buffer = NULL; + } + + struct file_handle h = {0}; + h.infile = fopen(filename, "rb"); + if (!h.infile) { + wlr_log(WLR_ERROR, "error opening '%s'", filename); + return; + } + + *buffer = pixbuf_create_from_xpm(&h); + if (!(*buffer)) { + wlr_log(WLR_ERROR, "error loading '%s'", filename); + } + + fclose(h.infile); + buf_reset(&h.buf); +} diff --git a/src/img/meson.build b/src/img/meson.build index 854898d0..4e31ac04 100644 --- a/src/img/meson.build +++ b/src/img/meson.build @@ -1,6 +1,7 @@ labwc_sources += files( 'img-png.c', 'img-xbm.c', + 'img-xpm.c' ) if have_rsvg diff --git a/src/img/rgb.txt b/src/img/rgb.txt new file mode 100644 index 00000000..70966437 --- /dev/null +++ b/src/img/rgb.txt @@ -0,0 +1,782 @@ +255 250 250 snow +248 248 255 ghost white +248 248 255 GhostWhite +245 245 245 white smoke +245 245 245 WhiteSmoke +220 220 220 gainsboro +255 250 240 floral white +255 250 240 FloralWhite +253 245 230 old lace +253 245 230 OldLace +250 240 230 linen +250 235 215 antique white +250 235 215 AntiqueWhite +255 239 213 papaya whip +255 239 213 PapayaWhip +255 235 205 blanched almond +255 235 205 BlanchedAlmond +255 228 196 bisque +255 218 185 peach puff +255 218 185 PeachPuff +255 222 173 navajo white +255 222 173 NavajoWhite +255 228 181 moccasin +255 248 220 cornsilk +255 255 240 ivory +255 250 205 lemon chiffon +255 250 205 LemonChiffon +255 245 238 seashell +240 255 240 honeydew +245 255 250 mint cream +245 255 250 MintCream +240 255 255 azure +240 248 255 alice blue +240 248 255 AliceBlue +230 230 250 lavender +255 240 245 lavender blush +255 240 245 LavenderBlush +255 228 225 misty rose +255 228 225 MistyRose +255 255 255 white + 0 0 0 black + 47 79 79 dark slate gray + 47 79 79 DarkSlateGray + 47 79 79 dark slate grey + 47 79 79 DarkSlateGrey +105 105 105 dim gray +105 105 105 DimGray +105 105 105 dim grey +105 105 105 DimGrey +112 128 144 slate gray +112 128 144 SlateGray +112 128 144 slate grey +112 128 144 SlateGrey +119 136 153 light slate gray +119 136 153 LightSlateGray +119 136 153 light slate grey +119 136 153 LightSlateGrey +190 190 190 gray +190 190 190 grey +190 190 190 x11 gray +190 190 190 X11Gray +190 190 190 x11 grey +190 190 190 X11Grey +128 128 128 web gray +128 128 128 WebGray +128 128 128 web grey +128 128 128 WebGrey +211 211 211 light grey +211 211 211 LightGrey +211 211 211 light gray +211 211 211 LightGray + 25 25 112 midnight blue + 25 25 112 MidnightBlue + 0 0 128 navy + 0 0 128 navy blue + 0 0 128 NavyBlue +100 149 237 cornflower blue +100 149 237 CornflowerBlue + 72 61 139 dark slate blue + 72 61 139 DarkSlateBlue +106 90 205 slate blue +106 90 205 SlateBlue +123 104 238 medium slate blue +123 104 238 MediumSlateBlue +132 112 255 light slate blue +132 112 255 LightSlateBlue + 0 0 205 medium blue + 0 0 205 MediumBlue + 65 105 225 royal blue + 65 105 225 RoyalBlue + 0 0 255 blue + 30 144 255 dodger blue + 30 144 255 DodgerBlue + 0 191 255 deep sky blue + 0 191 255 DeepSkyBlue +135 206 235 sky blue +135 206 235 SkyBlue +135 206 250 light sky blue +135 206 250 LightSkyBlue + 70 130 180 steel blue + 70 130 180 SteelBlue +176 196 222 light steel blue +176 196 222 LightSteelBlue +173 216 230 light blue +173 216 230 LightBlue +176 224 230 powder blue +176 224 230 PowderBlue +175 238 238 pale turquoise +175 238 238 PaleTurquoise + 0 206 209 dark turquoise + 0 206 209 DarkTurquoise + 72 209 204 medium turquoise + 72 209 204 MediumTurquoise + 64 224 208 turquoise + 0 255 255 cyan + 0 255 255 aqua +224 255 255 light cyan +224 255 255 LightCyan + 95 158 160 cadet blue + 95 158 160 CadetBlue +102 205 170 medium aquamarine +102 205 170 MediumAquamarine +127 255 212 aquamarine + 0 100 0 dark green + 0 100 0 DarkGreen + 85 107 47 dark olive green + 85 107 47 DarkOliveGreen +143 188 143 dark sea green +143 188 143 DarkSeaGreen + 46 139 87 sea green + 46 139 87 SeaGreen + 60 179 113 medium sea green + 60 179 113 MediumSeaGreen + 32 178 170 light sea green + 32 178 170 LightSeaGreen +152 251 152 pale green +152 251 152 PaleGreen + 0 255 127 spring green + 0 255 127 SpringGreen +124 252 0 lawn green +124 252 0 LawnGreen + 0 255 0 green + 0 255 0 lime + 0 255 0 x11 green + 0 255 0 X11Green + 0 128 0 web green + 0 128 0 WebGreen +127 255 0 chartreuse + 0 250 154 medium spring green + 0 250 154 MediumSpringGreen +173 255 47 green yellow +173 255 47 GreenYellow + 50 205 50 lime green + 50 205 50 LimeGreen +154 205 50 yellow green +154 205 50 YellowGreen + 34 139 34 forest green + 34 139 34 ForestGreen +107 142 35 olive drab +107 142 35 OliveDrab +189 183 107 dark khaki +189 183 107 DarkKhaki +240 230 140 khaki +238 232 170 pale goldenrod +238 232 170 PaleGoldenrod +250 250 210 light goldenrod yellow +250 250 210 LightGoldenrodYellow +255 255 224 light yellow +255 255 224 LightYellow +255 255 0 yellow +255 215 0 gold +238 221 130 light goldenrod +238 221 130 LightGoldenrod +218 165 32 goldenrod +184 134 11 dark goldenrod +184 134 11 DarkGoldenrod +188 143 143 rosy brown +188 143 143 RosyBrown +205 92 92 indian red +205 92 92 IndianRed +139 69 19 saddle brown +139 69 19 SaddleBrown +160 82 45 sienna +205 133 63 peru +222 184 135 burlywood +245 245 220 beige +245 222 179 wheat +244 164 96 sandy brown +244 164 96 SandyBrown +210 180 140 tan +210 105 30 chocolate +178 34 34 firebrick +165 42 42 brown +233 150 122 dark salmon +233 150 122 DarkSalmon +250 128 114 salmon +255 160 122 light salmon +255 160 122 LightSalmon +255 165 0 orange +255 140 0 dark orange +255 140 0 DarkOrange +255 127 80 coral +240 128 128 light coral +240 128 128 LightCoral +255 99 71 tomato +255 69 0 orange red +255 69 0 OrangeRed +255 0 0 red +255 105 180 hot pink +255 105 180 HotPink +255 20 147 deep pink +255 20 147 DeepPink +255 192 203 pink +255 182 193 light pink +255 182 193 LightPink +219 112 147 pale violet red +219 112 147 PaleVioletRed +176 48 96 maroon +176 48 96 x11 maroon +176 48 96 X11Maroon +128 0 0 web maroon +128 0 0 WebMaroon +199 21 133 medium violet red +199 21 133 MediumVioletRed +208 32 144 violet red +208 32 144 VioletRed +255 0 255 magenta +255 0 255 fuchsia +238 130 238 violet +221 160 221 plum +218 112 214 orchid +186 85 211 medium orchid +186 85 211 MediumOrchid +153 50 204 dark orchid +153 50 204 DarkOrchid +148 0 211 dark violet +148 0 211 DarkViolet +138 43 226 blue violet +138 43 226 BlueViolet +160 32 240 purple +160 32 240 x11 purple +160 32 240 X11Purple +128 0 128 web purple +128 0 128 WebPurple +147 112 219 medium purple +147 112 219 MediumPurple +216 191 216 thistle +255 250 250 snow1 +238 233 233 snow2 +205 201 201 snow3 +139 137 137 snow4 +255 245 238 seashell1 +238 229 222 seashell2 +205 197 191 seashell3 +139 134 130 seashell4 +255 239 219 AntiqueWhite1 +238 223 204 AntiqueWhite2 +205 192 176 AntiqueWhite3 +139 131 120 AntiqueWhite4 +255 228 196 bisque1 +238 213 183 bisque2 +205 183 158 bisque3 +139 125 107 bisque4 +255 218 185 PeachPuff1 +238 203 173 PeachPuff2 +205 175 149 PeachPuff3 +139 119 101 PeachPuff4 +255 222 173 NavajoWhite1 +238 207 161 NavajoWhite2 +205 179 139 NavajoWhite3 +139 121 94 NavajoWhite4 +255 250 205 LemonChiffon1 +238 233 191 LemonChiffon2 +205 201 165 LemonChiffon3 +139 137 112 LemonChiffon4 +255 248 220 cornsilk1 +238 232 205 cornsilk2 +205 200 177 cornsilk3 +139 136 120 cornsilk4 +255 255 240 ivory1 +238 238 224 ivory2 +205 205 193 ivory3 +139 139 131 ivory4 +240 255 240 honeydew1 +224 238 224 honeydew2 +193 205 193 honeydew3 +131 139 131 honeydew4 +255 240 245 LavenderBlush1 +238 224 229 LavenderBlush2 +205 193 197 LavenderBlush3 +139 131 134 LavenderBlush4 +255 228 225 MistyRose1 +238 213 210 MistyRose2 +205 183 181 MistyRose3 +139 125 123 MistyRose4 +240 255 255 azure1 +224 238 238 azure2 +193 205 205 azure3 +131 139 139 azure4 +131 111 255 SlateBlue1 +122 103 238 SlateBlue2 +105 89 205 SlateBlue3 + 71 60 139 SlateBlue4 + 72 118 255 RoyalBlue1 + 67 110 238 RoyalBlue2 + 58 95 205 RoyalBlue3 + 39 64 139 RoyalBlue4 + 0 0 255 blue1 + 0 0 238 blue2 + 0 0 205 blue3 + 0 0 139 blue4 + 30 144 255 DodgerBlue1 + 28 134 238 DodgerBlue2 + 24 116 205 DodgerBlue3 + 16 78 139 DodgerBlue4 + 99 184 255 SteelBlue1 + 92 172 238 SteelBlue2 + 79 148 205 SteelBlue3 + 54 100 139 SteelBlue4 + 0 191 255 DeepSkyBlue1 + 0 178 238 DeepSkyBlue2 + 0 154 205 DeepSkyBlue3 + 0 104 139 DeepSkyBlue4 +135 206 255 SkyBlue1 +126 192 238 SkyBlue2 +108 166 205 SkyBlue3 + 74 112 139 SkyBlue4 +176 226 255 LightSkyBlue1 +164 211 238 LightSkyBlue2 +141 182 205 LightSkyBlue3 + 96 123 139 LightSkyBlue4 +198 226 255 SlateGray1 +185 211 238 SlateGray2 +159 182 205 SlateGray3 +108 123 139 SlateGray4 +202 225 255 LightSteelBlue1 +188 210 238 LightSteelBlue2 +162 181 205 LightSteelBlue3 +110 123 139 LightSteelBlue4 +191 239 255 LightBlue1 +178 223 238 LightBlue2 +154 192 205 LightBlue3 +104 131 139 LightBlue4 +224 255 255 LightCyan1 +209 238 238 LightCyan2 +180 205 205 LightCyan3 +122 139 139 LightCyan4 +187 255 255 PaleTurquoise1 +174 238 238 PaleTurquoise2 +150 205 205 PaleTurquoise3 +102 139 139 PaleTurquoise4 +152 245 255 CadetBlue1 +142 229 238 CadetBlue2 +122 197 205 CadetBlue3 + 83 134 139 CadetBlue4 + 0 245 255 turquoise1 + 0 229 238 turquoise2 + 0 197 205 turquoise3 + 0 134 139 turquoise4 + 0 255 255 cyan1 + 0 238 238 cyan2 + 0 205 205 cyan3 + 0 139 139 cyan4 +151 255 255 DarkSlateGray1 +141 238 238 DarkSlateGray2 +121 205 205 DarkSlateGray3 + 82 139 139 DarkSlateGray4 +127 255 212 aquamarine1 +118 238 198 aquamarine2 +102 205 170 aquamarine3 + 69 139 116 aquamarine4 +193 255 193 DarkSeaGreen1 +180 238 180 DarkSeaGreen2 +155 205 155 DarkSeaGreen3 +105 139 105 DarkSeaGreen4 + 84 255 159 SeaGreen1 + 78 238 148 SeaGreen2 + 67 205 128 SeaGreen3 + 46 139 87 SeaGreen4 +154 255 154 PaleGreen1 +144 238 144 PaleGreen2 +124 205 124 PaleGreen3 + 84 139 84 PaleGreen4 + 0 255 127 SpringGreen1 + 0 238 118 SpringGreen2 + 0 205 102 SpringGreen3 + 0 139 69 SpringGreen4 + 0 255 0 green1 + 0 238 0 green2 + 0 205 0 green3 + 0 139 0 green4 +127 255 0 chartreuse1 +118 238 0 chartreuse2 +102 205 0 chartreuse3 + 69 139 0 chartreuse4 +192 255 62 OliveDrab1 +179 238 58 OliveDrab2 +154 205 50 OliveDrab3 +105 139 34 OliveDrab4 +202 255 112 DarkOliveGreen1 +188 238 104 DarkOliveGreen2 +162 205 90 DarkOliveGreen3 +110 139 61 DarkOliveGreen4 +255 246 143 khaki1 +238 230 133 khaki2 +205 198 115 khaki3 +139 134 78 khaki4 +255 236 139 LightGoldenrod1 +238 220 130 LightGoldenrod2 +205 190 112 LightGoldenrod3 +139 129 76 LightGoldenrod4 +255 255 224 LightYellow1 +238 238 209 LightYellow2 +205 205 180 LightYellow3 +139 139 122 LightYellow4 +255 255 0 yellow1 +238 238 0 yellow2 +205 205 0 yellow3 +139 139 0 yellow4 +255 215 0 gold1 +238 201 0 gold2 +205 173 0 gold3 +139 117 0 gold4 +255 193 37 goldenrod1 +238 180 34 goldenrod2 +205 155 29 goldenrod3 +139 105 20 goldenrod4 +255 185 15 DarkGoldenrod1 +238 173 14 DarkGoldenrod2 +205 149 12 DarkGoldenrod3 +139 101 8 DarkGoldenrod4 +255 193 193 RosyBrown1 +238 180 180 RosyBrown2 +205 155 155 RosyBrown3 +139 105 105 RosyBrown4 +255 106 106 IndianRed1 +238 99 99 IndianRed2 +205 85 85 IndianRed3 +139 58 58 IndianRed4 +255 130 71 sienna1 +238 121 66 sienna2 +205 104 57 sienna3 +139 71 38 sienna4 +255 211 155 burlywood1 +238 197 145 burlywood2 +205 170 125 burlywood3 +139 115 85 burlywood4 +255 231 186 wheat1 +238 216 174 wheat2 +205 186 150 wheat3 +139 126 102 wheat4 +255 165 79 tan1 +238 154 73 tan2 +205 133 63 tan3 +139 90 43 tan4 +255 127 36 chocolate1 +238 118 33 chocolate2 +205 102 29 chocolate3 +139 69 19 chocolate4 +255 48 48 firebrick1 +238 44 44 firebrick2 +205 38 38 firebrick3 +139 26 26 firebrick4 +255 64 64 brown1 +238 59 59 brown2 +205 51 51 brown3 +139 35 35 brown4 +255 140 105 salmon1 +238 130 98 salmon2 +205 112 84 salmon3 +139 76 57 salmon4 +255 160 122 LightSalmon1 +238 149 114 LightSalmon2 +205 129 98 LightSalmon3 +139 87 66 LightSalmon4 +255 165 0 orange1 +238 154 0 orange2 +205 133 0 orange3 +139 90 0 orange4 +255 127 0 DarkOrange1 +238 118 0 DarkOrange2 +205 102 0 DarkOrange3 +139 69 0 DarkOrange4 +255 114 86 coral1 +238 106 80 coral2 +205 91 69 coral3 +139 62 47 coral4 +255 99 71 tomato1 +238 92 66 tomato2 +205 79 57 tomato3 +139 54 38 tomato4 +255 69 0 OrangeRed1 +238 64 0 OrangeRed2 +205 55 0 OrangeRed3 +139 37 0 OrangeRed4 +255 0 0 red1 +238 0 0 red2 +205 0 0 red3 +139 0 0 red4 +255 20 147 DeepPink1 +238 18 137 DeepPink2 +205 16 118 DeepPink3 +139 10 80 DeepPink4 +255 110 180 HotPink1 +238 106 167 HotPink2 +205 96 144 HotPink3 +139 58 98 HotPink4 +255 181 197 pink1 +238 169 184 pink2 +205 145 158 pink3 +139 99 108 pink4 +255 174 185 LightPink1 +238 162 173 LightPink2 +205 140 149 LightPink3 +139 95 101 LightPink4 +255 130 171 PaleVioletRed1 +238 121 159 PaleVioletRed2 +205 104 137 PaleVioletRed3 +139 71 93 PaleVioletRed4 +255 52 179 maroon1 +238 48 167 maroon2 +205 41 144 maroon3 +139 28 98 maroon4 +255 62 150 VioletRed1 +238 58 140 VioletRed2 +205 50 120 VioletRed3 +139 34 82 VioletRed4 +255 0 255 magenta1 +238 0 238 magenta2 +205 0 205 magenta3 +139 0 139 magenta4 +255 131 250 orchid1 +238 122 233 orchid2 +205 105 201 orchid3 +139 71 137 orchid4 +255 187 255 plum1 +238 174 238 plum2 +205 150 205 plum3 +139 102 139 plum4 +224 102 255 MediumOrchid1 +209 95 238 MediumOrchid2 +180 82 205 MediumOrchid3 +122 55 139 MediumOrchid4 +191 62 255 DarkOrchid1 +178 58 238 DarkOrchid2 +154 50 205 DarkOrchid3 +104 34 139 DarkOrchid4 +155 48 255 purple1 +145 44 238 purple2 +125 38 205 purple3 + 85 26 139 purple4 +171 130 255 MediumPurple1 +159 121 238 MediumPurple2 +137 104 205 MediumPurple3 + 93 71 139 MediumPurple4 +255 225 255 thistle1 +238 210 238 thistle2 +205 181 205 thistle3 +139 123 139 thistle4 + 0 0 0 gray0 + 0 0 0 grey0 + 3 3 3 gray1 + 3 3 3 grey1 + 5 5 5 gray2 + 5 5 5 grey2 + 8 8 8 gray3 + 8 8 8 grey3 + 10 10 10 gray4 + 10 10 10 grey4 + 13 13 13 gray5 + 13 13 13 grey5 + 15 15 15 gray6 + 15 15 15 grey6 + 18 18 18 gray7 + 18 18 18 grey7 + 20 20 20 gray8 + 20 20 20 grey8 + 23 23 23 gray9 + 23 23 23 grey9 + 26 26 26 gray10 + 26 26 26 grey10 + 28 28 28 gray11 + 28 28 28 grey11 + 31 31 31 gray12 + 31 31 31 grey12 + 33 33 33 gray13 + 33 33 33 grey13 + 36 36 36 gray14 + 36 36 36 grey14 + 38 38 38 gray15 + 38 38 38 grey15 + 41 41 41 gray16 + 41 41 41 grey16 + 43 43 43 gray17 + 43 43 43 grey17 + 46 46 46 gray18 + 46 46 46 grey18 + 48 48 48 gray19 + 48 48 48 grey19 + 51 51 51 gray20 + 51 51 51 grey20 + 54 54 54 gray21 + 54 54 54 grey21 + 56 56 56 gray22 + 56 56 56 grey22 + 59 59 59 gray23 + 59 59 59 grey23 + 61 61 61 gray24 + 61 61 61 grey24 + 64 64 64 gray25 + 64 64 64 grey25 + 66 66 66 gray26 + 66 66 66 grey26 + 69 69 69 gray27 + 69 69 69 grey27 + 71 71 71 gray28 + 71 71 71 grey28 + 74 74 74 gray29 + 74 74 74 grey29 + 77 77 77 gray30 + 77 77 77 grey30 + 79 79 79 gray31 + 79 79 79 grey31 + 82 82 82 gray32 + 82 82 82 grey32 + 84 84 84 gray33 + 84 84 84 grey33 + 87 87 87 gray34 + 87 87 87 grey34 + 89 89 89 gray35 + 89 89 89 grey35 + 92 92 92 gray36 + 92 92 92 grey36 + 94 94 94 gray37 + 94 94 94 grey37 + 97 97 97 gray38 + 97 97 97 grey38 + 99 99 99 gray39 + 99 99 99 grey39 +102 102 102 gray40 +102 102 102 grey40 +105 105 105 gray41 +105 105 105 grey41 +107 107 107 gray42 +107 107 107 grey42 +110 110 110 gray43 +110 110 110 grey43 +112 112 112 gray44 +112 112 112 grey44 +115 115 115 gray45 +115 115 115 grey45 +117 117 117 gray46 +117 117 117 grey46 +120 120 120 gray47 +120 120 120 grey47 +122 122 122 gray48 +122 122 122 grey48 +125 125 125 gray49 +125 125 125 grey49 +127 127 127 gray50 +127 127 127 grey50 +130 130 130 gray51 +130 130 130 grey51 +133 133 133 gray52 +133 133 133 grey52 +135 135 135 gray53 +135 135 135 grey53 +138 138 138 gray54 +138 138 138 grey54 +140 140 140 gray55 +140 140 140 grey55 +143 143 143 gray56 +143 143 143 grey56 +145 145 145 gray57 +145 145 145 grey57 +148 148 148 gray58 +148 148 148 grey58 +150 150 150 gray59 +150 150 150 grey59 +153 153 153 gray60 +153 153 153 grey60 +156 156 156 gray61 +156 156 156 grey61 +158 158 158 gray62 +158 158 158 grey62 +161 161 161 gray63 +161 161 161 grey63 +163 163 163 gray64 +163 163 163 grey64 +166 166 166 gray65 +166 166 166 grey65 +168 168 168 gray66 +168 168 168 grey66 +171 171 171 gray67 +171 171 171 grey67 +173 173 173 gray68 +173 173 173 grey68 +176 176 176 gray69 +176 176 176 grey69 +179 179 179 gray70 +179 179 179 grey70 +181 181 181 gray71 +181 181 181 grey71 +184 184 184 gray72 +184 184 184 grey72 +186 186 186 gray73 +186 186 186 grey73 +189 189 189 gray74 +189 189 189 grey74 +191 191 191 gray75 +191 191 191 grey75 +194 194 194 gray76 +194 194 194 grey76 +196 196 196 gray77 +196 196 196 grey77 +199 199 199 gray78 +199 199 199 grey78 +201 201 201 gray79 +201 201 201 grey79 +204 204 204 gray80 +204 204 204 grey80 +207 207 207 gray81 +207 207 207 grey81 +209 209 209 gray82 +209 209 209 grey82 +212 212 212 gray83 +212 212 212 grey83 +214 214 214 gray84 +214 214 214 grey84 +217 217 217 gray85 +217 217 217 grey85 +219 219 219 gray86 +219 219 219 grey86 +222 222 222 gray87 +222 222 222 grey87 +224 224 224 gray88 +224 224 224 grey88 +227 227 227 gray89 +227 227 227 grey89 +229 229 229 gray90 +229 229 229 grey90 +232 232 232 gray91 +232 232 232 grey91 +235 235 235 gray92 +235 235 235 grey92 +237 237 237 gray93 +237 237 237 grey93 +240 240 240 gray94 +240 240 240 grey94 +242 242 242 gray95 +242 242 242 grey95 +245 245 245 gray96 +245 245 245 grey96 +247 247 247 gray97 +247 247 247 grey97 +250 250 250 gray98 +250 250 250 grey98 +252 252 252 gray99 +252 252 252 grey99 +255 255 255 gray100 +255 255 255 grey100 +169 169 169 dark grey +169 169 169 DarkGrey +169 169 169 dark gray +169 169 169 DarkGray + 0 0 139 dark blue + 0 0 139 DarkBlue + 0 139 139 dark cyan + 0 139 139 DarkCyan +139 0 139 dark magenta +139 0 139 DarkMagenta +139 0 0 dark red +139 0 0 DarkRed +144 238 144 light green +144 238 144 LightGreen +220 20 60 crimson + 75 0 130 indigo +128 128 0 olive +102 51 153 rebecca purple +102 51 153 RebeccaPurple +192 192 192 silver + 0 128 128 teal diff --git a/src/img/xpm-color-table.h b/src/img/xpm-color-table.h new file mode 100644 index 00000000..cf3bfc1d --- /dev/null +++ b/src/img/xpm-color-table.h @@ -0,0 +1,1582 @@ +/* SPDX-License-Identifier: LGPL-2.0-or-later */ +/* xpm-color-table.h: Generated by gen-color-table.pl from rgb.txt + * + * Date: Mon Sep 30 09:04:01 2024 + * + * Do not edit. + */ +static const char color_names[] = + "alice blue\0" + "AliceBlue\0" + "antique white\0" + "AntiqueWhite\0" + "AntiqueWhite1\0" + "AntiqueWhite2\0" + "AntiqueWhite3\0" + "AntiqueWhite4\0" + "aqua\0" + "aquamarine\0" + "aquamarine1\0" + "aquamarine2\0" + "aquamarine3\0" + "aquamarine4\0" + "azure\0" + "azure1\0" + "azure2\0" + "azure3\0" + "azure4\0" + "beige\0" + "bisque\0" + "bisque1\0" + "bisque2\0" + "bisque3\0" + "bisque4\0" + "black\0" + "blanched almond\0" + "BlanchedAlmond\0" + "blue\0" + "blue violet\0" + "blue1\0" + "blue2\0" + "blue3\0" + "blue4\0" + "BlueViolet\0" + "brown\0" + "brown1\0" + "brown2\0" + "brown3\0" + "brown4\0" + "burlywood\0" + "burlywood1\0" + "burlywood2\0" + "burlywood3\0" + "burlywood4\0" + "cadet blue\0" + "CadetBlue\0" + "CadetBlue1\0" + "CadetBlue2\0" + "CadetBlue3\0" + "CadetBlue4\0" + "chartreuse\0" + "chartreuse1\0" + "chartreuse2\0" + "chartreuse3\0" + "chartreuse4\0" + "chocolate\0" + "chocolate1\0" + "chocolate2\0" + "chocolate3\0" + "chocolate4\0" + "coral\0" + "coral1\0" + "coral2\0" + "coral3\0" + "coral4\0" + "cornflower blue\0" + "CornflowerBlue\0" + "cornsilk\0" + "cornsilk1\0" + "cornsilk2\0" + "cornsilk3\0" + "cornsilk4\0" + "crimson\0" + "cyan\0" + "cyan1\0" + "cyan2\0" + "cyan3\0" + "cyan4\0" + "dark blue\0" + "dark cyan\0" + "dark goldenrod\0" + "dark gray\0" + "dark green\0" + "dark grey\0" + "dark khaki\0" + "dark magenta\0" + "dark olive green\0" + "dark orange\0" + "dark orchid\0" + "dark red\0" + "dark salmon\0" + "dark sea green\0" + "dark slate blue\0" + "dark slate gray\0" + "dark slate grey\0" + "dark turquoise\0" + "dark violet\0" + "DarkBlue\0" + "DarkCyan\0" + "DarkGoldenrod\0" + "DarkGoldenrod1\0" + "DarkGoldenrod2\0" + "DarkGoldenrod3\0" + "DarkGoldenrod4\0" + "DarkGray\0" + "DarkGreen\0" + "DarkGrey\0" + "DarkKhaki\0" + "DarkMagenta\0" + "DarkOliveGreen\0" + "DarkOliveGreen1\0" + "DarkOliveGreen2\0" + "DarkOliveGreen3\0" + "DarkOliveGreen4\0" + "DarkOrange\0" + "DarkOrange1\0" + "DarkOrange2\0" + "DarkOrange3\0" + "DarkOrange4\0" + "DarkOrchid\0" + "DarkOrchid1\0" + "DarkOrchid2\0" + "DarkOrchid3\0" + "DarkOrchid4\0" + "DarkRed\0" + "DarkSalmon\0" + "DarkSeaGreen\0" + "DarkSeaGreen1\0" + "DarkSeaGreen2\0" + "DarkSeaGreen3\0" + "DarkSeaGreen4\0" + "DarkSlateBlue\0" + "DarkSlateGray\0" + "DarkSlateGray1\0" + "DarkSlateGray2\0" + "DarkSlateGray3\0" + "DarkSlateGray4\0" + "DarkSlateGrey\0" + "DarkTurquoise\0" + "DarkViolet\0" + "deep pink\0" + "deep sky blue\0" + "DeepPink\0" + "DeepPink1\0" + "DeepPink2\0" + "DeepPink3\0" + "DeepPink4\0" + "DeepSkyBlue\0" + "DeepSkyBlue1\0" + "DeepSkyBlue2\0" + "DeepSkyBlue3\0" + "DeepSkyBlue4\0" + "dim gray\0" + "dim grey\0" + "DimGray\0" + "DimGrey\0" + "dodger blue\0" + "DodgerBlue\0" + "DodgerBlue1\0" + "DodgerBlue2\0" + "DodgerBlue3\0" + "DodgerBlue4\0" + "firebrick\0" + "firebrick1\0" + "firebrick2\0" + "firebrick3\0" + "firebrick4\0" + "floral white\0" + "FloralWhite\0" + "forest green\0" + "ForestGreen\0" + "fuchsia\0" + "gainsboro\0" + "ghost white\0" + "GhostWhite\0" + "gold\0" + "gold1\0" + "gold2\0" + "gold3\0" + "gold4\0" + "goldenrod\0" + "goldenrod1\0" + "goldenrod2\0" + "goldenrod3\0" + "goldenrod4\0" + "gray\0" + "gray0\0" + "gray1\0" + "gray10\0" + "gray100\0" + "gray11\0" + "gray12\0" + "gray13\0" + "gray14\0" + "gray15\0" + "gray16\0" + "gray17\0" + "gray18\0" + "gray19\0" + "gray2\0" + "gray20\0" + "gray21\0" + "gray22\0" + "gray23\0" + "gray24\0" + "gray25\0" + "gray26\0" + "gray27\0" + "gray28\0" + "gray29\0" + "gray3\0" + "gray30\0" + "gray31\0" + "gray32\0" + "gray33\0" + "gray34\0" + "gray35\0" + "gray36\0" + "gray37\0" + "gray38\0" + "gray39\0" + "gray4\0" + "gray40\0" + "gray41\0" + "gray42\0" + "gray43\0" + "gray44\0" + "gray45\0" + "gray46\0" + "gray47\0" + "gray48\0" + "gray49\0" + "gray5\0" + "gray50\0" + "gray51\0" + "gray52\0" + "gray53\0" + "gray54\0" + "gray55\0" + "gray56\0" + "gray57\0" + "gray58\0" + "gray59\0" + "gray6\0" + "gray60\0" + "gray61\0" + "gray62\0" + "gray63\0" + "gray64\0" + "gray65\0" + "gray66\0" + "gray67\0" + "gray68\0" + "gray69\0" + "gray7\0" + "gray70\0" + "gray71\0" + "gray72\0" + "gray73\0" + "gray74\0" + "gray75\0" + "gray76\0" + "gray77\0" + "gray78\0" + "gray79\0" + "gray8\0" + "gray80\0" + "gray81\0" + "gray82\0" + "gray83\0" + "gray84\0" + "gray85\0" + "gray86\0" + "gray87\0" + "gray88\0" + "gray89\0" + "gray9\0" + "gray90\0" + "gray91\0" + "gray92\0" + "gray93\0" + "gray94\0" + "gray95\0" + "gray96\0" + "gray97\0" + "gray98\0" + "gray99\0" + "green\0" + "green yellow\0" + "green1\0" + "green2\0" + "green3\0" + "green4\0" + "GreenYellow\0" + "grey\0" + "grey0\0" + "grey1\0" + "grey10\0" + "grey100\0" + "grey11\0" + "grey12\0" + "grey13\0" + "grey14\0" + "grey15\0" + "grey16\0" + "grey17\0" + "grey18\0" + "grey19\0" + "grey2\0" + "grey20\0" + "grey21\0" + "grey22\0" + "grey23\0" + "grey24\0" + "grey25\0" + "grey26\0" + "grey27\0" + "grey28\0" + "grey29\0" + "grey3\0" + "grey30\0" + "grey31\0" + "grey32\0" + "grey33\0" + "grey34\0" + "grey35\0" + "grey36\0" + "grey37\0" + "grey38\0" + "grey39\0" + "grey4\0" + "grey40\0" + "grey41\0" + "grey42\0" + "grey43\0" + "grey44\0" + "grey45\0" + "grey46\0" + "grey47\0" + "grey48\0" + "grey49\0" + "grey5\0" + "grey50\0" + "grey51\0" + "grey52\0" + "grey53\0" + "grey54\0" + "grey55\0" + "grey56\0" + "grey57\0" + "grey58\0" + "grey59\0" + "grey6\0" + "grey60\0" + "grey61\0" + "grey62\0" + "grey63\0" + "grey64\0" + "grey65\0" + "grey66\0" + "grey67\0" + "grey68\0" + "grey69\0" + "grey7\0" + "grey70\0" + "grey71\0" + "grey72\0" + "grey73\0" + "grey74\0" + "grey75\0" + "grey76\0" + "grey77\0" + "grey78\0" + "grey79\0" + "grey8\0" + "grey80\0" + "grey81\0" + "grey82\0" + "grey83\0" + "grey84\0" + "grey85\0" + "grey86\0" + "grey87\0" + "grey88\0" + "grey89\0" + "grey9\0" + "grey90\0" + "grey91\0" + "grey92\0" + "grey93\0" + "grey94\0" + "grey95\0" + "grey96\0" + "grey97\0" + "grey98\0" + "grey99\0" + "honeydew\0" + "honeydew1\0" + "honeydew2\0" + "honeydew3\0" + "honeydew4\0" + "hot pink\0" + "HotPink\0" + "HotPink1\0" + "HotPink2\0" + "HotPink3\0" + "HotPink4\0" + "indian red\0" + "IndianRed\0" + "IndianRed1\0" + "IndianRed2\0" + "IndianRed3\0" + "IndianRed4\0" + "indigo\0" + "ivory\0" + "ivory1\0" + "ivory2\0" + "ivory3\0" + "ivory4\0" + "khaki\0" + "khaki1\0" + "khaki2\0" + "khaki3\0" + "khaki4\0" + "lavender\0" + "lavender blush\0" + "LavenderBlush\0" + "LavenderBlush1\0" + "LavenderBlush2\0" + "LavenderBlush3\0" + "LavenderBlush4\0" + "lawn green\0" + "LawnGreen\0" + "lemon chiffon\0" + "LemonChiffon\0" + "LemonChiffon1\0" + "LemonChiffon2\0" + "LemonChiffon3\0" + "LemonChiffon4\0" + "light blue\0" + "light coral\0" + "light cyan\0" + "light goldenrod\0" + "light goldenrod yellow\0" + "light gray\0" + "light green\0" + "light grey\0" + "light pink\0" + "light salmon\0" + "light sea green\0" + "light sky blue\0" + "light slate blue\0" + "light slate gray\0" + "light slate grey\0" + "light steel blue\0" + "light yellow\0" + "LightBlue\0" + "LightBlue1\0" + "LightBlue2\0" + "LightBlue3\0" + "LightBlue4\0" + "LightCoral\0" + "LightCyan\0" + "LightCyan1\0" + "LightCyan2\0" + "LightCyan3\0" + "LightCyan4\0" + "LightGoldenrod\0" + "LightGoldenrod1\0" + "LightGoldenrod2\0" + "LightGoldenrod3\0" + "LightGoldenrod4\0" + "LightGoldenrodYellow\0" + "LightGray\0" + "LightGreen\0" + "LightGrey\0" + "LightPink\0" + "LightPink1\0" + "LightPink2\0" + "LightPink3\0" + "LightPink4\0" + "LightSalmon\0" + "LightSalmon1\0" + "LightSalmon2\0" + "LightSalmon3\0" + "LightSalmon4\0" + "LightSeaGreen\0" + "LightSkyBlue\0" + "LightSkyBlue1\0" + "LightSkyBlue2\0" + "LightSkyBlue3\0" + "LightSkyBlue4\0" + "LightSlateBlue\0" + "LightSlateGray\0" + "LightSlateGrey\0" + "LightSteelBlue\0" + "LightSteelBlue1\0" + "LightSteelBlue2\0" + "LightSteelBlue3\0" + "LightSteelBlue4\0" + "LightYellow\0" + "LightYellow1\0" + "LightYellow2\0" + "LightYellow3\0" + "LightYellow4\0" + "lime\0" + "lime green\0" + "LimeGreen\0" + "linen\0" + "magenta\0" + "magenta1\0" + "magenta2\0" + "magenta3\0" + "magenta4\0" + "maroon\0" + "maroon1\0" + "maroon2\0" + "maroon3\0" + "maroon4\0" + "medium aquamarine\0" + "medium blue\0" + "medium orchid\0" + "medium purple\0" + "medium sea green\0" + "medium slate blue\0" + "medium spring green\0" + "medium turquoise\0" + "medium violet red\0" + "MediumAquamarine\0" + "MediumBlue\0" + "MediumOrchid\0" + "MediumOrchid1\0" + "MediumOrchid2\0" + "MediumOrchid3\0" + "MediumOrchid4\0" + "MediumPurple\0" + "MediumPurple1\0" + "MediumPurple2\0" + "MediumPurple3\0" + "MediumPurple4\0" + "MediumSeaGreen\0" + "MediumSlateBlue\0" + "MediumSpringGreen\0" + "MediumTurquoise\0" + "MediumVioletRed\0" + "midnight blue\0" + "MidnightBlue\0" + "mint cream\0" + "MintCream\0" + "misty rose\0" + "MistyRose\0" + "MistyRose1\0" + "MistyRose2\0" + "MistyRose3\0" + "MistyRose4\0" + "moccasin\0" + "navajo white\0" + "NavajoWhite\0" + "NavajoWhite1\0" + "NavajoWhite2\0" + "NavajoWhite3\0" + "NavajoWhite4\0" + "navy\0" + "navy blue\0" + "NavyBlue\0" + "old lace\0" + "OldLace\0" + "olive\0" + "olive drab\0" + "OliveDrab\0" + "OliveDrab1\0" + "OliveDrab2\0" + "OliveDrab3\0" + "OliveDrab4\0" + "orange\0" + "orange red\0" + "orange1\0" + "orange2\0" + "orange3\0" + "orange4\0" + "OrangeRed\0" + "OrangeRed1\0" + "OrangeRed2\0" + "OrangeRed3\0" + "OrangeRed4\0" + "orchid\0" + "orchid1\0" + "orchid2\0" + "orchid3\0" + "orchid4\0" + "pale goldenrod\0" + "pale green\0" + "pale turquoise\0" + "pale violet red\0" + "PaleGoldenrod\0" + "PaleGreen\0" + "PaleGreen1\0" + "PaleGreen2\0" + "PaleGreen3\0" + "PaleGreen4\0" + "PaleTurquoise\0" + "PaleTurquoise1\0" + "PaleTurquoise2\0" + "PaleTurquoise3\0" + "PaleTurquoise4\0" + "PaleVioletRed\0" + "PaleVioletRed1\0" + "PaleVioletRed2\0" + "PaleVioletRed3\0" + "PaleVioletRed4\0" + "papaya whip\0" + "PapayaWhip\0" + "peach puff\0" + "PeachPuff\0" + "PeachPuff1\0" + "PeachPuff2\0" + "PeachPuff3\0" + "PeachPuff4\0" + "peru\0" + "pink\0" + "pink1\0" + "pink2\0" + "pink3\0" + "pink4\0" + "plum\0" + "plum1\0" + "plum2\0" + "plum3\0" + "plum4\0" + "powder blue\0" + "PowderBlue\0" + "purple\0" + "purple1\0" + "purple2\0" + "purple3\0" + "purple4\0" + "rebecca purple\0" + "RebeccaPurple\0" + "red\0" + "red1\0" + "red2\0" + "red3\0" + "red4\0" + "rosy brown\0" + "RosyBrown\0" + "RosyBrown1\0" + "RosyBrown2\0" + "RosyBrown3\0" + "RosyBrown4\0" + "royal blue\0" + "RoyalBlue\0" + "RoyalBlue1\0" + "RoyalBlue2\0" + "RoyalBlue3\0" + "RoyalBlue4\0" + "saddle brown\0" + "SaddleBrown\0" + "salmon\0" + "salmon1\0" + "salmon2\0" + "salmon3\0" + "salmon4\0" + "sandy brown\0" + "SandyBrown\0" + "sea green\0" + "SeaGreen\0" + "SeaGreen1\0" + "SeaGreen2\0" + "SeaGreen3\0" + "SeaGreen4\0" + "seashell\0" + "seashell1\0" + "seashell2\0" + "seashell3\0" + "seashell4\0" + "sienna\0" + "sienna1\0" + "sienna2\0" + "sienna3\0" + "sienna4\0" + "silver\0" + "sky blue\0" + "SkyBlue\0" + "SkyBlue1\0" + "SkyBlue2\0" + "SkyBlue3\0" + "SkyBlue4\0" + "slate blue\0" + "slate gray\0" + "slate grey\0" + "SlateBlue\0" + "SlateBlue1\0" + "SlateBlue2\0" + "SlateBlue3\0" + "SlateBlue4\0" + "SlateGray\0" + "SlateGray1\0" + "SlateGray2\0" + "SlateGray3\0" + "SlateGray4\0" + "SlateGrey\0" + "snow\0" + "snow1\0" + "snow2\0" + "snow3\0" + "snow4\0" + "spring green\0" + "SpringGreen\0" + "SpringGreen1\0" + "SpringGreen2\0" + "SpringGreen3\0" + "SpringGreen4\0" + "steel blue\0" + "SteelBlue\0" + "SteelBlue1\0" + "SteelBlue2\0" + "SteelBlue3\0" + "SteelBlue4\0" + "tan\0" + "tan1\0" + "tan2\0" + "tan3\0" + "tan4\0" + "teal\0" + "thistle\0" + "thistle1\0" + "thistle2\0" + "thistle3\0" + "thistle4\0" + "tomato\0" + "tomato1\0" + "tomato2\0" + "tomato3\0" + "tomato4\0" + "turquoise\0" + "turquoise1\0" + "turquoise2\0" + "turquoise3\0" + "turquoise4\0" + "violet\0" + "violet red\0" + "VioletRed\0" + "VioletRed1\0" + "VioletRed2\0" + "VioletRed3\0" + "VioletRed4\0" + "web gray\0" + "web green\0" + "web grey\0" + "web maroon\0" + "web purple\0" + "WebGray\0" + "WebGreen\0" + "WebGrey\0" + "WebMaroon\0" + "WebPurple\0" + "wheat\0" + "wheat1\0" + "wheat2\0" + "wheat3\0" + "wheat4\0" + "white\0" + "white smoke\0" + "WhiteSmoke\0" + "x11 gray\0" + "x11 green\0" + "x11 grey\0" + "x11 maroon\0" + "x11 purple\0" + "X11Gray\0" + "X11Green\0" + "X11Grey\0" + "X11Maroon\0" + "X11Purple\0" + "yellow\0" + "yellow green\0" + "yellow1\0" + "yellow2\0" + "yellow3\0" + "yellow4\0" + "YellowGreen\0"; + +struct xcolor_entry { + uint16_t name_offset; + uint8_t red; + uint8_t green; + uint8_t blue; +}; + +static const struct xcolor_entry xcolors[] = { + { 0, 240, 248, 255 }, + { 11, 240, 248, 255 }, + { 21, 250, 235, 215 }, + { 35, 250, 235, 215 }, + { 48, 255, 239, 219 }, + { 62, 238, 223, 204 }, + { 76, 205, 192, 176 }, + { 90, 139, 131, 120 }, + { 104, 0, 255, 255 }, + { 109, 127, 255, 212 }, + { 120, 127, 255, 212 }, + { 132, 118, 238, 198 }, + { 144, 102, 205, 170 }, + { 156, 69, 139, 116 }, + { 168, 240, 255, 255 }, + { 174, 240, 255, 255 }, + { 181, 224, 238, 238 }, + { 188, 193, 205, 205 }, + { 195, 131, 139, 139 }, + { 202, 245, 245, 220 }, + { 208, 255, 228, 196 }, + { 215, 255, 228, 196 }, + { 223, 238, 213, 183 }, + { 231, 205, 183, 158 }, + { 239, 139, 125, 107 }, + { 247, 0, 0, 0 }, + { 253, 255, 235, 205 }, + { 269, 255, 235, 205 }, + { 284, 0, 0, 255 }, + { 289, 138, 43, 226 }, + { 301, 0, 0, 255 }, + { 307, 0, 0, 238 }, + { 313, 0, 0, 205 }, + { 319, 0, 0, 139 }, + { 325, 138, 43, 226 }, + { 336, 165, 42, 42 }, + { 342, 255, 64, 64 }, + { 349, 238, 59, 59 }, + { 356, 205, 51, 51 }, + { 363, 139, 35, 35 }, + { 370, 222, 184, 135 }, + { 380, 255, 211, 155 }, + { 391, 238, 197, 145 }, + { 402, 205, 170, 125 }, + { 413, 139, 115, 85 }, + { 424, 95, 158, 160 }, + { 435, 95, 158, 160 }, + { 445, 152, 245, 255 }, + { 456, 142, 229, 238 }, + { 467, 122, 197, 205 }, + { 478, 83, 134, 139 }, + { 489, 127, 255, 0 }, + { 500, 127, 255, 0 }, + { 512, 118, 238, 0 }, + { 524, 102, 205, 0 }, + { 536, 69, 139, 0 }, + { 548, 210, 105, 30 }, + { 558, 255, 127, 36 }, + { 569, 238, 118, 33 }, + { 580, 205, 102, 29 }, + { 591, 139, 69, 19 }, + { 602, 255, 127, 80 }, + { 608, 255, 114, 86 }, + { 615, 238, 106, 80 }, + { 622, 205, 91, 69 }, + { 629, 139, 62, 47 }, + { 636, 100, 149, 237 }, + { 652, 100, 149, 237 }, + { 667, 255, 248, 220 }, + { 676, 255, 248, 220 }, + { 686, 238, 232, 205 }, + { 696, 205, 200, 177 }, + { 706, 139, 136, 120 }, + { 716, 220, 20, 60 }, + { 724, 0, 255, 255 }, + { 729, 0, 255, 255 }, + { 735, 0, 238, 238 }, + { 741, 0, 205, 205 }, + { 747, 0, 139, 139 }, + { 753, 0, 0, 139 }, + { 763, 0, 139, 139 }, + { 773, 184, 134, 11 }, + { 788, 169, 169, 169 }, + { 798, 0, 100, 0 }, + { 809, 169, 169, 169 }, + { 819, 189, 183, 107 }, + { 830, 139, 0, 139 }, + { 843, 85, 107, 47 }, + { 860, 255, 140, 0 }, + { 872, 153, 50, 204 }, + { 884, 139, 0, 0 }, + { 893, 233, 150, 122 }, + { 905, 143, 188, 143 }, + { 920, 72, 61, 139 }, + { 936, 47, 79, 79 }, + { 952, 47, 79, 79 }, + { 968, 0, 206, 209 }, + { 983, 148, 0, 211 }, + { 995, 0, 0, 139 }, + { 1004, 0, 139, 139 }, + { 1013, 184, 134, 11 }, + { 1027, 255, 185, 15 }, + { 1042, 238, 173, 14 }, + { 1057, 205, 149, 12 }, + { 1072, 139, 101, 8 }, + { 1087, 169, 169, 169 }, + { 1096, 0, 100, 0 }, + { 1106, 169, 169, 169 }, + { 1115, 189, 183, 107 }, + { 1125, 139, 0, 139 }, + { 1137, 85, 107, 47 }, + { 1152, 202, 255, 112 }, + { 1168, 188, 238, 104 }, + { 1184, 162, 205, 90 }, + { 1200, 110, 139, 61 }, + { 1216, 255, 140, 0 }, + { 1227, 255, 127, 0 }, + { 1239, 238, 118, 0 }, + { 1251, 205, 102, 0 }, + { 1263, 139, 69, 0 }, + { 1275, 153, 50, 204 }, + { 1286, 191, 62, 255 }, + { 1298, 178, 58, 238 }, + { 1310, 154, 50, 205 }, + { 1322, 104, 34, 139 }, + { 1334, 139, 0, 0 }, + { 1342, 233, 150, 122 }, + { 1353, 143, 188, 143 }, + { 1366, 193, 255, 193 }, + { 1380, 180, 238, 180 }, + { 1394, 155, 205, 155 }, + { 1408, 105, 139, 105 }, + { 1422, 72, 61, 139 }, + { 1436, 47, 79, 79 }, + { 1450, 151, 255, 255 }, + { 1465, 141, 238, 238 }, + { 1480, 121, 205, 205 }, + { 1495, 82, 139, 139 }, + { 1510, 47, 79, 79 }, + { 1524, 0, 206, 209 }, + { 1538, 148, 0, 211 }, + { 1549, 255, 20, 147 }, + { 1559, 0, 191, 255 }, + { 1573, 255, 20, 147 }, + { 1582, 255, 20, 147 }, + { 1592, 238, 18, 137 }, + { 1602, 205, 16, 118 }, + { 1612, 139, 10, 80 }, + { 1622, 0, 191, 255 }, + { 1634, 0, 191, 255 }, + { 1647, 0, 178, 238 }, + { 1660, 0, 154, 205 }, + { 1673, 0, 104, 139 }, + { 1686, 105, 105, 105 }, + { 1695, 105, 105, 105 }, + { 1704, 105, 105, 105 }, + { 1712, 105, 105, 105 }, + { 1720, 30, 144, 255 }, + { 1732, 30, 144, 255 }, + { 1743, 30, 144, 255 }, + { 1755, 28, 134, 238 }, + { 1767, 24, 116, 205 }, + { 1779, 16, 78, 139 }, + { 1791, 178, 34, 34 }, + { 1801, 255, 48, 48 }, + { 1812, 238, 44, 44 }, + { 1823, 205, 38, 38 }, + { 1834, 139, 26, 26 }, + { 1845, 255, 250, 240 }, + { 1858, 255, 250, 240 }, + { 1870, 34, 139, 34 }, + { 1883, 34, 139, 34 }, + { 1895, 255, 0, 255 }, + { 1903, 220, 220, 220 }, + { 1913, 248, 248, 255 }, + { 1925, 248, 248, 255 }, + { 1936, 255, 215, 0 }, + { 1941, 255, 215, 0 }, + { 1947, 238, 201, 0 }, + { 1953, 205, 173, 0 }, + { 1959, 139, 117, 0 }, + { 1965, 218, 165, 32 }, + { 1975, 255, 193, 37 }, + { 1986, 238, 180, 34 }, + { 1997, 205, 155, 29 }, + { 2008, 139, 105, 20 }, + { 2019, 190, 190, 190 }, + { 2024, 0, 0, 0 }, + { 2030, 3, 3, 3 }, + { 2036, 26, 26, 26 }, + { 2043, 255, 255, 255 }, + { 2051, 28, 28, 28 }, + { 2058, 31, 31, 31 }, + { 2065, 33, 33, 33 }, + { 2072, 36, 36, 36 }, + { 2079, 38, 38, 38 }, + { 2086, 41, 41, 41 }, + { 2093, 43, 43, 43 }, + { 2100, 46, 46, 46 }, + { 2107, 48, 48, 48 }, + { 2114, 5, 5, 5 }, + { 2120, 51, 51, 51 }, + { 2127, 54, 54, 54 }, + { 2134, 56, 56, 56 }, + { 2141, 59, 59, 59 }, + { 2148, 61, 61, 61 }, + { 2155, 64, 64, 64 }, + { 2162, 66, 66, 66 }, + { 2169, 69, 69, 69 }, + { 2176, 71, 71, 71 }, + { 2183, 74, 74, 74 }, + { 2190, 8, 8, 8 }, + { 2196, 77, 77, 77 }, + { 2203, 79, 79, 79 }, + { 2210, 82, 82, 82 }, + { 2217, 84, 84, 84 }, + { 2224, 87, 87, 87 }, + { 2231, 89, 89, 89 }, + { 2238, 92, 92, 92 }, + { 2245, 94, 94, 94 }, + { 2252, 97, 97, 97 }, + { 2259, 99, 99, 99 }, + { 2266, 10, 10, 10 }, + { 2272, 102, 102, 102 }, + { 2279, 105, 105, 105 }, + { 2286, 107, 107, 107 }, + { 2293, 110, 110, 110 }, + { 2300, 112, 112, 112 }, + { 2307, 115, 115, 115 }, + { 2314, 117, 117, 117 }, + { 2321, 120, 120, 120 }, + { 2328, 122, 122, 122 }, + { 2335, 125, 125, 125 }, + { 2342, 13, 13, 13 }, + { 2348, 127, 127, 127 }, + { 2355, 130, 130, 130 }, + { 2362, 133, 133, 133 }, + { 2369, 135, 135, 135 }, + { 2376, 138, 138, 138 }, + { 2383, 140, 140, 140 }, + { 2390, 143, 143, 143 }, + { 2397, 145, 145, 145 }, + { 2404, 148, 148, 148 }, + { 2411, 150, 150, 150 }, + { 2418, 15, 15, 15 }, + { 2424, 153, 153, 153 }, + { 2431, 156, 156, 156 }, + { 2438, 158, 158, 158 }, + { 2445, 161, 161, 161 }, + { 2452, 163, 163, 163 }, + { 2459, 166, 166, 166 }, + { 2466, 168, 168, 168 }, + { 2473, 171, 171, 171 }, + { 2480, 173, 173, 173 }, + { 2487, 176, 176, 176 }, + { 2494, 18, 18, 18 }, + { 2500, 179, 179, 179 }, + { 2507, 181, 181, 181 }, + { 2514, 184, 184, 184 }, + { 2521, 186, 186, 186 }, + { 2528, 189, 189, 189 }, + { 2535, 191, 191, 191 }, + { 2542, 194, 194, 194 }, + { 2549, 196, 196, 196 }, + { 2556, 199, 199, 199 }, + { 2563, 201, 201, 201 }, + { 2570, 20, 20, 20 }, + { 2576, 204, 204, 204 }, + { 2583, 207, 207, 207 }, + { 2590, 209, 209, 209 }, + { 2597, 212, 212, 212 }, + { 2604, 214, 214, 214 }, + { 2611, 217, 217, 217 }, + { 2618, 219, 219, 219 }, + { 2625, 222, 222, 222 }, + { 2632, 224, 224, 224 }, + { 2639, 227, 227, 227 }, + { 2646, 23, 23, 23 }, + { 2652, 229, 229, 229 }, + { 2659, 232, 232, 232 }, + { 2666, 235, 235, 235 }, + { 2673, 237, 237, 237 }, + { 2680, 240, 240, 240 }, + { 2687, 242, 242, 242 }, + { 2694, 245, 245, 245 }, + { 2701, 247, 247, 247 }, + { 2708, 250, 250, 250 }, + { 2715, 252, 252, 252 }, + { 2722, 0, 255, 0 }, + { 2728, 173, 255, 47 }, + { 2741, 0, 255, 0 }, + { 2748, 0, 238, 0 }, + { 2755, 0, 205, 0 }, + { 2762, 0, 139, 0 }, + { 2769, 173, 255, 47 }, + { 2781, 190, 190, 190 }, + { 2786, 0, 0, 0 }, + { 2792, 3, 3, 3 }, + { 2798, 26, 26, 26 }, + { 2805, 255, 255, 255 }, + { 2813, 28, 28, 28 }, + { 2820, 31, 31, 31 }, + { 2827, 33, 33, 33 }, + { 2834, 36, 36, 36 }, + { 2841, 38, 38, 38 }, + { 2848, 41, 41, 41 }, + { 2855, 43, 43, 43 }, + { 2862, 46, 46, 46 }, + { 2869, 48, 48, 48 }, + { 2876, 5, 5, 5 }, + { 2882, 51, 51, 51 }, + { 2889, 54, 54, 54 }, + { 2896, 56, 56, 56 }, + { 2903, 59, 59, 59 }, + { 2910, 61, 61, 61 }, + { 2917, 64, 64, 64 }, + { 2924, 66, 66, 66 }, + { 2931, 69, 69, 69 }, + { 2938, 71, 71, 71 }, + { 2945, 74, 74, 74 }, + { 2952, 8, 8, 8 }, + { 2958, 77, 77, 77 }, + { 2965, 79, 79, 79 }, + { 2972, 82, 82, 82 }, + { 2979, 84, 84, 84 }, + { 2986, 87, 87, 87 }, + { 2993, 89, 89, 89 }, + { 3000, 92, 92, 92 }, + { 3007, 94, 94, 94 }, + { 3014, 97, 97, 97 }, + { 3021, 99, 99, 99 }, + { 3028, 10, 10, 10 }, + { 3034, 102, 102, 102 }, + { 3041, 105, 105, 105 }, + { 3048, 107, 107, 107 }, + { 3055, 110, 110, 110 }, + { 3062, 112, 112, 112 }, + { 3069, 115, 115, 115 }, + { 3076, 117, 117, 117 }, + { 3083, 120, 120, 120 }, + { 3090, 122, 122, 122 }, + { 3097, 125, 125, 125 }, + { 3104, 13, 13, 13 }, + { 3110, 127, 127, 127 }, + { 3117, 130, 130, 130 }, + { 3124, 133, 133, 133 }, + { 3131, 135, 135, 135 }, + { 3138, 138, 138, 138 }, + { 3145, 140, 140, 140 }, + { 3152, 143, 143, 143 }, + { 3159, 145, 145, 145 }, + { 3166, 148, 148, 148 }, + { 3173, 150, 150, 150 }, + { 3180, 15, 15, 15 }, + { 3186, 153, 153, 153 }, + { 3193, 156, 156, 156 }, + { 3200, 158, 158, 158 }, + { 3207, 161, 161, 161 }, + { 3214, 163, 163, 163 }, + { 3221, 166, 166, 166 }, + { 3228, 168, 168, 168 }, + { 3235, 171, 171, 171 }, + { 3242, 173, 173, 173 }, + { 3249, 176, 176, 176 }, + { 3256, 18, 18, 18 }, + { 3262, 179, 179, 179 }, + { 3269, 181, 181, 181 }, + { 3276, 184, 184, 184 }, + { 3283, 186, 186, 186 }, + { 3290, 189, 189, 189 }, + { 3297, 191, 191, 191 }, + { 3304, 194, 194, 194 }, + { 3311, 196, 196, 196 }, + { 3318, 199, 199, 199 }, + { 3325, 201, 201, 201 }, + { 3332, 20, 20, 20 }, + { 3338, 204, 204, 204 }, + { 3345, 207, 207, 207 }, + { 3352, 209, 209, 209 }, + { 3359, 212, 212, 212 }, + { 3366, 214, 214, 214 }, + { 3373, 217, 217, 217 }, + { 3380, 219, 219, 219 }, + { 3387, 222, 222, 222 }, + { 3394, 224, 224, 224 }, + { 3401, 227, 227, 227 }, + { 3408, 23, 23, 23 }, + { 3414, 229, 229, 229 }, + { 3421, 232, 232, 232 }, + { 3428, 235, 235, 235 }, + { 3435, 237, 237, 237 }, + { 3442, 240, 240, 240 }, + { 3449, 242, 242, 242 }, + { 3456, 245, 245, 245 }, + { 3463, 247, 247, 247 }, + { 3470, 250, 250, 250 }, + { 3477, 252, 252, 252 }, + { 3484, 240, 255, 240 }, + { 3493, 240, 255, 240 }, + { 3503, 224, 238, 224 }, + { 3513, 193, 205, 193 }, + { 3523, 131, 139, 131 }, + { 3533, 255, 105, 180 }, + { 3542, 255, 105, 180 }, + { 3550, 255, 110, 180 }, + { 3559, 238, 106, 167 }, + { 3568, 205, 96, 144 }, + { 3577, 139, 58, 98 }, + { 3586, 205, 92, 92 }, + { 3597, 205, 92, 92 }, + { 3607, 255, 106, 106 }, + { 3618, 238, 99, 99 }, + { 3629, 205, 85, 85 }, + { 3640, 139, 58, 58 }, + { 3651, 75, 0, 130 }, + { 3658, 255, 255, 240 }, + { 3664, 255, 255, 240 }, + { 3671, 238, 238, 224 }, + { 3678, 205, 205, 193 }, + { 3685, 139, 139, 131 }, + { 3692, 240, 230, 140 }, + { 3698, 255, 246, 143 }, + { 3705, 238, 230, 133 }, + { 3712, 205, 198, 115 }, + { 3719, 139, 134, 78 }, + { 3726, 230, 230, 250 }, + { 3735, 255, 240, 245 }, + { 3750, 255, 240, 245 }, + { 3764, 255, 240, 245 }, + { 3779, 238, 224, 229 }, + { 3794, 205, 193, 197 }, + { 3809, 139, 131, 134 }, + { 3824, 124, 252, 0 }, + { 3835, 124, 252, 0 }, + { 3845, 255, 250, 205 }, + { 3859, 255, 250, 205 }, + { 3872, 255, 250, 205 }, + { 3886, 238, 233, 191 }, + { 3900, 205, 201, 165 }, + { 3914, 139, 137, 112 }, + { 3928, 173, 216, 230 }, + { 3939, 240, 128, 128 }, + { 3951, 224, 255, 255 }, + { 3962, 238, 221, 130 }, + { 3978, 250, 250, 210 }, + { 4001, 211, 211, 211 }, + { 4012, 144, 238, 144 }, + { 4024, 211, 211, 211 }, + { 4035, 255, 182, 193 }, + { 4046, 255, 160, 122 }, + { 4059, 32, 178, 170 }, + { 4075, 135, 206, 250 }, + { 4090, 132, 112, 255 }, + { 4107, 119, 136, 153 }, + { 4124, 119, 136, 153 }, + { 4141, 176, 196, 222 }, + { 4158, 255, 255, 224 }, + { 4171, 173, 216, 230 }, + { 4181, 191, 239, 255 }, + { 4192, 178, 223, 238 }, + { 4203, 154, 192, 205 }, + { 4214, 104, 131, 139 }, + { 4225, 240, 128, 128 }, + { 4236, 224, 255, 255 }, + { 4246, 224, 255, 255 }, + { 4257, 209, 238, 238 }, + { 4268, 180, 205, 205 }, + { 4279, 122, 139, 139 }, + { 4290, 238, 221, 130 }, + { 4305, 255, 236, 139 }, + { 4321, 238, 220, 130 }, + { 4337, 205, 190, 112 }, + { 4353, 139, 129, 76 }, + { 4369, 250, 250, 210 }, + { 4390, 211, 211, 211 }, + { 4400, 144, 238, 144 }, + { 4411, 211, 211, 211 }, + { 4421, 255, 182, 193 }, + { 4431, 255, 174, 185 }, + { 4442, 238, 162, 173 }, + { 4453, 205, 140, 149 }, + { 4464, 139, 95, 101 }, + { 4475, 255, 160, 122 }, + { 4487, 255, 160, 122 }, + { 4500, 238, 149, 114 }, + { 4513, 205, 129, 98 }, + { 4526, 139, 87, 66 }, + { 4539, 32, 178, 170 }, + { 4553, 135, 206, 250 }, + { 4566, 176, 226, 255 }, + { 4580, 164, 211, 238 }, + { 4594, 141, 182, 205 }, + { 4608, 96, 123, 139 }, + { 4622, 132, 112, 255 }, + { 4637, 119, 136, 153 }, + { 4652, 119, 136, 153 }, + { 4667, 176, 196, 222 }, + { 4682, 202, 225, 255 }, + { 4698, 188, 210, 238 }, + { 4714, 162, 181, 205 }, + { 4730, 110, 123, 139 }, + { 4746, 255, 255, 224 }, + { 4758, 255, 255, 224 }, + { 4771, 238, 238, 209 }, + { 4784, 205, 205, 180 }, + { 4797, 139, 139, 122 }, + { 4810, 0, 255, 0 }, + { 4815, 50, 205, 50 }, + { 4826, 50, 205, 50 }, + { 4836, 250, 240, 230 }, + { 4842, 255, 0, 255 }, + { 4850, 255, 0, 255 }, + { 4859, 238, 0, 238 }, + { 4868, 205, 0, 205 }, + { 4877, 139, 0, 139 }, + { 4886, 176, 48, 96 }, + { 4893, 255, 52, 179 }, + { 4901, 238, 48, 167 }, + { 4909, 205, 41, 144 }, + { 4917, 139, 28, 98 }, + { 4925, 102, 205, 170 }, + { 4943, 0, 0, 205 }, + { 4955, 186, 85, 211 }, + { 4969, 147, 112, 219 }, + { 4983, 60, 179, 113 }, + { 5000, 123, 104, 238 }, + { 5018, 0, 250, 154 }, + { 5038, 72, 209, 204 }, + { 5055, 199, 21, 133 }, + { 5073, 102, 205, 170 }, + { 5090, 0, 0, 205 }, + { 5101, 186, 85, 211 }, + { 5114, 224, 102, 255 }, + { 5128, 209, 95, 238 }, + { 5142, 180, 82, 205 }, + { 5156, 122, 55, 139 }, + { 5170, 147, 112, 219 }, + { 5183, 171, 130, 255 }, + { 5197, 159, 121, 238 }, + { 5211, 137, 104, 205 }, + { 5225, 93, 71, 139 }, + { 5239, 60, 179, 113 }, + { 5254, 123, 104, 238 }, + { 5270, 0, 250, 154 }, + { 5288, 72, 209, 204 }, + { 5304, 199, 21, 133 }, + { 5320, 25, 25, 112 }, + { 5334, 25, 25, 112 }, + { 5347, 245, 255, 250 }, + { 5358, 245, 255, 250 }, + { 5368, 255, 228, 225 }, + { 5379, 255, 228, 225 }, + { 5389, 255, 228, 225 }, + { 5400, 238, 213, 210 }, + { 5411, 205, 183, 181 }, + { 5422, 139, 125, 123 }, + { 5433, 255, 228, 181 }, + { 5442, 255, 222, 173 }, + { 5455, 255, 222, 173 }, + { 5467, 255, 222, 173 }, + { 5480, 238, 207, 161 }, + { 5493, 205, 179, 139 }, + { 5506, 139, 121, 94 }, + { 5519, 0, 0, 128 }, + { 5524, 0, 0, 128 }, + { 5534, 0, 0, 128 }, + { 5543, 253, 245, 230 }, + { 5552, 253, 245, 230 }, + { 5560, 128, 128, 0 }, + { 5566, 107, 142, 35 }, + { 5577, 107, 142, 35 }, + { 5587, 192, 255, 62 }, + { 5598, 179, 238, 58 }, + { 5609, 154, 205, 50 }, + { 5620, 105, 139, 34 }, + { 5631, 255, 165, 0 }, + { 5638, 255, 69, 0 }, + { 5649, 255, 165, 0 }, + { 5657, 238, 154, 0 }, + { 5665, 205, 133, 0 }, + { 5673, 139, 90, 0 }, + { 5681, 255, 69, 0 }, + { 5691, 255, 69, 0 }, + { 5702, 238, 64, 0 }, + { 5713, 205, 55, 0 }, + { 5724, 139, 37, 0 }, + { 5735, 218, 112, 214 }, + { 5742, 255, 131, 250 }, + { 5750, 238, 122, 233 }, + { 5758, 205, 105, 201 }, + { 5766, 139, 71, 137 }, + { 5774, 238, 232, 170 }, + { 5789, 152, 251, 152 }, + { 5800, 175, 238, 238 }, + { 5815, 219, 112, 147 }, + { 5831, 238, 232, 170 }, + { 5845, 152, 251, 152 }, + { 5855, 154, 255, 154 }, + { 5866, 144, 238, 144 }, + { 5877, 124, 205, 124 }, + { 5888, 84, 139, 84 }, + { 5899, 175, 238, 238 }, + { 5913, 187, 255, 255 }, + { 5928, 174, 238, 238 }, + { 5943, 150, 205, 205 }, + { 5958, 102, 139, 139 }, + { 5973, 219, 112, 147 }, + { 5987, 255, 130, 171 }, + { 6002, 238, 121, 159 }, + { 6017, 205, 104, 137 }, + { 6032, 139, 71, 93 }, + { 6047, 255, 239, 213 }, + { 6059, 255, 239, 213 }, + { 6070, 255, 218, 185 }, + { 6081, 255, 218, 185 }, + { 6091, 255, 218, 185 }, + { 6102, 238, 203, 173 }, + { 6113, 205, 175, 149 }, + { 6124, 139, 119, 101 }, + { 6135, 205, 133, 63 }, + { 6140, 255, 192, 203 }, + { 6145, 255, 181, 197 }, + { 6151, 238, 169, 184 }, + { 6157, 205, 145, 158 }, + { 6163, 139, 99, 108 }, + { 6169, 221, 160, 221 }, + { 6174, 255, 187, 255 }, + { 6180, 238, 174, 238 }, + { 6186, 205, 150, 205 }, + { 6192, 139, 102, 139 }, + { 6198, 176, 224, 230 }, + { 6210, 176, 224, 230 }, + { 6221, 160, 32, 240 }, + { 6228, 155, 48, 255 }, + { 6236, 145, 44, 238 }, + { 6244, 125, 38, 205 }, + { 6252, 85, 26, 139 }, + { 6260, 102, 51, 153 }, + { 6275, 102, 51, 153 }, + { 6289, 255, 0, 0 }, + { 6293, 255, 0, 0 }, + { 6298, 238, 0, 0 }, + { 6303, 205, 0, 0 }, + { 6308, 139, 0, 0 }, + { 6313, 188, 143, 143 }, + { 6324, 188, 143, 143 }, + { 6334, 255, 193, 193 }, + { 6345, 238, 180, 180 }, + { 6356, 205, 155, 155 }, + { 6367, 139, 105, 105 }, + { 6378, 65, 105, 225 }, + { 6389, 65, 105, 225 }, + { 6399, 72, 118, 255 }, + { 6410, 67, 110, 238 }, + { 6421, 58, 95, 205 }, + { 6432, 39, 64, 139 }, + { 6443, 139, 69, 19 }, + { 6456, 139, 69, 19 }, + { 6468, 250, 128, 114 }, + { 6475, 255, 140, 105 }, + { 6483, 238, 130, 98 }, + { 6491, 205, 112, 84 }, + { 6499, 139, 76, 57 }, + { 6507, 244, 164, 96 }, + { 6519, 244, 164, 96 }, + { 6530, 46, 139, 87 }, + { 6540, 46, 139, 87 }, + { 6549, 84, 255, 159 }, + { 6559, 78, 238, 148 }, + { 6569, 67, 205, 128 }, + { 6579, 46, 139, 87 }, + { 6589, 255, 245, 238 }, + { 6598, 255, 245, 238 }, + { 6608, 238, 229, 222 }, + { 6618, 205, 197, 191 }, + { 6628, 139, 134, 130 }, + { 6638, 160, 82, 45 }, + { 6645, 255, 130, 71 }, + { 6653, 238, 121, 66 }, + { 6661, 205, 104, 57 }, + { 6669, 139, 71, 38 }, + { 6677, 192, 192, 192 }, + { 6684, 135, 206, 235 }, + { 6693, 135, 206, 235 }, + { 6701, 135, 206, 255 }, + { 6710, 126, 192, 238 }, + { 6719, 108, 166, 205 }, + { 6728, 74, 112, 139 }, + { 6737, 106, 90, 205 }, + { 6748, 112, 128, 144 }, + { 6759, 112, 128, 144 }, + { 6770, 106, 90, 205 }, + { 6780, 131, 111, 255 }, + { 6791, 122, 103, 238 }, + { 6802, 105, 89, 205 }, + { 6813, 71, 60, 139 }, + { 6824, 112, 128, 144 }, + { 6834, 198, 226, 255 }, + { 6845, 185, 211, 238 }, + { 6856, 159, 182, 205 }, + { 6867, 108, 123, 139 }, + { 6878, 112, 128, 144 }, + { 6888, 255, 250, 250 }, + { 6893, 255, 250, 250 }, + { 6899, 238, 233, 233 }, + { 6905, 205, 201, 201 }, + { 6911, 139, 137, 137 }, + { 6917, 0, 255, 127 }, + { 6930, 0, 255, 127 }, + { 6942, 0, 255, 127 }, + { 6955, 0, 238, 118 }, + { 6968, 0, 205, 102 }, + { 6981, 0, 139, 69 }, + { 6994, 70, 130, 180 }, + { 7005, 70, 130, 180 }, + { 7015, 99, 184, 255 }, + { 7026, 92, 172, 238 }, + { 7037, 79, 148, 205 }, + { 7048, 54, 100, 139 }, + { 7059, 210, 180, 140 }, + { 7063, 255, 165, 79 }, + { 7068, 238, 154, 73 }, + { 7073, 205, 133, 63 }, + { 7078, 139, 90, 43 }, + { 7083, 0, 128, 128 }, + { 7088, 216, 191, 216 }, + { 7096, 255, 225, 255 }, + { 7105, 238, 210, 238 }, + { 7114, 205, 181, 205 }, + { 7123, 139, 123, 139 }, + { 7132, 255, 99, 71 }, + { 7139, 255, 99, 71 }, + { 7147, 238, 92, 66 }, + { 7155, 205, 79, 57 }, + { 7163, 139, 54, 38 }, + { 7171, 64, 224, 208 }, + { 7181, 0, 245, 255 }, + { 7192, 0, 229, 238 }, + { 7203, 0, 197, 205 }, + { 7214, 0, 134, 139 }, + { 7225, 238, 130, 238 }, + { 7232, 208, 32, 144 }, + { 7243, 208, 32, 144 }, + { 7253, 255, 62, 150 }, + { 7264, 238, 58, 140 }, + { 7275, 205, 50, 120 }, + { 7286, 139, 34, 82 }, + { 7297, 128, 128, 128 }, + { 7306, 0, 128, 0 }, + { 7316, 128, 128, 128 }, + { 7325, 128, 0, 0 }, + { 7336, 128, 0, 128 }, + { 7347, 128, 128, 128 }, + { 7355, 0, 128, 0 }, + { 7364, 128, 128, 128 }, + { 7372, 128, 0, 0 }, + { 7382, 128, 0, 128 }, + { 7392, 245, 222, 179 }, + { 7398, 255, 231, 186 }, + { 7405, 238, 216, 174 }, + { 7412, 205, 186, 150 }, + { 7419, 139, 126, 102 }, + { 7426, 255, 255, 255 }, + { 7432, 245, 245, 245 }, + { 7444, 245, 245, 245 }, + { 7455, 190, 190, 190 }, + { 7464, 0, 255, 0 }, + { 7474, 190, 190, 190 }, + { 7483, 176, 48, 96 }, + { 7494, 160, 32, 240 }, + { 7505, 190, 190, 190 }, + { 7513, 0, 255, 0 }, + { 7522, 190, 190, 190 }, + { 7530, 176, 48, 96 }, + { 7540, 160, 32, 240 }, + { 7550, 255, 255, 0 }, + { 7557, 154, 205, 50 }, + { 7570, 255, 255, 0 }, + { 7578, 238, 238, 0 }, + { 7586, 205, 205, 0 }, + { 7594, 139, 139, 0 }, + { 7602, 154, 205, 50 } +}; -- 2.52.0