diff options
-rw-r--r-- | .SRCINFO | 34 | ||||
-rw-r--r-- | 0001-Set-noexecstack-on-linker-generated-binary-data-files.patch | 24 | ||||
-rw-r--r-- | 0002-pymupdf.patch | 301 | ||||
-rw-r--r-- | PKGBUILD | 71 | ||||
-rw-r--r-- | mupdf.desktop | 15 | ||||
-rw-r--r-- | mupdf.xpm | 497 |
6 files changed, 942 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..625216202ccf --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,34 @@ +pkgbase = libmupdf-pymupdf + pkgdesc = Lightweight PDF and XPS viewer with patch to build PyMuPDF + pkgver = 1.17.0 + pkgrel = 2 + url = https://mupdf.com/ + arch = x86_64 + license = AGPL3 + makedepends = desktop-file-utils + makedepends = freetype2 + makedepends = freeglut + makedepends = glu + makedepends = harfbuzz + makedepends = jbig2dec + makedepends = libjpeg + makedepends = mesa-libgl + makedepends = openjpeg2 + makedepends = libxext + provides = libmupdf=1.17.0 + conflicts = libmupdf + options = staticlibs + source = https://mupdf.com/downloads/archive/mupdf-1.17.0-source.tar.xz + source = 0001-Set-noexecstack-on-linker-generated-binary-data-files.patch + source = 0002-pymupdf.patch + source = mupdf.desktop + source = mupdf.xpm + sha256sums = c935fb2593d9a28d9b56b59dad6e3b0716a6790f8a257a68fa7dcb4430bc6086 + sha256sums = 53e3ccc9dd613277a1cfb99dcf7e71216c8497a84f6a7663a2fbff9d58a10be5 + sha256sums = e1c908e0126fdcd2cb1fa6a8ee72e373ee3cc4f9c30ced0b09ea44a98e25f272 + sha256sums = ccff66979249bd4ab4ba8918660f194eb90eb0ae231b16e36a6cecdcf471883f + sha256sums = a435f44425f5432c074dee745d8fbaeb879038ec1f1ec64f037c74662f09aca8 + +pkgname = libmupdf-pymupdf + pkgdesc = Library for Lightweight PDF and XPS viewer + diff --git a/0001-Set-noexecstack-on-linker-generated-binary-data-files.patch b/0001-Set-noexecstack-on-linker-generated-binary-data-files.patch new file mode 100644 index 000000000000..8b44749edffe --- /dev/null +++ b/0001-Set-noexecstack-on-linker-generated-binary-data-files.patch @@ -0,0 +1,24 @@ +From: Tor Andersson <tor.andersson@artifex.com> +Date: Thu, 4 Jun 2020 14:38:01 +0000 (+0200) +Subject: Set noexecstack on linker-generated binary data files. +X-Git-Url: https://git.ghostscript.com/?p=mupdf.git;a=commitdiff_plain;h=e52e0c2c0297d70d0e4fc293ccd047becb18f322;hp=a86b1fa0119edef1683dc06f035bd329b54613a5 + +Set noexecstack on linker-generated binary data files. + +This will prevent the linker from flagging the mupdf library and +executables as needing an executable stack. +--- + +diff --git a/Makefile b/Makefile +index f812ac074..417663dd8 100644 +--- a/Makefile ++++ b/Makefile +@@ -64,7 +64,7 @@ endif + LINK_CMD = $(QUIET_LINK) $(MKTGTDIR) ; $(CC) $(LDFLAGS) -o $@ $^ $(LIBS) + TAGS_CMD = $(QUIET_TAGS) ctags -R --c-kinds=+p + WINDRES_CMD = $(QUIET_WINDRES) $(MKTGTDIR) ; $(WINDRES) $< $@ +-OBJCOPY_CMD = $(QUIET_OBJCOPY) $(MKTGTDIR) ; $(LD) -r -b binary -o $@ $< ++OBJCOPY_CMD = $(QUIET_OBJCOPY) $(MKTGTDIR) ; $(LD) -r -b binary -z noexecstack -o $@ $< + + # --- Rules --- + diff --git a/0002-pymupdf.patch b/0002-pymupdf.patch new file mode 100644 index 000000000000..a57853cec25b --- /dev/null +++ b/0002-pymupdf.patch @@ -0,0 +1,301 @@ +diff -ru mupdf-1.17.0-source-orig/include/mupdf/fitz/config.h mupdf-1.17.0-source/include/mupdf/fitz/config.h +--- mupdf-1.17.0-source-orig/include/mupdf/fitz/config.h 2020-05-05 19:29:09.000000000 +0800 ++++ mupdf-1.17.0-source/include/mupdf/fitz/config.h 2020-08-09 23:10:55.615700000 +0800 +@@ -2,13 +2,13 @@ + + #define FZ_CONFIG_H + +-/** ++/* + Enable the following for spot (and hence overprint/overprint + simulation) capable rendering. This forces FZ_PLOTTERS_N on. + */ + /* #define FZ_ENABLE_SPOT_RENDERING 1 */ + +-/** ++/* + Choose which plotters we need. + By default we build all the plotters in. To avoid building + plotters in that aren't needed, define the unwanted +@@ -19,7 +19,7 @@ + /* #define FZ_PLOTTERS_CMYK 1 */ + /* #define FZ_PLOTTERS_N 1 */ + +-/** ++/* + Choose which document agents to include. + By default all are enabled. To avoid building unwanted + ones, define FZ_ENABLE_... to 0. +@@ -32,12 +32,12 @@ + /* #define FZ_ENABLE_HTML 1 */ + /* #define FZ_ENABLE_EPUB 1 */ + +-/** ++/* + Choose whether to enable ICC color profiles. + */ +-/* #define FZ_ENABLE_ICC 1 */ ++#define FZ_ENABLE_ICC 1 + +-/** ++/* + Choose whether to enable JPEG2000 decoding. + By default, it is enabled, but due to frequent security + issues with the third party libraries we support disabling +@@ -45,14 +45,13 @@ + */ + /* #define FZ_ENABLE_JPX 1 */ + +-/** ++/* + Choose whether to enable JavaScript. +- By default JavaScript is enabled both for mutool and PDF +- interactivity. ++ By default JavaScript is enabled both for mutool and PDF interactivity. + */ + /* #define FZ_ENABLE_JS 1 */ + +-/** ++/* + Choose which fonts to include. + By default we include the base 14 PDF fonts, + DroidSansFallback from Android for CJK, and +@@ -61,35 +60,32 @@ + unwanted fonts. + */ + /* To avoid all noto fonts except CJK, enable: */ +-/* #define TOFU */ ++#define TOFU // <=== PyMuPDF: not the complete NOTO! + +-/* To skip the CJK font, enable: (this implicitly enables TOFU_CJK_EXT +- * and TOFU_CJK_LANG) */ ++/* To skip the CJK font, enable: (this implicitly enables TOFU_CJK_EXT and TOFU_CJK_LANG) */ + /* #define TOFU_CJK */ + +-/* To skip CJK Extension A, enable: (this implicitly enables +- * TOFU_CJK_LANG) */ +-/* #define TOFU_CJK_EXT */ ++/* To skip CJK Extension A, enable: (this implicitly enables TOFU_CJK_LANG) */ ++#define TOFU_CJK_EXT // <=== PyMuPDF: causes 1.5 MB extra size + + /* To skip CJK language specific fonts, enable: */ +-/* #define TOFU_CJK_LANG */ ++#define TOFU_CJK_LANG // <=== PyMuPDF + + /* To skip the Emoji font, enable: */ +-/* #define TOFU_EMOJI */ ++#define TOFU_EMOJI // <=== PyMuPDF + + /* To skip the ancient/historic scripts, enable: */ +-/* #define TOFU_HISTORIC */ ++#define TOFU_HISTORIC // <=== PyMuPDF + + /* To skip the symbol font, enable: */ +-/* #define TOFU_SYMBOL */ ++#define TOFU_SYMBOL // <=== PyMuPDF + + /* To skip the SIL fonts, enable: */ +-/* #define TOFU_SIL */ ++// #define TOFU_SIL // <=== PyMuPDF: ok to have it, only small fonts + + /* To skip the Base14 fonts, enable: */ + /* #define TOFU_BASE14 */ +-/* (You probably really don't want to do that except for measurement +- * purposes!) */ ++/* (You probably really don't want to do that except for measurement purposes!) */ + + /* ---------- DO NOT EDIT ANYTHING UNDER THIS LINE ---------- */ + +diff -ru mupdf-1.17.0-source-orig/source/fitz/encode-fax.c mupdf-1.17.0-source/source/fitz/encode-fax.c +--- mupdf-1.17.0-source-orig/source/fitz/encode-fax.c 2020-05-05 19:29:09.000000000 +0800 ++++ mupdf-1.17.0-source/source/fitz/encode-fax.c 2020-08-09 23:10:55.615700000 +0800 +@@ -120,7 +120,7 @@ + { + int a, b; + +- if (!line) ++ if (!line || x >= w) + return w; + + if (x == -1) +@@ -147,7 +147,7 @@ + static inline int + find_changing_color(const unsigned char *line, int x, int w, int color) + { +- if (!line) ++ if (!line || x >= w) + return w; + x = find_changing(line, x, w); + if (x < w && getbit(line, x) != color) +diff -ru mupdf-1.17.0-source-orig/source/pdf/pdf-font-add.c mupdf-1.17.0-source/source/pdf/pdf-font-add.c +--- mupdf-1.17.0-source-orig/source/pdf/pdf-font-add.c 2020-05-05 19:29:09.000000000 +0800 ++++ mupdf-1.17.0-source/source/pdf/pdf-font-add.c 2020-08-09 23:10:55.615700000 +0800 +@@ -21,10 +21,14 @@ + #else + const char *kind = FT_Get_X11_Font_Format(face); + #endif +- if (!strcmp(kind, "TrueType")) return 2; +- if (!strcmp(kind, "Type 1")) return 1; +- if (!strcmp(kind, "CFF")) return 3; +- if (!strcmp(kind, "CID Type 1")) return 1; ++ if (!strcmp(kind, "TrueType")) ++ return 2; ++ if (!strcmp(kind, "Type 1")) ++ return 1; ++ if (!strcmp(kind, "CFF")) ++ return 3; ++ if (!strcmp(kind, "CID Type 1")) ++ return 1; + return 0; + } + +@@ -54,7 +58,7 @@ + return fz_lookup_base14_font(ctx, pdf_clean_font_name(font->name), &size) == data; + } + +-static pdf_obj* ++static pdf_obj * + pdf_add_font_file(fz_context *ctx, pdf_document *doc, fz_font *font) + { + fz_buffer *buf = font->buffer; +@@ -136,9 +140,15 @@ + switch (ft_font_file_kind(face)) + { + default: +- case 1: pdf_dict_put_drop(ctx, fdobj, PDF_NAME(FontFile), fileref); break; +- case 2: pdf_dict_put_drop(ctx, fdobj, PDF_NAME(FontFile2), fileref); break; +- case 3: pdf_dict_put_drop(ctx, fdobj, PDF_NAME(FontFile3), fileref); break; ++ case 1: ++ pdf_dict_put_drop(ctx, fdobj, PDF_NAME(FontFile), fileref); ++ break; ++ case 2: ++ pdf_dict_put_drop(ctx, fdobj, PDF_NAME(FontFile2), fileref); ++ break; ++ case 3: ++ pdf_dict_put_drop(ctx, fdobj, PDF_NAME(FontFile3), fileref); ++ break; + } + } + +@@ -151,7 +161,7 @@ + } + + static void +-pdf_add_simple_font_widths(fz_context *ctx, pdf_document *doc, pdf_obj *fobj, fz_font *font, const char * const encoding[]) ++pdf_add_simple_font_widths(fz_context *ctx, pdf_document *doc, pdf_obj *fobj, fz_font *font, const char *const encoding[]) + { + int width_table[256]; + pdf_obj *widths; +@@ -196,7 +206,12 @@ + } + + /* Different states of starting, same width as last, or consecutive glyph */ +-enum { FW_START, FW_SAME, FW_RUN }; ++enum ++{ ++ FW_START, ++ FW_SAME, ++ FW_RUN ++}; + + /* ToDo: Ignore the default sized characters */ + static void +@@ -329,7 +344,7 @@ + } + + /* Descendant font construction used for CID font creation from ttf or Adobe type1 */ +-static pdf_obj* ++static pdf_obj * + pdf_add_descendant_cid_font(fz_context *ctx, pdf_document *doc, fz_font *font) + { + FT_Face face = font->ft_face; +@@ -372,9 +387,9 @@ + int n; + for (n = 1; k + n < size; ++n) + { +- if ((k & 0xFF00) != ((k+n) & 0xFF00)) /* high byte changes */ ++ if ((k & 0xFF00) != ((k + n) & 0xFF00)) /* high byte changes */ + break; +- if (table[k] + n != table[k+n]) ++ if (table[k] + n != table[k + n]) + break; + } + return n; +@@ -474,7 +489,7 @@ + fz_append_printf(ctx, buf, "%d beginbfrange\n", num_seq); + count = 0; + } +- fz_append_printf(ctx, buf, "<%04x> <%04x> <%04x>\n", k, k+n-1, table[k]); ++ fz_append_printf(ctx, buf, "<%04x> <%04x> <%04x>\n", k, k + n - 1, table[k]); + ++count; + } + } +@@ -582,7 +597,7 @@ + const char *glyph = glyph_names[i]; + if (glyph) + { +- if (last != i-1) ++ if (last != i - 1) + pdf_array_push_int(ctx, diff, i); + last = i; + pdf_array_push_name(ctx, diff, glyph); +@@ -624,9 +639,15 @@ + switch (encoding) + { + default: +- case PDF_SIMPLE_ENCODING_LATIN: enc = fz_glyph_name_from_windows_1252; break; +- case PDF_SIMPLE_ENCODING_GREEK: enc = fz_glyph_name_from_iso8859_7; break; +- case PDF_SIMPLE_ENCODING_CYRILLIC: enc = fz_glyph_name_from_koi8u; break; ++ case PDF_SIMPLE_ENCODING_LATIN: ++ enc = fz_glyph_name_from_windows_1252; ++ break; ++ case PDF_SIMPLE_ENCODING_GREEK: ++ enc = fz_glyph_name_from_iso8859_7; ++ break; ++ case PDF_SIMPLE_ENCODING_CYRILLIC: ++ enc = fz_glyph_name_from_koi8u; ++ break; + } + + fobj = pdf_add_new_dict(ctx, doc, 10); +@@ -667,8 +688,7 @@ + return fref; + } + +-int +-pdf_font_writing_supported(fz_font *font) ++int pdf_font_writing_supported(fz_font *font) + { + if (font->ft_face == NULL || font->buffer == NULL || font->buffer->len < 4) + return 0; +@@ -686,7 +706,7 @@ + { + pdf_obj *fref, *font, *subfont, *fontdesc; + pdf_obj *dfonts; +- fz_rect bbox = { -200, -200, 1200, 1200 }; ++ fz_rect bbox = {-200, -200, 1200, 1200}; + unsigned char digest[16]; + int flags; + +@@ -769,3 +789,21 @@ + + return fref; + } ++ ++void jm_valid_chars(fz_context *ctx, fz_font *font, void *arr) ++{ ++ FT_Face face = font->ft_face; ++ FT_ULong ucs; ++ FT_UInt gid; ++ long *table = (long *)arr; ++ fz_lock(ctx, FZ_LOCK_FREETYPE); ++ ucs = FT_Get_First_Char(face, &gid); ++ while (gid > 0) ++ { ++ if (gid < (FT_ULong)face->num_glyphs && face->num_glyphs > 0) ++ table[gid] = (long)ucs; ++ ucs = FT_Get_Next_Char(face, ucs, &gid); ++ } ++ fz_unlock(ctx, FZ_LOCK_FREETYPE); ++ return; ++} diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..db5a11c6c634 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,71 @@ +# Maintainer: Hsiu-Ming Chang <cges30901@gmail.com> +# Contributor: Christian Hesse <mail@eworm.de> +# Contributor: Bartłomiej Piotrowski <bpiotrowski@archlinux.org> +# Contributor: Brad Fanella <bradfanella@archlinux.us> +# Contributor: Stefan Husmann <stefan-husmann@t-online.de> +# Contributor: Pierre-Paul Paquin <pierrepaulpaquin@gmail.com> +# Contributor: xduugu + +pkgname=libmupdf-pymupdf +pkgver=1.17.0 +pkgrel=2 +pkgdesc='Lightweight PDF and XPS viewer with patch to build PyMuPDF' +arch=('x86_64') +url='https://mupdf.com/' +license=('AGPL3') +makedepends=('desktop-file-utils' 'freetype2' 'freeglut' 'glu' 'harfbuzz' + 'jbig2dec' 'libjpeg' 'mesa-libgl' 'openjpeg2' 'libxext') +# we need static libs for zathura-pdf-mupdf +provides=('libmupdf=1.17.0') +conflicts=('libmupdf') +options=('staticlibs') +source=("https://mupdf.com/downloads/archive/mupdf-${pkgver/_/}-source.tar.xz" + '0001-Set-noexecstack-on-linker-generated-binary-data-files.patch' + '0002-pymupdf.patch' + 'mupdf.desktop' + 'mupdf.xpm') +sha256sums=('c935fb2593d9a28d9b56b59dad6e3b0716a6790f8a257a68fa7dcb4430bc6086' + '53e3ccc9dd613277a1cfb99dcf7e71216c8497a84f6a7663a2fbff9d58a10be5' + 'e1c908e0126fdcd2cb1fa6a8ee72e373ee3cc4f9c30ced0b09ea44a98e25f272' + 'ccff66979249bd4ab4ba8918660f194eb90eb0ae231b16e36a6cecdcf471883f' + 'a435f44425f5432c074dee745d8fbaeb879038ec1f1ec64f037c74662f09aca8') + +prepare() { + cd mupdf-${pkgver/_/}-source + + # remove bundled packages, we want our system libraries + rm -rf thirdparty/{freeglut,freetype,harfbuzz,jbig2dec,libjpeg,openjpeg,zlib} + + # Set noexecstack on linker-generated binary data files. + patch -Np1 < ../0001-Set-noexecstack-on-linker-generated-binary-data-files.patch + + # Add patch to build PyMuPDF + patch -Np1 < ../0002-pymupdf.patch +} + +build() { + CFLAGS+=' -fPIC' + CXXFLAGS+=' -fPIC' + export CFLAGS CXXFLAGS + + USE_SYSTEM_LIBS='yes' + export USE_SYSTEM_LIBS + + cd mupdf-${pkgver/_/}-source + make build=release libs apps +} + +package() { + pkgdesc='Library for Lightweight PDF and XPS viewer' + + cd mupdf-${pkgver/_/}-source + + make build=release prefix="$pkgdir"/usr install + + rm -rf "$pkgdir"/usr/{bin,share/man} + mv "$pkgdir"/usr/share/doc/mupdf "$pkgdir"/usr/share/doc/libmupdf + + find "$pkgdir"/usr/include "$pkgdir"/usr/share "$pkgdir"/usr/lib \ + -type f -exec chmod 0644 {} + +} + diff --git a/mupdf.desktop b/mupdf.desktop new file mode 100644 index 000000000000..78c5a75a2349 --- /dev/null +++ b/mupdf.desktop @@ -0,0 +1,15 @@ +[Desktop Entry] +Name=MuPDF +GenericName=PDF file viewer +Exec=mupdf %f +TryExec=mupdf +Icon=mupdf +Terminal=false +Type=Application +MimeType=application/epub+zip;application/pdf;application/x-pdf;application/x-cbz;application/oxps;application/vnd.ms-xpsdocument;image/jpeg;image/pjpeg;image/png;image/tiff;image/x-tiff +Categories=Viewer;Graphics; +Actions=View +NoDisplay=true +[Desktop Action View] +Name=View with mupdf +Exec=mupdf %f diff --git a/mupdf.xpm b/mupdf.xpm new file mode 100644 index 000000000000..2c042f4ea8e2 --- /dev/null +++ b/mupdf.xpm @@ -0,0 +1,497 @@ +/* XPM */ +static char *mupdf[] = { +/* width height ncolors chars_per_pixel */ +"48 48 442 2", +/* colors */ +" c #000000", +" . c #2E4558", +" X c #252121", +" o c #AFAFAF", +" O c #28313B", +" + c #231F1F", +" @ c #686666", +" # c #98BDD7", +" $ c #201B1C", +" % c #7CABCC", +" & c #4487B6", +" * c #DFDEDE", +" = c #4285B4", +" - c #615E5F", +" ; c #605E5E", +" : c #23262C", +" > c #D9D8D8", +" , c #F7FAFC", +" < c #D7D6D6", +" 1 c #BFD6E6", +" 2 c #6BA0C5", +" 3 c #232122", +" 4 c #555253", +" 5 c #CDCCCC", +" 6 c #E7EFF6", +" 7 c #4786B2", +" 8 c #CADDEA", +" 9 c #4085B5", +" 0 c #AECBDF", +" q c #CBCACA", +" w c #92B9D4", +" e c #365F7D", +" r c #5A95BE", +" t c #3E83B3", +" y c #304B60", +" u c #C7C6C6", +" i c #4D8EBB", +" p c #F1F6F9", +" a c #C1C0C0", +" s c #454243", +" d c #669CC3", +" f c #81AECD", +" g c #7A7777", +" h c #434041", +" j c #3E779F", +" k c #272E36", +" l c #413E3F", +" z c #3F3C3D", +" x c #5895BF", +" c c #3D3A3B", +" v c #C6DBE9", +" b c #B8B6B7", +" n c #4282B0", +" m c #FDFDFE", +" M c #B7B6B6", +" N c #8DB5D2", +" B c #242529", +" V c #B3B2B2", +" C c #222327", +" Z c #B0AEAF", +" A c #EDF4F8", +" S c #686565", +" D c #488AB9", +" F c #9ABED8", +" G c #7EACCD", +" H c #ECF2F7", +" J c #211C1C", +" K c #666363", +" L c #F1F1F2", +" P c #ABAAAA", +" I c #4588B6", +" U c #A9A8A8", +" Y c #2D2A2B", +" T c #A7A6A6", +" R c #615D5E", +" E c #2B2829", +" W c #8DB7D5", +" Q c #F9FBFD", +" ! c #DDE9F2", +" ~ c #F8FBFC", +" ^ c #DCE9F1", +" / c #A5C5DC", +" ( c #89B3D1", +" ) c #5C5959", +" _ c #A4C5DB", +" ` c #335A76", +" ' c #518FBB", +" ] c #E6E7E7", +" [ c #5A5757", +" { c #232021", +" } c #33536C", +" | c #98BED9", +". c #E0E1E1", +".. c #7CACCE", +".X c #4488B8", +".o c #2D3F4F", +".O c #999898", +".+ c #4388B7", +".@ c #5E98C1", +".# c #CDCDCB", +".$ c #524F4F", +".% c #B0CCE0", +".& c #979696", +".* c #78A8CA", +".= c #5C96BF", +".- c #969495", +".; c #4084B4", +".: c #252930", +".> c #949293", +"., c #929091", +".< c #417FAB", +".1 c #4F8FBC", +".2 c #F3F7FA", +".3 c #D3D3D4", +".4 c #D7E5EF", +".5 c #222023", +".6 c #9FC1D9", +".7 c #679DC3", +".8 c #37678A", +".9 c #4B8BB8", +".0 c #3E769E", +".q c #3C749C", +".w c #403D3D", +".e c #92BAD6", +".r c #C8DCEA", +".t c #FEFEFE", +".y c #3D393A", +".u c #3B3738", +".i c #355974", +".p c #353132", +".a c #7A7879", +".s c #498BB9", +".d c #9BBFD8", +".f c #4E8AB4", +".g c #787677", +".h c #F2F2F2", +".j c #F0F0F0", +".k c #2F2B2C", +".l c #EEEEEE", +".z c #727071", +".x c #26282D", +".c c #ECECEC", +".v c #2B2728", +".b c #FAFCFD", +".n c #EAEAEA", +".m c #DEEAF2", +".M c #E9EAE9", +".N c #C2D8E7", +".B c #6E6C6D", +".V c #5390BC", +".C c #E8E8E8", +".Z c #6EA2C6", +".A c #272324", +".S c #E7E6E7", +".D c #E6E6E6", +".F c #252122", +".G c #29333D", +".H c #E4E4E4", +".J c #3F7AA5", +".K c #231F20", +".L c #E2E2E2", +".P c #211D1E", +".I c #E0E0E0", +".U c #EAF1F7", +".Y c #6099C2", +".T c #1F1B1C", +".R c #E9F1F6", +".E c #CDDFEB", +".W c #4387B6", +".Q c #96BBD6", +".! c #B1CDE0", +".~ c #DEDEDE", +".^ c #79A9CA", +"./ c #4285B5", +".( c #272A31", +".) c #5D97BF", +"._ c #4185B4", +".` c #DCDCDC", +".' c #959393", +".] c #DADADA", +".[ c #314B5F", +".{ c #D8D8D8", +".} c #D7D8D7", +".| c #D6D6D6", +"X c #F5F8FB", +"X. c #D4D4D4", +"XX c #6AA0C5", +"Xo c #BDD4E5", +"XO c #3A6A8C", +"X+ c #232123", +"X@ c #D3D4D3", +"X# c #D2D2D2", +"X$ c #D0D0D0", +"X% c #CECECE", +"X& c #CCCCCC", +"X* c #CADDEB", +"X= c #37617F", +"X- c #242A31", +"X; c #CACACA", +"X: c #C8DBE9", +"X> c #90B7D3", +"X, c #817F7F", +"X< c #3F7EAB", +"X1 c #548FB9", +"X2 c #355873", +"X3 c #7D7B7B", +"X4 c #C2C2C2", +"X5 c #4B8CBA", +"X6 c #C0C0C0", +"X7 c #D4E4EE", +"X8 c #81AECE", +"X9 c #659CC3", +"X0 c #787576", +"Xq c #4788B6", +"Xw c #252C35", +"Xe c #757373", +"Xr c #BABABA", +"Xt c #FCFDFE", +"Xy c #B6B6B6", +"Xu c #C4D9E8", +"Xi c #706D6E", +"Xp c #8CB5D2", +"Xa c #70A3C7", +"Xs c #8BB5D1", +"Xd c #5491BC", +"Xf c #5391BB", +"Xg c #282424", +"Xh c #272223", +"Xj c #6C696A", +"Xk c #2F4659", +"Xl c #6B6969", +"Xz c #407BA5", +"Xx c #6A6768", +"Xc c #E4E3E3", +"Xv c #3E79A3", +"Xb c #231E1F", +"Xn c #221E1E", +"Xm c #E2E1E1", +"XM c #211C1D", +"XN c #EBF2F7", +"XB c #201C1C", +"XV c #CFE0EC", +"XC c #4588B7", +"XZ c #B3CEE1", +"XA c #366384", +"XS c #5F98C0", +"XD c #4386B5", +"XF c #DEDDDD", +"XG c #2B3D4B", +"XH c #615F5F", +"XJ c #5F5D5D", +"XK c #5E5B5C", +"XL c #DCE9F2", +"XP c #407DA8", +"XI c #86B1CF", +"XU c #D4D3D3", +"XY c #3A698B", +"XT c #3E7BA6", +"XR c #232022", +"XE c #545152", +"XW c #999899", +"XQ c #79AACC", +"X! c #524F50", +"X~ c #CCCDCB", +"X^ c #3D749B", +"X/ c #93BAD5", +"X( c #77A8CA", +"X) c #37607E", +"X_ c #5B96BF", +"X` c #3F84B4", +"X' c #CAC9C9", +"X] c #C6C5C5", +"X[ c #3F7DAA", +"X{ c #F2F7FA", +"X} c #C2C1C1", +"X| c #212023", +"o c #9EC1D9", +"o. c #444142", +"oX c #3F78A0", +"oo c #90B8D5", +"oO c #FEFEFF", +"o+ c #E2ECF4", +"o@ c #2B3A47", +"o# c #25262A", +"o$ c #B1AFB0", +"o% c #28313A", +"o& c #221D1D", +"o* c #262F38", +"o= c #629BC2", +"o- c #302D2E", +"o; c #6199C1", +"o: c #201B1B", +"o> c #4587B6", +"o, c #F0F0F1", +"o< c #2D3E4C", +"o1 c #2E2B2C", +"o2 c #4385B4", +"o3 c #A8A7A7", +"o4 c #A7A5A6", +"o5 c #3D7197", +"o6 c #4183B2", +"o7 c #4083B1", +"o8 c #A5A3A4", +"o9 c #3B6F95", +"o0 c #5290BC", +"oq c #A4C4DB", +"ow c #E9F1F7", +"oe c #4387B7", +"or c #E7EFF5", +"ot c #CBDDEA", +"oy c #4185B5", +"ou c #5B95BE", +"oi c #3F83B3", +"op c #939192", +"oa c #929191", +"os c #2B3743", +"od c #4C4849", +"of c #2A3742", +"og c #F4F8FB", +"oh c #D8E6F0", +"oj c #4C8CB9", +"ok c #211F22", +"ol c #CFD0D0", +"oz c #444041", +"ox c #262C34", +"oc c #413E3E", +"ov c #403C3D", +"ob c #3B739B", +"on c #858384", +"om c #FFFFFF", +"oM c #E3EDF4", +"oN c #5995BF", +"oB c #3E3A3B", +"oV c #C7DBE9", +"oC c #2F4B61", +"oZ c #5793BD", +"oA c #3C3839", +"oS c #2A3945", +"oD c #7E7D7D", +"oF c #345873", +"oG c #363233", +"oH c #7B797A", +"oJ c #EFF4F9", +"oK c #EEF4F8", +"oL c #F3F3F3", +"oP c #9ABED7", +"oI c #4788B7", +"oU c #629AC1", +"oY c #ACAAAA", +"oT c #F1F1F1", +"oR c #EFEFEF", +"oE c #737172", +"oW c #EDEDED", +"oQ c #A9C9DF", +"o! c #FBFDFE", +"o~ c #EBEBEB", +"o^ c #DFEBF3", +"o/ c #4581AB", +"o( c #6F6D6E", +"o) c #EAE9EA", +"o_ c #E9E9E9", +"o` c #C1D7E6", +"o' c #E7E7E7", +"o] c #E6E7E6", +"o[ c #E5E5E5", +"o{ c #3F7BA5", +"o} c #242021", +"o| c #E3E3E3", +"O c #3E79A4", +"O. c #221E1F", +"OX c #26303A", +"Oo c #9C9A9A", +"OO c #E1E1E1", +"O+ c #201C1D", +"O@ c #4488B7", +"O# c #DFDFDF", +"O$ c #7BAACC", +"O% c #356384", +"O& c #1E1A1B", +"O* c #4386B6", +"O= c #4286B5", +"O- c #95BAD5", +"O; c #DDDDDD", +"O: c #1C1819", +"O> c #DBDBDB", +"O, c #D9D9D9", +"O< c #D7D7D7", +"O1 c #417FAA", +"O2 c #DAE7F1", +"O3 c #F5F9FB", +"O4 c #D5D5D5", +"O5 c #242224", +"O6 c #D4D3D4", +"O7 c #85B1CF", +"O8 c #D3D3D3", +"O9 c #699FC4", +"O0 c #4D8DB9", +"Oq c #222022", +"Ow c #34556F", +"Oe c #D1D1D1", +"Or c #D0CFD0", +"Ot c #8A8888", +"Oy c #CFCFCF", +"Ou c #CDCDCD", +"Oi c #CCCDCC", +"Op c #CADEEB", +"Oa c #E5EEF5", +"Os c #C9DCEA", +"Od c #ADCADF", +"Of c #C8DCE9", +"Og c #91B8D4", +"Oh c #5994BE", +"Oj c #3D82B3", +"Ok c #5894BD", +"Ol c #3C82B2", +"Oz c #4181AD", +"Ox c #3B3737", +"Oc c #C5C5C5", +"Ov c #293643", +"Ob c #3E7DAA", +"On c #C1C1C1", +"Om c #353131", +"OM c #D4E3EE", +"ON c #B8D1E3", +"OB c #BFBFBF", +"OV c #9CBFD8", +"OC c #80ADCD", +"OZ c #649BC2", +"OA c #4889B7", +"OS c #BDBDBD", +"OD c #2E292A", +"OF c #4283B1", +"OG c #B7B7B7", +"OH c #4183B0", +"OJ c #5794BF", +"OK c #A7C6DC", +"OL c #365B77", +"OP c #8BB4D1", +"OI c #282324", +"OU c #272323", +"OY c #6C6A6A", +"OT c None", +/* pixels */ +" oToToToT L.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h LoToToToT ", +"o,.joToToToToToToToToToToToToToToToToToToToT.h.h.h.hoToToToToToToToToToToToToToToToToToToToT.j.j", +".j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.joToLoLoR.D.~ > >.~.DoRoLoLoT.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j", +"oRoRoRoRoRoRoRoRoRoRoRoRoRoRoRoT.hXcOBoaXjX!oz c cozX!XjoaOBXc.hoToRoRoRoRoRoRoRoRoRoRoRoRoRoRoR", +".l.l.l.l.l.l.l.l.l.l.l.l.loR.j <.'X! Y.P.To: $ J J $o:.T.P YX!.' <.joR.l.l.l.l.l.l.l.l.l.l.l.l.l", +".l.l.l.l.l.l.l.l.l.l.l.l.jXm.&oz + $o& 3.x OoSXGXGoS O.x 3o& $ +oz.&Xm.j.l.l.l.l.l.l.l.l.l.l.l.l", +"oWoWoWoWoWoWoWoWoWoWoWoR uXK X $XRo% yXA.qo/.fX1X1.fo/.qXA yo%XR $ XXK uoRoWoWoWoWoWoWoWoWoWoWoW", +".c.c.c.c.c.c.c.c.c.coW Z z $ {os eXTo0..oQX*XLoMoMXLOpoQ..o0XT eos { $ z ZoW.c.c.c.c.c.c.c.c.c.c", +"o~o~o~o~o~o~o~o~o~.co3.p $.(X2X[OJ FOM !Of 0.d wOg.d 0Os.mOM FOJObX2.( $.po3.co~o~o~o~o~o~o~o~o~", +".n.n.n.n.n.n.n.noW VoGXMoso9XC G.N.!.^XfXD tOjOlOlOj tXDXd.^.% 1O$O@o9osXMoG VoW.n.n.n.n.n.n.n.n", +".n.n.n.n.n.n.n.c qo.XBo<XvX5 No oUO0 fOPXpXpXpXpXpXpXpXpOP ( NOdo^OV.sXvo<XBo. q.c.n.n.n.n.n.n.n", +"o_o_o_o_o_o_.M.L @ $o@o{.s.^.Z & t.* ~omomomomomomomomomomomom.toO.b _ D.Jo@ $ @.Lo)o_o_o_o_o_o_", +".C.C.C.C.C.Co~o8Xg kX^oeoZXf._XDXD 0omomomomomomomomomomomomomomomom.b #XCX^ kXgo8o~.C.C.C.C.C.C", +"o'o'o'o'o'.CO>.$okX=oeXDo>O=XD./Xd.momomomomomomomomomomomomomom pX7.NOK 'oeX=ok.$O>.Co'o'o'o'o'", +" ]o'o'o'.So_ TXh.o nXDXDXDXDXD.; %.bomomomomomomomomomomomomoOo`O9ojo>XDXDXD n.oXh To_ ]o'o'o'.S", +".D.D.D.D.Do| SX|XY.+XDXDXDXDXDXDXZomomomomomomomomomomomomom.4Xd.;O=XDXDXDXD.+XYX| So|.D.D.D.D.D", +"o[o[o[o[.D 5OxOvOzO*XDXDXDXD =oZo+omomomomomomomomomomomomomoP.;XDXDXDXDXDXDO*OzOvOx 5o]o[o[o[o[", +".H.H.H.Ho' POU }oeXDXDXDXDXD.;X8o!omomomomomomomomomomomom.bX(.;XDXDXDXDXDXDXDoe }OU Po'.H.H.H.H", +"o|o|o|o|.DOt.5XO.+XDXDXDXDXD &ONomomomomomomomomomomomomom.2.7._XDXDXDXDXDXDXD.+XO.5Ot.Do|o|o|o|", +"o|o|o|o|o|Xi : j.WXDXDXDXD = rOaomomomomomomomomomomomomom AXS._XDXDXDXDXDXDXD.W j :Xio|o|o|o|o|", +".L.L.L.L.I RXwXP.WXDXDXDXD.;XI momomomomomomomomomomomomomXN.=._XDXDXDXDXDXDXD.WXPXw R.I.L.L.L.L", +"OOOOOOOOO; [OX.<O*XDXDXDXD IXoomomomomomomomomomomomomomom.UX_._XDXDXDXDXDXDXDO*.<OX [O;OOOOOOOO", +".I.I.I.IO; )o*O1O*XDXDXD._.).Romomomomomog ~omomomomomomom.UX_._XDXDXDXDXDXDXDO*O1o* )O;.I.I.I.I", +"O#O#O#O#O# KX-Xz.WXDXDXD.;XsoOomomomomom vowomomomomomomom.UX_._XDXDXDXDXDXDXD.WXzX- KO#O#O#O#O#", +"O#O#O#O#. g Co5oeXDXDXDXq.Nomomomomom ,X>oromomomomomomom.UX_._XDXDXDXDXDXDXDoeo5 C gOOO#O#O#O#", +".~.~.~.~OO.- {X).XXDXD._o; HomomomomomohO9.Romomomomomomom.UX_._XDXDXDXDXDXDXD.XX) {.-OO.~.~.~.~", +"O;O;O;O;O#XyOD .o2XDXD.;Ogomomomomomom / r.Uomomomomomomom.UX_._XDXDXDXDXDXDXDo2 .ODXyO#O;O;O;O;", +".`.`.`.`O;Oeod.:oX.WXDOAoVomomomomomO3XaOk.Uomomomomomomom.UX_._XDXDXDXDXDXD.WoX.:odOeO;.`.`.`.`", +"O>O>O>O>O>O;X,.POw.W._ doJomomomomomOMoj r.Uomomomomomomom.UX_._XDXDXDXDXDXD.WOw.PX,O;O>O>O>O>O>", +"O>O>O>O>O>O;XrOmox.0 9X8Xtomomomomom.6X`ou.Uomomomomomomom.UX_._XDXDXDXDXDoe.0oxOmXrO;O>O>O>O>O>", +".].].].].].]O,.z JXkOH.VotomomomomX{ 2oiou.Uomomomomomomom.UX_._XDO= &O0 &OFXk J.zO,.].].].].].]", +"O,O,O,O,O,O,O>OS.yOq.i._OZ ^omomom.E.9._ou.Uomomomomomomom.UX_._._.9.ZXdO=.iOq.yOSO>O,O,O,O,O,O,", +".{.{.{.{.{.{.{.].,.A BX)oyXXO2omom.Q.;._ou.Uomomomomomomom.UOh._ dO-X9O=X) BOI.,.].{.{.{.{.{.{.{", +"O<O<O<O<O<O<O<.{O8o(Xno#OLo7.YXuX O7oIoiOk.Romomomomomomom HOCoqOdo=o6OLo#Xno(O8.{O<O<O<O<O<O<O<", +"O<O<O<O<O<O<O<O<.{X'XJ.PO5.[O iOgXVX:OVXsoKomomomomomomom.bOMX/.1O .[O5.PXJX'.{O<O<O<O<O<O<O<O<", +".|.|.|.|.|.|.|.|.|.}X]XH.KXn.G eX<oN.e 8 6 Qomomomom.bXN.roo xX< e.GXn.KXHX].}.|.|.|.|.|.|.|.|.|", +"O4O4O4O4O4O4O4O4O4O4O<X;Xe.vXBX+ofoFob 7.@XQ W | | WXQ.@ 7oboFofX+XB.vXeX;O<O4O4O4O4O4O4O4O4O4O4", +"X.X.X.X.X.X.X.X.X.X.X.O4X#XW sO. J.K.xo@oC `O%.8.8O% `oCo@.x.K JO. sXWX#O4X.X.X.X.X.X.X.X.X.X.X.", +"O8O8O8O6O8XUXUO8O8XUXUO8X..|OnX,oc.F $ Jo&XbXRO5O5XRXbo& J $.FocX,On.|X.O8XUX@X@O8.3O8O8O8O8O8X@", +"O8O8O8O8O8O8O8O8O8O8O8O8O8O8X.X. aop ; c Eo}.PXMXM.Po} E c ;op aX.X.O8O8O8O8O8O8O8O8O8O8O8O8O8O8", +"X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#O8O4X$X6 P.-onX3X3on.- PX6X$O4O8X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#", +"OeOeOeOeOeOeOeOeOeOeOeOeOeOeOeOeOeOeOeO8X4OGOnOcOcX} MOSX#OeOeOeOeOeOeOeOeOeOeOeOeOeOeOeOeOeOeOe", +"X$X$X$X$X$X$X$X$X$X$X$X$X$X$X$X$X$X$X$O8ono-oAov.w.u.koEX#X$X$X$X$X$X$X$X$X$X$X$X$X$X$X$X$X$X$X$", +"X$X$X$X$X$X$X$X$X$olX$X$X$X$X$X$X$X$X$X#oD l.>o1O+.P.T.BOeX$X$X$X$X$X$X$OrOrX$X$X$X$X$X$X$X$X$X$", +"OyOyOyOyOyOyOyOyOyOyOyOyOyOyOyOyOyOyOyX#oHXEXFoBO&.TO:OYX$OyOyOyOyOyOyOyOyOyOyOyOyOyOyOyOyOyOyOy", +"X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%Oy POo.CX0 -Xx.g TOyX%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%", +"X%X%OuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuX% oo$.h boYo4.O UX%OuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuX%X%", +" Ou.#OuOuOiX&X&X&X&X&X&X&X&X&X&X&X&X&Oy.a 4 * h.K.KO&XlX%X&X&X&X&X&X&X&X&X&X&X&X&X&X&OuOuX~Ou " +}; |